端口转发后,Apache 虚拟主机无法公开访问

端口转发后,Apache 虚拟主机无法公开访问

我决定在新服务器上安装 Proxmox 来托管 Web、电子邮件和 VPS 服务器。这样,我就可以为每种服务器类型设置多个虚拟机。

我使用 Debian 9 作为我的 Apache Web 服务器。而且我已经设法使用复制器插件导入了我的 WordPress 网站,并且运行完美。我将 PHPMyAdmin 中的 WP_Options 表编辑为 https 而不是 HTTP 作为网站 URL,然后我像这样设置了我的 Apache 虚拟主机 (mydomain.com.conf)

<VirtualHost *:80>
    ServerName mydomain.com
    ServerAdmin root@localhost
    Redirect "/" "https:// mydomain.com"
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin root@localhost
    DocumentRoot /var/www/mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/mydomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem

    <Directory /var/www/mydomain.com>
        AllowOverride All
        DirectoryIndex index.php
        Require all granted
    </Directory>

</VirtualHost>

我可以通过在 Windows 主机文件中设置规则来本地访问我的网站,如下所示:

192.168.10.104      mydomain.com

我还设置了静态 IP,以避免 Web 服务器获取新的 IP 地址。我在 /etc/network/interfaces 中执行了此操作

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug ens18
iface ens18 inet static
address 192.168.10.104
netmask 255.255.255.0
gateway 192.168.10.1

# This is an autoconfigured IPv6 interface
iface ens18 inet6 auto

我确实想指出,我为我的 [公共 IP 地址][1] 创建了一个虚拟主机。

为了避免冲突,我禁用了 UFW 防火墙并删除了 fail2ban。仅暂时如此。

在我看来,我的 DNS、名称服务器和端口转发设置正确。不过,我也可能错了。

[我的域名注册商 NS 配置][2]

[我在 DigitalOcean 上的 DNS 配置][3]

[我的端口转发配置][4]

如果我尝试使用 [UpTrends][5] 访问我的网站,则会收到“TCP 连接失败”的提示。从我本地网站的角度来看,我的 SSL 证书也没有问题。

有什么建议吗?

答案1

最后!

事实证明,解决方法是只需重新启动路由器(断电 10 秒),然后重新启动服务器。

有时问题可以通过简单但出乎意料的方式解决:)

答案2

您的 DNS 配置正确,并且访问http://example.com成功连接到 publicip:80 并提供 HTTP 重定向。

但是,连接到 publicip:443(即https://example.com)会返回 ICMP“主机不可达”,在这种情况下,该信息要么来自您的路由器(具有公共 IP 地址的设备,无论是 Proxmox 主机还是专用路由器都无所谓),要么来自 Web 服务器本身。

由于 ICMP 错误会延迟发生,因此最有可能的来自路由器,表明:443 的端口转发规则指向错误的 IP 地址(未使用的 IP 地址,即 ARP 回复超时)。

(如果是防火墙阻止,连接尝试将立即返回 RST 或 ICMP 错误,或者不返回任何内容。)

如果设置对,用来tcpdump看看是什么实际上正在发生。tcpdump -e -n -i <interface> "arp or port 443"在 Proxmox 主机(面向您的 Web VM 的接口上)上运行将显示端口转发规则尝试访问的实际 IP 地址。


同样适用于一般情况;仅仅关闭是不够的。你还需要看看当前的防火墙规则(实际的防火墙是 iptables 或 nft);即检查当前状态是否与请求的状态匹配。您无法确定禁用 ufw 是否会导致防火墙完全清空,直到您使用iptables-saveiptables-legacy-save、进行检查nft list ruleset

相关内容