必须在location块内配置allow/deny all实现白名单,位置限定为location/server/limit_except块,顺序为先多条allow放行指定ip或网段、再deny all兜底,漏掉deny all则白名单失效。

直接在对应 location 块里写 allow + deny all,就能实现后台管理接口仅限内网访问。关键不是加多少规则,而是位置对、顺序对、网段对。
必须写在 location 块内部
不能放在 http 或 server 顶层,也不能塞进 if 语句里——Nginx 的 allow/deny 只在 http、server、location 和 limit_except 块中生效,且 if 块里写完全无效。
- 正确做法:为管理路径单独定义
location,比如location /admin { ... }或location ^~ /manage/ { ... } - 避免误伤:不放在
server块里,否则静态资源、健康检查等路径也会被限制 - 常见错误:把规则写在
upstream或配置文件最外层,实际不生效
按标准 CIDR 格式写内网网段
内网常用地址段有四类,需用精确 CIDR 表达,不能写错掩码或漏掉 IPv6(如有需要):
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
-
allow 127.0.0.0/8;—— 本机回环 -
allow 10.0.0.0/8;—— A 类私有网段 -
allow 172.16.0.0/12;—— B 类私有网段(覆盖 172.16–31.x.x) -
allow 192.168.0.0/16;—— C 类私有网段 - IPv6 示例:
allow 2001:db8::/32;(如环境启用 IPv6)
顺序必须是 allow 在前、deny all 在最后
Nginx 规则自上而下匹配,命中即停。白名单逻辑依赖“先放行、再兜底”,漏掉 deny all 就等于没设防:
- 每条
allow独占一行,支持多个网段并列 -
deny all;必须是该location中最后一条访问控制指令 - 后面不能再跟其他
allow或deny,否则会被忽略 - 可选加
error_page 403 /403.html;提升拒绝提示的友好度
代理环境下要修正真实 IP
如果前端有 SLB、CDN 或 Nginx 自身做反向代理,$remote_addr 默认是上一跳代理地址,不是用户真实 IP。此时需配合:
-
set_real_ip_from声明可信代理 IP 段(如set_real_ip_from 10.0.0.0/8;) -
real_ip_header X-Forwarded-For;或X-Real-IP(取决于上游传递头) - 确保
ngx_http_realip_module已启用(默认内置) - 验证方式:临时加
add_header X-Real-IP $remote_addr;查看响应头是否为真实内网 IP










