httpd 针对不同源地址进行重定向
今天遇到个需求,大致描述下
1.普通IP用户访问http://192.168.56.11:8080 , 打开的界面就是该站点。
2.特殊IP用户访问http://192.168.56.11:8080 , 打开的界面是http://192.168.56.11:9090
需求看上去很简单吧,实现起来费了我半天时间。
1)首先想到的是httpd的反向代理,配置是这样的:
<VirtualHost *:8080>
DocumentRoot /var/www/aaa
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://127.0.0.1:9090/
ProxyPassReverse / http://127.0.0.1:9090/
<Proxy *>
Order Deny,Allow
Deny from all
Allow from 192.168.56.233
</Proxy>
<VirtualHost *:8080>
//反向代理转发功能是实现了,关键是所有人访问8080端口都被转至9090端口,那么我就想去做限制了,使用了下面的<Proxy>,结果是只有233这台代理成功,其余的都被Forbidden,反向代理是行不通了,我又去考虑重定向。
2)重定向配置如下:
<VirtualHost *:8080>
DocumentRoot /var/www/aaa
ProxyRemote * http://127.0.0.1:9090/
NoProxy 192.168.56.0/24
<VirtualHost *:8080>
//重定向功能是实现了,关键是所有人访问8080端口都被转至9090端口,那么我就想去做限制了,使用了下面的NoProxy,结果除了192.168.56.0/24端不被代理,其余的都被重定向,重定向是行不通了。3)还是使用防火墙iptables吧,先放所有,让后我们在做转发配置
vi /etc/sysconf/iptables
-A INPUT -j ACCEPT
-A FORWARD -j ACCEPT
-A OUTPUT -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.56.233 -p tcp -m tcp --dport 8080 -j REDIRECT --to-ports 9090
查看nat防火墙配置的命令:
iptables -t nat -vnL PREROUTING --line-number
iptables -t nat -vnL OUTPUT --line-number
删除防火墙规则:
iptables -t nat -D PREROUTING 1
iptables -t nat -D OUTPUT 1
参考文档:
http://man.chinaunix.net/newsoft/ApacheMenual_CN_2.2new/mod/mod_proxy.html#proxyremote
http://www.cnblogs.com/zemliu/archive/2012/04/18/2454655.html