You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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覆盖),具体步骤如下:

  1. 编辑这个预留的自定义配置文件:

    nano /var/www/vhosts/system/example.com/conf/vhost_nginx.conf
    
  2. 添加以下server级别的IP限制规则(直接写,不需要包裹在location /里):

    # 允许WAF的IP段访问
    allow 199.83.128.0/21;
    allow 2a02:e980::/29;
    # 拒绝所有其他IP
    deny all;
    
  3. 测试Nginx配置是否合法:

    nginx -t
    

    如果输出test is successful就说明配置没问题。

  4. 重载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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:55:27