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

相关推荐
EMTime8 小时前
Docker运行OpenWRT
运维·docker·容器
lolo大魔王8 小时前
Linux 文件系统超全面详解(原理、结构、挂载、分区、inode、日志、管理命令)
linux·运维·服务器
zyl8372111 小时前
Docker 使用手册
运维·docker·容器
古月方枘Fry11 小时前
MGRE实验
运维·服务器
stolentime12 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
bush413 小时前
嵌入式linux学习记录四
linux·运维·学习
lihao lihao14 小时前
软硬链接
linux·运维·服务器
TOWE technology14 小时前
智能安防监控系统如何做好防雷?——视频信号SPD综合应用方案解析
运维·服务器·防雷产品·信号保护·信号防雷·spd
楼田莉子14 小时前
Docker学习:Docker介绍及其架构介绍
运维·后端·学习·docker·容器·架构
大明者省15 小时前
IIS 端口绑定正常访问的原理说明与常见误区澄清
运维·服务器·笔记