![Nginx - 仅阻止对除指定 IP 范围之外的所有路径部分的访问](https://linux22.com/image/776946/Nginx%20-%20%E4%BB%85%E9%98%BB%E6%AD%A2%E5%AF%B9%E9%99%A4%E6%8C%87%E5%AE%9A%20IP%20%E8%8C%83%E5%9B%B4%E4%B9%8B%E5%A4%96%E7%9A%84%E6%89%80%E6%9C%89%E8%B7%AF%E5%BE%84%E9%83%A8%E5%88%86%E7%9A%84%E8%AE%BF%E9%97%AE.png)
我正在尝试阻止通过 Nginx 访问部分路径,除非源 IP 在指定范围内。
我思考我已经通过多次反复尝试解决了这个问题,但是当路径包含查询字符串时,我似乎遇到了麻烦:
不应该起作用(除非在指定的 IP 范围内):
/登录
/登录/
应该有效(甚至公开):
/登录/其他
/[电子邮件保护]&类型=专业
当前位置区块:
location ~ ^/(login|login/)$ {
allow 10.0.102.0/24;
deny all;
return 403;
}
欢迎提出任何建议,谢谢!
答案1
以下配置仅允许从 IP 地址范围 192.168.1.0/24 和 192.168.2.0/24 访问对 /login URL 路径的传入请求:
server {
...
location /login {
if ($remote_addr ~ "^192\.168\.1\.\d{1,3}$") {
allow all;
}
if ($remote_addr ~ "^192\.168\.2\.\d{1,3}$") {
allow all;
}
deny all;
}
...
}