我build立了以下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
链OUTPUT(策略ACCEPT)目标protselect源目的地
这将在给定的IP上的端口80上的任何stream量转发到相同的IP端口8000。 通过浏览器完美工作。
如果我试图直接从控制台运行一些testing,那么不起作用的是:
lynx-head -dump http://192.168.0.116
或者我打算做的事情
ab -n 1000 -c20 192.168.0.116
在这种情况下,转发规则根本不起作用。 返回的头仍然是从端口80(apache),而不是从nginx(8000)预期。
我很确定你看到的原因是PREROUTING链不适用于通过回送接口的数据包。 当你说它是从浏览器中运行的时候,我假定你的意思是来自另一台机器,在这种情况下,你的规则将适用。 您还需要在OUTPUT链中添加一条规则,以使其能够在localhost通信上运行。 像这样的东西:
iptables -t nat -I OUTPUT --source 0/0 --destination 0/0 -p tcp --dport 80 -j REDIRECT --to-ports 8000