ZBLOG

nginx根据X-Forwarded-For字段获取到客户端地址为127.0.0.1,如何把这样的请求拒绝

在 Nginx 中,可以使用 map 指令结合 if 语句来根据 X-Forwarded-For 请求头的值拒绝请求。下面是一个示例配置,展示了如何实现这个功能:

http {
    # 定义一个变量,用于检测 X-Forwarded-For 是否包含 127.0.0.1
    map $http_x_forwarded_for $blocked_ip {
        default         0;       # 默认值,不阻止
        "~*127\.0\.0\.1" 1;      # 如果 X-Forwarded-For 包含 127.0.0.1,则设为 1
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
            # 如果 blocked_ip 为真(即为 1),则返回403错误
            if ($blocked_ip) {
                return 403; # 拒绝访问
            }

            proxy_pass http://your_backend_server; # 替换为你的后端服务器地址
            
            # 设置 X-Forwarded-For 字段
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

配置解释

  1. map 指令

    • 创建一个名为 $blocked_ip 的变量,根据请求中的 X-Forwarded-For 值进行判断。
    • 使用正则表达式 "~*127\.0\.0\.1" 来匹配任何包含 127.0.0.1 的情况。如果匹配成功,变量设置为 1
  2. location 块

    • 在处理请求时,如果 $blocked_ip 的值为真(即等于 1),通过 if ($blocked_ip) 来触发相应的逻辑。
    • 如果满足条件,则返回 HTTP 状态码 403 Forbidden,拒绝该请求。
  3. proxy_pass 和 header 设置

    • 将请求转发到后端服务器,并设置合适的 X-Forwarded-For 请求头,以便可以保留原始客户端 IP 地址信息。

注意事项

  • 确保你的 Nginx 配置文件中已经启用相关模块并且没有语法错误。
  • 请测试配置在生产环境之前是否按照预期工作,确保不会误拦截合法流量。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21206

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?