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

相关推荐
末日汐8 分钟前
linux线程
linux·运维
玉梅小洋25 分钟前
CentOS :yum源配置及验证指南
linux·运维·centos·yum
zxsz_com_cn25 分钟前
设备预测性维护算法核心功能有哪些?六大模块拆解智能运维的“技术骨架”
运维·算法
自可乐28 分钟前
n8n全面学习教程:从入门到精通的自动化工作流引擎实践指南
运维·人工智能·学习·自动化
枷锁—sha33 分钟前
【SRC】越权漏洞检测
运维·服务器·网络·安全·网络安全·系统安全
UP_Continue1 小时前
Linux--进程控制
linux·运维·服务器
等什么君!1 小时前
docker -数据卷技术
运维·docker·容器
小白跃升坊3 小时前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
杨江4 小时前
seafile docker安装说明
运维
好好沉淀4 小时前
Docker开发笔记(详解)
运维·docker·容器