返回

用NGINX实现真实IP限制,不再为假IP头疼!

后端

NGINX:根据真实 IP 地址进行访问限制

什么是真实 IP 限制?

在互联网世界中,用户经常使用代理服务器来访问网站,这可以保护他们的隐私,隐藏他们的真实 IP 地址。然而,对于网站管理员来说,这可能会造成一些麻烦,因为它会 затрудняет识别用户的真实 IP 地址,从而限制访问或进行安全审计。

使用 NGINX 实现真实 IP 限制

为了解决这个问题,我们可以利用 NGINX 中的 real_ip_header 指令,指定 NGINX 用于获取真实 IP 的请求头。例如,我们可以将 real_ip_header 设置为 X-Forwarded-For,这样 NGINX 就会使用 X-Forwarded-For 请求头获取用户的真实 IP 地址。

代码示例:

real_ip_header X-Forwarded-For;

设置 real_ip_header 指令后,我们可以使用 deny 指令根据用户的真实 IP 地址进行访问限制。例如,我们可以使用以下配置来阻止所有来自 192.168.14.* 的用户访问网站:

代码示例:

deny 192.168.14.*;

F5 代理下的真实 IP 限制

如果在 NGINX 之前存在 F5 代理,我们还需要特殊处理才能让 deny 指令生效。这是因为 F5 代理会修改 X-Forwarded-For 请求头,将自己的 IP 地址添加到请求头中。这样一来,NGINX 就会使用 F5 代理的 IP 地址进行限制,而不是用户的真实 IP 地址。

为了解决这个问题,我们可以使用 F5 代理的 insert_xforwarded_for 指令,将用户的真实 IP 地址添加到 X-Forwarded-For 请求头中。这样一来,NGINX 就能正确获取用户的真实 IP 地址并根据用户的真实 IP 地址进行限制。

代码示例:

insert_xforwarded_for on;

使用 rewrite 和 map 模块实现 IP 限制

除了使用 deny 指令进行 IP 限制之外,我们还可以使用 rewritemap 模块来实现 IP 限制。rewrite 模块用于重写请求的 URL,而 map 模块用于将一个值映射到另一个值。

例如,我们可以使用以下配置将所有来自 192.168.14.* 的用户重定向到一个错误页面:

代码示例:

map $http_x_forwarded_for $blocked {
    192.168.14.* 1;
}

server {
    listen 80;
    server_name example.com;

    location / {
        rewrite ^/(.*)$ /error.html if $blocked;
        proxy_pass http://backend;
    }

    location /error.html {
        root /var/www/html;
    }
}

结论

通过以上方法,我们可以根据用户的真实 IP 地址在 NGINX 中实现访问限制,即使在存在 F5 代理的情况下,也能让 deny 指令生效。这可以帮助我们更好地控制网站的访问,提高网站的安全性。

常见问题解答

1. 我如何检查用户的真实 IP 地址?

您可以使用 real_ip_header 指令指定 NGINX 用于获取真实 IP 的请求头。

2. 如何阻止来自特定 IP 范围的用户访问我的网站?

您可以使用 deny 指令根据用户的真实 IP 地址进行访问限制。

3. 我如何使用 F5 代理实现真实 IP 限制?

您需要使用 F5 代理的 insert_xforwarded_for 指令将用户的真实 IP 地址添加到 X-Forwarded-For 请求头中。

4. 我可以使用哪些模块来实现 IP 限制?

您可以使用 denyrewritemap 模块来实现 IP 限制。

5. 如何将用户重定向到一个错误页面?

您可以使用 rewrite 模块将用户重定向到一个错误页面。