目前有一个位置/
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说的那样,不,使用多个位置.
原文链接:https://www.f2er.com/nginx/435612.html但是可以使位置块的内容重复性降低.这里的关键是一个命名的位置块,它包含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;
}
甚至可能更好的是将根指令放在所有位置块之外.