我有一个www.example.com
IP X.X.Y.Y
,我想将流量从端口 80 转发到域(www.example.com),我使用了以下 iptable:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination X.X.Y.Y:80
但我没有得到好的结果,因为X.X.Y.Y
内容不等于域名(www.example.com)
例如:如果你198.252.206.16
用浏览器访问(serverfault 的 ip),你会看到地址(ip 地址)的结果和内容不相等www.serverfault.com
。
我想在上面的 iptables 规则中使用域名,例如:(--to-destination www.example.com
这只是一个例子,我知道它不起作用),我该怎么做?
有没有不使用 iptables 的替代方法?
谢谢
答案1
我认为您需要一个 HTTP 代理来重写请求标头。IPTables 不会解析 HTTP 标头并替换其中的域。
您应该查看像 Nginx 或 Squid 这样的程序来实现这一点,它们只是理解并将 HTTP 请求标头重写到您想要的域中。
IPTables 不知道比 TCP 或 UDP 更高级的协议。
答案2
iptables
即使使用该选项,您也无法做到这一点,-d
因为域名是在 iptables 启动时加载的。正确的方法是使用像 Squid 这样的代理服务器。
答案3
在你的网络服务器上执行以下操作:
NameVirtualHost *:80
<VirtualHost *:80>
# The DNS1 site is hosted locally
ServerName DNS1
DocumentRoot /var/www./...
</VirtualHost>
<VirtualHost *:80>
ServerName DNS2
# Forward all requests to container:
Proxypass / http://<container-ip>
ProxypassReverse / http://<container-ip>
</VirtualHost>