我有一台虚拟机,其中端口 80 被 apache tomcat(host.nvoids.com)占用。
并且我在端口 8020 上运行 apache2 php,这是一个 wordpress 博客(host.nvoids.com:8020)
我希望当有人访问我的 blog.nvoids.com 服务器时,它应该被转发到 8020。
请告诉我是否可以使用任何基于规则的端口转发程序来做些什么?
类似下面的内容
iptables -t nat -A PREROUTING -d blog.nvoids.com -p tcp -m multiport --dports 80,443 -j DNAT --to-destination blog.nvoids.com:8020
我没有尝试这个,因为我不知道如何关闭上述命令。
是否有可以分配给 iptables 规则的规则名称或编号?我可以打开/关闭它吗?
问候
答案1
撤消的规范方法
iptables -t nat -A PREROUTING -d blog.nvoids.com -p tcp -m multiport --dports 80,443 -j DNAT --to-destination blog.nvoids.com:8020
只需替换-A
为-D
(将添加替换为删除):
iptables -t nat -D PREROUTING -d blog.nvoids.com -p tcp -m multiport --dports 80,443 -j DNAT --to-destination blog.nvoids.com:8020
感谢您对“我如何破坏事物然后清理”感兴趣并提供实际的域名。
另外,您说的是 host.nvoids.com:8020,但您的命令却说的是 blog.nvoids.com:8020,这可能是一个错误。
我认为 iptables/DNAT 不会对你有用。原因是:使用 IP 路由表时,要注意的主要事项是不仅数据包应该单向传输,而且生成的数据包应该(大致)返回相同的路由。host.nvoids.com 中没有任何内容会导致它将数据包返回到“iptables 机器”。客户端不希望将数据包发送到一个 IP 并收到来自不同 IP 的回复 - 这是行不通的。
也许在 blog.nvoids.com 上使用 haproxy,或者类似的简单的反向代理?
答案2
您无法使用 iptables 来执行此操作;您需要一个反向代理。
iptables 在网络堆栈的第 2/3/4 层工作,但是 HTTPHost
标头在这些层不可用,因此 iptables 无法区分端口 80 上的数据包foo.example.com
和另一个数据包bar.example.com
(假设两个站点解析为同一个 IP 地址)。iptables 看到的只是发往端口 80(或端口 443)上的 IP 地址的数据包。
要使用反向代理,您需要将 tomcat 移动到另一个端口(例如,8080),然后将反向代理配置为接受端口 80 和 443 上的连接。反向代理将检查Host
传入连接的 HTTP 标头,并将流量代理到适当的上游服务器(在您的情况下为 Tomcat 或 Apache2)。
nginx 通常用作反向代理,但其他一些选项包括 apache、haproxy 和 squid。
答案3
编辑/etc/apache2/sites-available/000-default.conf
# Redirect all requests to the local Apache server to port 8080
RewriteRule ^.*$ http://%{HTTP_HOST}:8020%{REQUEST_URI}
apachectl restart 此外,这个端口重定向是使用 Apache 模块 mod_proxy 设置的。为此,我们应该在服务器上启用 mod_proxy。 忘掉那些 iptables 规则