我决定在新服务器上安装 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-save
、iptables-legacy-save
、进行检查nft list ruleset
。