Nginx 在if语句中限制IP访问
Jan232019
一些web服务,出于安全考虑是不想让其他人访问到,除了添加登录用户认证外,还可以使用Nginx限制IP访问,只允许指定IP的用户访问站点或者接口。即nginx deny ip access
Nginx中限制IP访问的一般用法是在location中使用allow和deny来限制,如:
1 2 3 4 5 6 7 8 |
location / { allow 127.0.0.1; allow 172.0.0.0/8; allow 10.10.0.0/16; allow 202.106.0.20/32; allow 114.114.114.114/32; deny all; } |
实际应用中由于我们配置了泛解析域名,location中用到了if语句来匹配server_name,而allow和deny指令无法使用在if语句里面。
1 2 3 4 5 |
Nginx deny的用法: deny 语法: deny address | CIDR | unix: | all; 默认值: — 配置段: http, server, location, limit_except |
如果在if语句下使用deny指令会有如下报错:
1 |
"deny" directive is not allowed here in /etc/nginx/conf.d/default.conf:21 |
还有一个问题是Ningx配置是不支持if嵌套的,所以下面使用了set变量的方式来实现嵌套功能,使用return 403来替代deny指令,具体如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
server { listen 80; server_name ~^(?<subdomain>.+)\.sudops\.com$; location / { set $myoffice 0; if ($host = "subdomain.sudops.com") { proxy_pass http://172.30.1.11:2019; set $myoffice "${myoffice}1"; } if ($remote_addr !~ "^(127.0.0.1|172.|10.10.|202.106.0.20|114.114.114.114)") { set $myoffice "${myoffice}2"; } if ($myoffice = "012") { return 403; } } } |
本文固定链接: https://www.sudops.com/nginx-deny-ip-access-in-if.html | 运维·速度
【上一篇】Docker下如何导入导出neo4j数据
【下一篇】sqlalchemy.exc.TimeoutError: QueuePool limit of size 5 overflow 10 reached
【下一篇】sqlalchemy.exc.TimeoutError: QueuePool limit of size 5 overflow 10 reached