我最终设法将我的服务器移至 VirtualBox 虚拟机。
VM 正在 NAT 模式下运行。我已转发了必要的端口,包括端口 80,我首先使用 iptables 将其转发到端口 8888,然后通过 VirtualBox 将其转发到客户机操作系统上的端口 80。
-A PREROUTING -i p10p1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8888
一切正常!除了...我无法从 PHP $_SERVER['REMOTE_ADDR'] 中看到网站访问者的 IP 地址。我只看到 1 个 IP 地址,我猜是主机的 NAT 地址。
如何配置我的系统(主机操作系统和 VirtualBox)以便能够运行 Web 服务器并查看访问者的 IP 地址?
我的主机通过 1 个固定 IP 地址直接连接到互联网。为访客的桥接连接获取另一个 IP 是不可能的(这已经是一个相当昂贵的互联网连接)。
答案1
请尝试我在 virtualbox 论坛中找到的解决方案,它对我有用!!!
无需桥接模式即可实现!出于某些奇怪的原因,VirtualBox 中的默认 NAT 模式会重写原始源。
您需要使用以下方法将 NAT 切换为透明模式
VBoxManage modifyvm <your-vm name> --nataliasmode1 proxyonly
更多详细信息请参见此处:
https://forums.virtualbox.org/viewtopic.php?f=7&t=43500#p260181
答案2
使用 NAT 您无法将访问者的 IP 地址传递到 Web 服务器。与 Web 服务器的所有连接都将来自运行 Virtual Box 的主机。
为了能够做到这一点,您需要在运行 VirtualBox 的主机操作系统上设置 HAproxy 实例,或者 nginx,以便在每个 HTTP 请求上添加带有访问者真实源 IP 地址的自定义 HTTP 标头。
然后,该标头在后端 Web 服务器上进行解析,并用于 Web 服务器的访问/错误日志和统计信息。
如果您的后端网络服务器是 Apache,您将需要以下模块才能解析自定义 HTTP 标头。 http://stderr.net/apache/rpaf/