加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

nginx基于一个“位置”中的URI阻止IP

发布时间:2020-12-13 21:26:28 所属栏目:Nginx 来源:网络整理
导读:目前有一个位置/ location / { root /var/www/docs; proxy_pass http://backend; proxy_buffering on; proxy_buffer_size 64k; proxy_buffers 256 64k; } 需要通过IP过滤. 理想情况下,为了减少位置中相同指令的重复次数,我想在位置块内执行测试 location / {

目前有一个位置/

  location / {
    root  /var/www/docs;
    proxy_pass  http://backend;
    proxy_buffering     on;
    proxy_buffer_size   64k;
    proxy_buffers       256   64k;
  }

需要通过IP过滤.

理想情况下,为了减少位置中相同指令的重复次数,我想在位置块内执行测试

  location / {

    if ($uri ~ '^/(abc|def|ghi)') {
        allow 10.0.0.0/8;
        allow 1.2.3.4;
        deny all;
    }

    root  /var/www/docs;
    proxy_pass  http://backend;
    proxy_buffering     on;
    proxy_buffer_size   64k;
    proxy_buffers       256   64k;
  }

不幸的是,似乎allow / deny指令不能在if块中使用.

"allow" directive is not allowed here in /etc/nginx/sites-enabled/mysite:20

是否有一种优雅的方式来执行测试而不重复位置块?

(喜欢

  location ~ /(abc|def|ghi) {

        allow 10.0.0.0/8;
        allow 1.2.3.4;
        deny all;

        ... 5 other lines root,proxy...
   }

  location  / {

        ... 5 other lines root,proxy...
   }

)

最佳答案
就像coredump说的那样,不,使用多个位置.

但是可以使位置块的内容重复性降低.这里的关键是一个命名的位置块,它包含root和proxy _…指令.

例如:

location / {
  try_files $uri @proxy;
}
location ~ /(abc|def|ghi) {
  allow 10.0.0.0/8;
  allow 1.2.3.4;
  deny all;

  try_files $uri @proxy;
}
location @proxy {
  root  /var/www/docs;
  proxy_pass  http://backend;
  proxy_buffering     on;
  proxy_buffer_size   64k;
  proxy_buffers       256   64k;
}

甚至可能更好的是将根指令放在所有位置块之外.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读