运维工程师技术教程之nginx ip访问机制

在 Nginx 中实现"仅允许 10.0.0.5、10.0.0.6、10.0.0.8 访问,其他 IP 禁止",核心用 allow(允许)和 deny(禁止)指令,支持 全局、虚拟主机(server 块)、特定路径(location 块) 三种粒度控制,按需选择即可:

一、核心配置语法(基础)

nginx 复制代码
# 允许指定 IP(多个 IP 分行写)
allow 10.0.0.5;
allow 10.0.0.6;
allow 10.0.0.8;
# 禁止所有其他 IP(必须放在最后,Nginx 按顺序匹配)
deny all;

二、三种常见使用场景(直接复制可用)

场景 1:禁止访问整个网站(server 块级别)

适合限制整个虚拟主机(如 web01.proxy.cn),仅允许 3 个 IP 访问:

nginx 复制代码
server {
    listen       80;
    server_name  web01.proxy.cn;
    root html;

    # 关键:IP 白名单配置(放在 server 块最前面)
    allow 10.0.0.5;
    allow 10.0.0.6;
    allow 10.0.0.8;
    deny all;  # 拒绝其他所有 IP

    location / {
        index  index.html index.htm index.php;
    }

    # 其他配置(如静态文件、PHP 转发等)...
}
场景 2:禁止访问特定路径(location 块级别)

适合仅限制某个目录/文件(如 /admin 后台、/api 接口),网站其他部分正常开放:

nginx 复制代码
server {
    listen       80;
    server_name  web01.proxy.cn;
    root html;

    location / {
        index  index.html index.htm index.php;
    }

    # 关键:仅限制 /admin 路径,仅允许 3 个 IP 访问
    location /admin/ {
        allow 10.0.0.5;
        allow 10.0.0.6;
        allow 10.0.0.8;
        deny all;

        # 若该路径是 PHP 项目,需保留原有转发配置
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # 其他配置...
}
场景 3:禁止访问特定文件(如单个接口文件)

适合仅限制某个文件(如 /api/data.php),其他文件正常访问:

nginx 复制代码
server {
    listen       80;
    server_name  web01.proxy.cn;
    root html;

    location / {
        index  index.html index.htm index.php;
    }

    # 关键:仅限制 /api/data.php 文件
    location = /api/data.php {
        allow 10.0.0.5;
        allow 10.0.0.6;
        allow 10.0.0.8;
        deny all;

        # PHP 转发配置(按需保留)
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # 其他配置...
}

三、关键注意事项(避免踩坑)

  1. 匹配顺序allow 必须放在 deny all 前面!Nginx 按配置顺序匹配,一旦匹配到 allow 就放行,否则执行最后 deny all

  2. IP 格式支持

    • 单个 IP:allow 10.0.0.5;(你要的场景);
    • 网段:allow 10.0.0.0/24;(允许 10.0.0.0-255 网段);
    • 子网掩码:allow 10.0.0.0/255.255.255.0;(和网段等价);
  3. 禁止后的响应 :默认返回 403 Forbidden(禁止访问),若想自定义提示页面,可添加:

    nginx 复制代码
    error_page 403 /403.html;  # 403 时跳转自定义页面
    location = /403.html {
        root html;  # 自定义页面放在 nginx 的 html 目录
    }
  4. 配置生效 :修改后必须重载 Nginx:

    bash 复制代码
    /usr/local/nginx/sbin/nginx -t  # 先检查语法是否正确
    /usr/local/nginx/sbin/nginx -s reload  # 重载配置

四、验证是否生效

用非白名单 IP(如 10.0.0.9)访问,会返回 403;用 10.0.0.5/6/8 访问,正常放行。也可通过 curl 测试:

bash 复制代码
# 用非白名单 IP 测试(假设服务器是 10.0.0.7)
curl -I http://10.0.0.7  # 应返回 403 Forbidden

总结

按你的需求,优先选择「场景 1(server 块级别)」,直接在目标虚拟主机中添加 allowdeny all,即可实现"仅 3 个 IP 访问,其他禁止"。如果只需限制部分路径/文件,选场景 2 或 3 即可。

相关推荐
XIAOHEZIcode1 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220702 天前
如何搭建本地yum源(上)
运维
ping某3 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工5 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智5 天前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest5 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化