抱歉,标题是这样的,但我在服务器配置方面还是个新手。我遇到了一个问题(当然),我会尽力向你解释:
- 我有一个基于 apache2 的 vps,其中我配置了两个使用虚拟主机的域。
- 第一个域名用作 Web 服务器 (RUBY) 的别名,使用端口 8080
- 第二个是一个网站,因此它应该使用端口 80 运行,使用 apache2+mysql
我的问题是,网络服务器需要将连接从端口 80 重定向到 8080,所以我的 ruby 开发人员(不是我,我很烂 ruby)进行了重定向
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
结果,我的网站无法使用端口 80。我的问题是:有没有办法告诉 iptables 仅将端口 80 重定向到 ruby 服务器(以及第一个域?)的连接?我无法更改服务器的端口,所以您建议我如何将 80 用于网站?抱歉问了这么多愚蠢的问题,但我真的很讨厌。我忘了说我不再与 ruby 开发人员联系了,所以这对我来说更戏剧化了 :)
提前致谢
答案1
如果您从同一个 IP 为两个域提供服务,则无法使用端口转发来实现这一点,因为 iptables 无法知道客户端尝试连接到哪个域。您的服务器不参与 DNS 查找,并且客户端不会发送 HTTP 标头,Host:
直到后TCP 连接已建立。
不过,你可以使用 Apache 的mod_proxy建立一个反向代理将 HTTP 请求中继到 Ruby 服务器。 这个食谱演示如何:
<VirtualHost *:*>
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ServerName your.ruby.site
</VirtualHost>
使用此配置,访问 Ruby 站点的人实际上不会连接到 Ruby 服务器,而是连接到 Apache。但 Apache 将通过从 Ruby 服务器请求页面来提供页面,因此结果基本相同。