我已经在服务器上安装了 varnish,并且想在不影响正常使用的情况下测试配置。我让 apache 监听端口 80,让 varnish 监听端口 8080。因此,我希望来自我的 IP abcd 的所有请求都通过 varnish,并且应该允许所有其他 IP 正常访问 apache。
我读到过一些文章说可以使用 Iptables 中的 PREROUTING 来实现这一点。有人能告诉我怎么做吗?我在服务器上托管了 2 个网站,是否可以只为一个域配置此功能?
更新
我尝试了该命令,但是没有起作用
root@git:~# iptables -A PREROUTING -t nat -i venet0 -p tcp -s 117.201.192.67 --dport 80 -j REDIRECT --to-port 8000
root@git:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
root@git:~# iptables -A PREROUTING -t nat -i venet0:0 -p tcp -s 117.201.192.67 --dport 80 -j REDIRECT --to-port 8000
Warning: weird character in interface `venet0:0' (No aliases, :, ! or *).
root@git:~# iptables -A PREROUTING -t nat -p tcp -s 117.201.192.67 --dport 80 -j REDIRECT --to-port 8000
root@git:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我在 VPS 上,没有名为 的接口eth0
。/sbin/ifconfig
列出lo
、、和仅。venet0
venet0:0
venet0:1
venet0:2
更新 2- 在开头插入规则有效
iptables -t nat -I PREROUTING -p tcp -s 117.201.192.67 --dport 80 -j REDIRECT --to-port 8000
是否也可以检查请求的主机名?我只想重定向对 mydomainname.com 的请求
答案1
您可以在 iptables 重定向中指定源地址(或网络),如下所示:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
规则是从上到下阅读的,并且第一场比赛开始,因此您可能必须将其粘贴在正确的位置。