运维工程师技术教程之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 即可。

相关推荐
倔强的石头10610 分钟前
云原生环境下的存储弹性与自动化:表空间目录动态挂载与冷热分层实践
运维·云原生·自动化
Tim风声(网络工程师)8 小时前
光功率计中的红光(光衰测试设备)的使用
运维·网络
ar01238 小时前
AR电路巡检:让电力运维进入智能可视化时代
运维·人工智能·ar
星辰徐哥8 小时前
C语言网络编程:TCP、UDP、HTTP深度解析
c语言·网络·tcp/ip
2301_780789669 小时前
云服务器数据会泄露吗?怎么保护云服务器的数据
运维·服务器·tcp/ip·网络安全
念越9 小时前
从网络基础到Socket编程:TCP/UDP原理 + Java实战详解
java·网络·tcp/ip·udp
2301_780789669 小时前
云服务器被黑能恢复吗?云服务器被黑的解决办法
运维·服务器·网络·安全·web安全
淘小白_TXB219610 小时前
头条百家采集改写发布软件用户使用手册
运维·服务器·头条采集·头条号采集·文章采集·头条采集软件
渣渣灰958711 小时前
解决VMware上终端窗口太小问题
运维·服务器·经验分享
Tim风声(网络工程师)12 小时前
QoS (服务质量)和TE(流量工程)的区别
运维·网络