我处于一个非常不寻常的境地,我花了将近 8 个小时来试图找出问题所在。
设置
我有一台运行 Debian 11 的服务器。在这台服务器中,我设置了一个带有 KVM 的 CentOS 虚拟机。虚拟机在 Apache 服务器后面托管一个复杂的 Web 应用程序。KVM 的网络接口是 NAT,因此为了访问 Web 应用程序,我使用libvirt
钩子设置了端口转发规则,如下所述:
https://wiki.libvirt.org/page/Networking#Forwarding_Incoming_Connections
我的设置将所有传入到端口 443 的连接转发到虚拟机上的 Apache 服务器,并且运行正常。
我还在主机上设置了一个 Nginx 服务器,因为我打算将其用作反向代理。我将在主机服务器上的端口 9000 上托管另一个应用程序。使用 Nginx 作为反向代理,我计划将所有请求重定向到https://example.com
虚拟机,并将所有请求重定向https://example.com/app/
到在端口 9000 上运行的 Web 应用程序。
问题
在设置虚拟机及其相应的端口转发规则后,我安装了 Nginx 服务器。但是当我尝试运行 Nginx 服务器的起始页时,无法访问。我知道端口 443 被转发到虚拟机。因此,我尝试加载,并http://example.com
期望它在端口 80 上加载 Nginx 起始页。但它一直提示该网站无法访问。
到目前为止我尝试过什么?
我怀疑从主机到客户机的端口转发规则可能是导致此问题的根本原因。因此,我将端口转发规则从端口 443 更改为 8000。因此,对端口 8000 的任何请求都将转发到虚拟机上的 Apache 服务器。但执行此操作后,端口 443 也变得无法访问。
我尝试按照此处所述彻底清除 iptables:
但 Nginx 服务器仍然无法访问。
而且,非常奇怪的是,清除 iptables 后,当我尝试使用 访问在端口 9000 上运行的应用程序时,http://example.com:9000
我得到了一个400 Bad request error
,而当我将协议更改为 时https
,页面变得无法访问。
任何建议都会很有帮助。谢谢。