我的 Apache/2.2.14(Ubuntu)在端口 80 上运行。我也试图让它监听端口 999,但不对 apache 配置进行任何更改,而只使用 iptables。
我已将其添加到 iptables 中:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 999 -j REDIRECT --to-port 80
我部分成功了。访问时http://域名:999/服务器返回一个网站,但是它加载默认的 vhost 页面而不是我请求的 vhost。
答案1
如果不改变 apache 配置,就不可能实现。
您正在做的是,将自定义端口 (999) 上的请求转发到在端口 80 上运行的 apache。但正如您已经注意到的,iptables 知道虚拟站点并将请求转发给 apache,而 apache 正在返回默认站点。如果您只有一个虚拟站点,您可以将其设置为默认站点,它应该可以工作,但对于多个基于名称的虚拟主机不会。为什么?
使用基于名称的虚拟主机,服务器依靠客户端将主机名作为 HTTP 标头的一部分进行报告。使用此技术,许多不同的主机可以共享相同的 IP 地址。
你需要做这样的事情:在不同的端口上运行不同的站点,对于您正在尝试的事情。