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

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

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

# 允许指定 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 访问:

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 接口),网站其他部分正常开放:

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),其他文件正常访问:

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(禁止访问),若想自定义提示页面,可添加:
    error_page 403 /403.html;  # 403 时跳转自定义页面
    location = /403.html {
        root html;  # 自定义页面放在 nginx 的 html 目录
    }
    
  4. 配置生效:修改后必须重载 Nginx:
    /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 测试:

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

总结

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

teayear

亲,感觉不错,打赏杯咖啡哦^^

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值