我在 NAT 后面的服务器上使用 Apache 设置了 DirectAdmin。
从机器外部访问 VirtualHost 时(通过 Internet 和 Intranet),一切都正常工作,但是从本地主机访问同一个 VirtualHost 时遇到问题(即通过在服务器内部使用 curl mywebsite.com)。
相关网络设备:
eth0 : IP Address inside the NAT
eth0:0 : IP Address outside the NAT (i.e. public IP Address)
eth1 : LAN IP Address
lo : Loopback
以下是相关的httpd配置:
Listen 80
NameVirtualHost *:80
DocumentRoot "/var/www/html"
<VirtualHost *:80>
ServerName mydomain.com
...
</VirtualHost>
使用通配符时,人们会期望在请求标头中设置指令NameVirtualHost
的请求(确实如此)由该指令提供服务。但是,当我从服务器内部访问时,Apache 会回退到不允许我访问主机。Host: mydomain.com
curl
VirtualHost
curl mydomain.com
DocumentRoot
VirualHost
我让它工作的唯一方法是编辑/etc/hosts
和定义 NAT 内的 IP mydomain.com
。
另一条可能有用的信息:
我<?php print_r($_SERVER); ?>
在服务器内部和外部运行了一个测试页面来检查值,SERVER_IP
当我curl
从远程机器获取 NAT 内的 IP 地址时,但是当我curl
从服务器内部获取时,我获取公共 IP 地址。
域名在两端(服务器内部和外部)解析为完全相同的 IP 地址。
此致。
答案1
您可以使用http://xip.io使用您的计算机的 IP 地址为您的虚拟主机定义一个临时域。
簡單又容易 ;)
答案2
你可能想看看我这篇文章是否相关