我有nginx设置为一组apache(LAMP)后端监听端口8080的反向代理。
我还configuration了每个后端服务器的mod_rpaf.conf文件,以包含nginx服务器的代理IP:
<IfModule mod_rpaf.c> RPAF_Enable On RPAF_ProxyIPs 127.0.0.1 192.168.0.1 # <- nginx server IP RPAF_Header X-Forwarded-For RPAF_SetHostName On RPAF_SetHTTPS On RPAF_SetPort On </IfModule>
我怎样才能configurationhttpd.conf拒绝任何不是来自nginx的连接?
我已经尝试了以下内容:
<Directory "/var/www/html"> Order allow,deny Allow from 192.168.0.1 Allow from 127 Deny from all </Directory>
但是这似乎限制了对nginx代理本身以及任何其他IP的访问。
这是由于mod_rpaf转发客户端IP吗? 如果是的话,我该如何得到这个?
由于mod_rpaf模块转发真实的客户端IP,因此您不能通过自己的httpd.conf文件阻止对apache后端服务器的公共访问。
设置几个IPtables规则将阻止除nginx反向代理以外的任何人(公共访问)访问端口8080,而不会影响客户端真实IP的转发:
跑:
#iptables -A INPUT -p tcp --dport 8080 -s 192.168.0.1 -j ACCEPT #iptables -A INPUT -p tcp --dport 8080 -j DROP #service iptables save #service iptables restart
现在,只能通过端口8080访问apache后端服务器。
我想你应该改变你的允许/ deny_statements这样的顺序:
<Directory "/var/www/html"> Order deny,allow Deny from all Allow from 192.168.0.1 Allow from 127 </Directory>
因为( 订单文档 )
订购是以下之一:
允许,拒绝 – 首先,所有允许指令都被评估; 至less一个必须匹配,否则请求被拒绝。 接下来,所有Deny指令都被评估。 如果有任何匹配,请求被拒绝。 最后,默认情况下,拒绝任何不符合Allow或Deny指令的请求。
拒绝,允许 – 首先,评估所有拒绝指令; 如果匹配,请求将被拒绝,除非它也匹配Allow指令。 任何不符合任何允许或拒绝指令的请求都是允许的。
从文档中例证 :
使用Order可以让你确定你实际上是通过组合一个Deny和一个Allow指令来限制你想要进入的组:
Order deny,allow Deny from all Allow from dev.example.com