HoRain云--如何给Nginx配置访问IP白名单

  

HoRain 云小助手个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

一、通过 allow/deny 指令配置(HTTP 层)

1. 编辑 Nginx 配置文件

2. 规则优先级说明

3. 重载配置生效

二、通过 geo 模块动态管理(高级)

1. 在 http 块定义 IP 白名单组

2. 外部文件 /etc/nginx/whitelist.conf

三、白名单验证方法

1. 使用 curl 测试

2. 查看访问日志

四、常见问题排查

1. 白名单 IP 仍被拒绝

2. 配置未生效

五、安全增强建议


 


一、通过 allow/deny 指令配置(HTTP 层)

适用场景:精确控制特定路径或全局的 IP 访问权限。

1. 编辑 Nginx 配置文件

找到对应的 serverlocation 块,添加规则:

server {
    listen 80;
    server_name example.com;

    # 全局白名单配置
    allow 192.168.1.100;    # 允许单个 IP
    allow 203.0.113.0/24;   # 允许 CIDR 网段
    deny all;               # 拒绝其他所有 IP

    location /admin {
        # 路径级白名单(覆盖全局配置)
        allow 10.0.0.5;
        deny all;
    }

    # 其他配置...
}
2. 规则优先级说明
  • 顺序敏感:规则按从上到下顺序执行,建议先 allowdeny
  • 继承关系location 块内的规则会覆盖外层 server 块的配置。
3. 重载配置生效
sudo nginx -t        # 检查语法
sudo nginx -s reload # 平滑重载

二、通过 geo 模块动态管理(高级)

适用场景:需要集中管理大量 IP 或动态更新白名单。

1. 在 http 块定义 IP 白名单组
http {
    geo $whitelist {
        default 0;
        192.168.1.100 1;
        203.0.113.0/24 1;
        # 可引入外部文件
        include /etc/nginx/whitelist.conf;
    }

    server {
        listen 80;
        server_name example.com;

        if ($whitelist = 0) {
            return 403; # 拒绝非白名单 IP
        }

        # 其他配置...
    }
}
2. 外部文件 /etc/nginx/whitelist.conf
# 每行一个 IP 或网段
10.0.0.5 1;
172.16.0.0/16 1;

三、白名单验证方法

1. 使用 curl 测试
# 模拟非白名单 IP(使用代理或修改请求头)
curl -H "X-Forwarded-For: 1.2.3.4" http://example.com
# 预期返回 403 Forbidden

# 模拟白名单 IP
curl -H "X-Forwarded-For: 192.168.1.100" http://example.com
# 预期正常访问
2. 查看访问日志
tail -f /var/log/nginx/access.log
# 观察客户端 IP 是否被正确识别

四、常见问题排查

1. 白名单 IP 仍被拒绝
  • 检查客户端真实 IP:如果 Nginx 前方有代理(如 CDN、负载均衡器),需配置 set_real_ip_fromreal_ip_header
    set_real_ip_from 代理服务器IP;
    real_ip_header X-Forwarded-For;
    
2. 配置未生效
  • 确认配置块作用域(http/server/location)。
  • 检查 Nginx 错误日志:
    tail -f /var/log/nginx/error.log
    

五、安全增强建议

  1. 结合防火墙:在操作系统层加固(如 iptables/ufw)。
    sudo ufw allow from 192.168.1.100 to any port 80
    
  2. 动态白名单:通过 Lua 脚本或第三方模块(如 ngx_http_geoip2_module)实现动态 IP 验证。

 

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!

如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!

Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!

你可能感兴趣的:(nginx,tcp/ip,运维)