我设置了以下ip表规则:
sudo iptables -t nat -I PREROUTING --dst 192.168.0.116 -p tcp --dport 80 -j REDIRECT --to-ports 8000
sudo iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- anywhere static.snake2.test tcp dpt:www redir ports 8000
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination链式输出(策略接受)目标选择源目的地
这将将给定ip上80端口上的任何通信量转发到同一ip上的端口8000。通过浏览器工作得很好。
不起作用的是,如果我试图直接从控制台运行一些测试:
林克斯-head -dump http://192.168.0.116
或者我打算做什么
ab -n 1000 -c20 192.168.0.116在这种情况下,转发规则根本不起作用。返回的头仍然来自端口80 (apache),而不像nginx (8000)所期望的那样。
发布于 2012-02-20 17:01:35
我确信,您之所以看到这一点,是因为PREROUTING链不适用于通过回送接口的数据包。当您说它在浏览器中工作时,我假设您的意思是从另一台机器,在这种情况下,您的规则将适用。您还需要向输出链中添加一个规则,以使其在本地主机流量上工作。就像这样:
iptables -t nat -I OUTPUT --source 0/0 --destination 0/0 -p tcp --dport 80 -j REDIRECT --to-ports 8000https://serverfault.com/questions/361877
复制相似问题