Nginx配置中deny/allow规则在/ip路径下不生效问题求助
问题原因与解决办法
你的问题出在location /ip块中指令的执行顺序:return指令写在了allow/deny规则的前面,而Nginx处理location内的指令是自上而下执行的,return属于终止型指令——一旦执行到它,就会直接生成HTTP响应返回给客户端,后面的访问控制规则根本不会被触发执行,这就是非允许IP能正常访问/ip路径的原因。
修改后的配置
将allow/deny规则移到return指令之前,让Nginx先完成IP校验再返回内容:
server { listen 80; server_name snippets--v2.dev.x.mydomain.com; allow 220.123.123.123; deny all; location /ip { allow 220.123.123.123; deny all; return 200 '{"code":"0", "type": "success", "ip": "${remote_addr}"}'; } }
补充说明
你在server块已经配置了全局的allow/deny规则,如果/ip路径的访问控制需求和全局一致,完全可以去掉location块内的重复规则,让配置更简洁:
server { listen 80; server_name snippets--v2.dev.x.mydomain.com; allow 220.123.123.123; deny all; location /ip { return 200 '{"code":"0", "type": "success", "ip": "${remote_addr}"}'; } }
内容的提问来源于stack exchange,提问作者丶 Limeー来夢 丶
相关产品推荐
相关产品推荐

