Apache+Nginx组合架构下基于WAF云IP段的域名访问控制配置问题
Apache+Nginx组合架构下基于WAF云IP段的域名访问控制配置问题
你的思路是否正确?
完全正确!因为你的架构是客户端→DNS→WAF→Nginx→Apache,Nginx作为反向代理直接对接WAF,所以只有Nginx能拿到WAF的真实IP,而Apache收到的是Nginx转发的请求(Nginx已经把用户真实IP通过X-Real-IP等头传递给了Apache),所以在Apache层面限制WAF IP必然导致所有正常请求被拦截(返回403),必须在Nginx层面做IP访问控制才是正确的方向。
为什么会出现duplicate location "/"错误?
Plesk自动生成的Nginx配置文件里,已经默认创建了location /块(用来把动态请求转发给Apache),而你在附加指令里又添加了一个一模一样的location /块。Nginx的规则是:同一个server块中不允许存在多个匹配规则完全相同的location,所以就触发了这个错误。
正确的配置方法
根据你提供的配置文件,Plesk已经预留了自定义配置的入口:include "/var/www/vhosts/system/example.com/conf/vhost_nginx.conf";,这个空文件就是用来添加你的自定义规则的(别修改自动生成的主配置,否则会被Plesk覆盖),具体步骤如下:
编辑这个预留的自定义配置文件:
nano /var/www/vhosts/system/example.com/conf/vhost_nginx.conf添加以下server级别的IP限制规则(直接写,不需要包裹在
location /里):# 允许WAF的IP段访问 allow 199.83.128.0/21; allow 2a02:e980::/29; # 拒绝所有其他IP deny all;测试Nginx配置是否合法:
nginx -t如果输出
test is successful就说明配置没问题。重载Nginx使配置生效:
service nginx reload
额外说明
- 关于Let's Encrypt证书续期:你的配置里已经有专门处理
/.well-known/acme-challenge/的location,并且设置了allow all;,这个location的优先级(^~前缀)高于server级别的deny all,所以证书续期不会受到IP限制的影响,可以正常进行。 - HTTP跳转的IP限制:如果你想连HTTP(80端口)的301跳转也限制仅WAF IP访问,可以在Plesk的域名设置中,找到“Additional directives for HTTP”,添加同样的
allow和deny规则即可。
备注:内容来源于stack exchange,提问作者user414873
相关产品推荐
相关产品推荐

