NGINX白名单的几种方法实现

 更新时间:2026年08月29日 10:15:57   作者:xixingzhe2  
本文主要介绍了NGINX白名单的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1、需求

网关:172.16.0.48 反向代理到 Nginx:172.16.0.32 Nginx 只允许来源是网关 172.16.0.48 访问,拒绝所有其它 IP

关键点:经过代理转发,Nginx 拿到的源 IP,默认不是真实客户端,而是网关 172.16.0.48,直接用 allow/deny 就可以实现。 注意区分两种场景:①四层转发(TCP 代理);②七层 HTTP 代理。

2、处理方案

方案一:Nginx ngx_http_access_module(七层 HTTP,最常用)

场景:网关是 HTTP 反向代理,把 http 请求转发给 172.16.0.32 的 Nginx。编辑 nginx server/location 块:

server {
    listen 80;
    server_name _;

    # 只放行网关,其余全部拒绝
    allow 172.16.0.48;
    deny all;

    location / {
        root html;
        index index.html;
    }
}

⚠️重要前提:网关是直接 http 代理访问 nginx,没有做 X‑Forwarded‑For 篡改访问控制;此时 nginx 看到的 remote_addr 就是172.16.0.48。 不要拿 $http_x_forwarded_for 做访问控制!这个 header 客户端可以伪造,不安全。

验证配置 & 重载

nginx -t
nginx -s reload

多 IP 白名单配置

原理:allow 可以写多条,从上到下匹配,最后 deny all; 拒绝其余所有 IP。 依然记住:allow/deny 匹配的是 $remote_addr(TCP 真实连接源 IP),不要用 X‑Forwarded‑For 做权限校验

直接写多条 allow(写在 server /location 块内)

server {
    listen 80;
    server_name _;

    # 白名单IP列表
    allow 172.16.0.48;
    allow 172.16.0.49;
    allow 172.16.0.50;
    # 也支持网段
    allow 192.168.1.0/24;

    deny all; # 不在上面白名单全部拒绝403

    location / {
        root html;
        index index.html;
    }
}

方案二:防火墙层面(系统 iptables/firewalld,网络层,更彻底)

直接在 Nginx 服务器172.16.0.32操作系统防火墙限制,不管 Nginx 配置,网络层面只允许172.16.0.48访问 80/443,其它 IP 全部 drop。

# 删除80、443公开放行
firewall-cmd --permanent --remove-service=http
firewall-cmd --permanent --remove-service=https

# 仅允许网关访问80、443
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="172.16.0.48/32" port protocol="tcp" port="80" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="172.16.0.48/32" port protocol="tcp" port="443" accept'

firewall-cmd --reload
  • 优点:就算 Nginx 配置被篡改,外部 IP 依然无法访问服务;
  • 缺点:操作系统层面,需要服务器权限。

方案三:Nginx stream 模块(网关是四层 TCP 代理,stream 块)

如果网关是四层 TCP 转发,Nginx 用stream处理 tcp 流量,ngx_stream_access_module做 IP 限制:

stream {
    server {
        listen 80;
        allow 172.16.0.48;
        deny all;
        proxy_pass backend;
    }
}

3、坑点提醒

  • ❌ 错误:拿 $http_x_forwarded_for 做 allow 判断。 X‑Forwarded‑For 是 HTTP 头,外网用户可以随便伪造,不能用来做访问控制;$remote_addr才是 TCP 真实连接来源 IP。
  • 如果网关做的是 SNAT,Nginx 看到源永远网关 IP,allow 172.16.0.48;deny all直接生效。
  • 如果网络中间还有其他设备(负载均衡、交换机)做源 NAT,那 remote_addr 就不是网关,访问控制会失效,需要排查网络链路。

调试如何看 Nginx 拿到的真实 TCP 源 IP

在 nginx 日志格式加上$remote_addr,看日志确认连接来源 IP:

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;

执行 tail -f /var/log/nginx/access.log,确认请求过来时remote_addr172.16.0.48

到此这篇关于NGINX白名单的几种方法实现的文章就介绍到这了,更多相关NGINX白名单内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nginx中的两个模块的proxy_pass的区别解析

    nginx中的两个模块的proxy_pass的区别解析

    在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。本文给大家介绍nginx中的两个模块的proxy_pass的区别,感兴趣的朋友一起看看吧
    2021-11-11
  • Nginx服务优化配置方案

    Nginx服务优化配置方案

    这篇文章主要介绍了Nginx服务优化配置方案,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-03-03
  • Nginx报错“invalid server name or wildcard”的原因和解决方案

    Nginx报错“invalid server name or wildcard”

    很多人第一次给网站配置HTTPS时,会遇到一个看似奇怪的报错:
    invalid server name or wildcard,
    明明就是想用通配符匹配多个子域,结果保存不成功,本文就来一步步讲清楚,帮你从根本上解决这个问题,需要的朋友可以参考下
    2025-10-10
  • nginx中的日志切割详解

    nginx中的日志切割详解

    Nginx日志切割是定期将访问日志和错误日志分割成多个文件,以优化性能、便于管理和分析,常见的实现方法包括使用logrotate工具和编写自定义脚本,解决常见的问题如Nginx不再写入新日志和权限问题,需要确保正确的信号发送和权限设置
    2025-11-11
  • Centos7安装、卸载nginx及配置,配置成系统服务方式(一步到位)

    Centos7安装、卸载nginx及配置,配置成系统服务方式(一步到位)

    这篇文章主要介绍了Centos7安装、卸载nginx及配置,配置成系统服务方式(一步到位),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • nginx 内置变量详解及隔离进行简单的拦截

    nginx 内置变量详解及隔离进行简单的拦截

    这篇文章主要介绍了nginx 隔离进行简单的拦截详解的相关资料,这里对nginx内置变量进行了简单的介绍并对隔离拦截进行了详解, 需要的朋友可以参考下
    2016-12-12
  • Nginx启用GZIP压缩网页传输方法(推荐)

    Nginx启用GZIP压缩网页传输方法(推荐)

    Gzip压缩我很早已经就启用了,不过从未与大家分享过。今天小编给大家分享Nginx启用GZIP压缩网页传输方法,需要的朋友参考下吧
    2017-01-01
  • 一文详解Nginx中location的使用方法

    一文详解Nginx中location的使用方法

    本篇博客介绍了nginx的核心配置模块中的location部分的详解,包括location的语法规则(=  ^~  ~  ~*  不带符号  \)的功能、用法以及详细的示例,通过本篇博客可以加深对location的使用的理解,需要的朋友可以参考下
    2026-04-04
  • 使用referer指令配置Nginx服务器来防止图片盗链

    使用referer指令配置Nginx服务器来防止图片盗链

    这篇文章主要介绍了使用referer指令配置Nginx服务器来防止图片盗链的方法,文中也简单介绍了referer指令的一些语法和常用参数,需要的朋友可以参考下
    2015-12-12
  • Nginx访问慢问题解决办法(慢1s)

    Nginx访问慢问题解决办法(慢1s)

    这篇文章主要给大家介绍了关于Nginx访问慢问题解决办法的相关资料,访问速度对网站是极为关键的因素,而服务器对其影响最为深远,需要的朋友可以参考下
    2023-08-08

最新评论