📜  nginx 设置标头 x-real-ip (1)

📅  最后修改于: 2023-12-03 15:17:52.506000             🧑  作者: Mango

Nginx 设置标头 x-real-ip

在使用 Nginx 作为反向代理时,当客户端通过代理服务器访问后端服务器时,后端服务器会获取代理服务器的 IP 地址而不是实际客户端的 IP 地址,这会导致一些问题,例如无法统计客户端的访问量或者限制某些 IP 地址的访问。

为了解决这些问题,可以在 Nginx 上设置标头 x-real-ip,将客户端真实的 IP 地址传递给后端服务器。

如何设置 x-real-ip

这里提供三种设置 x-real-ip 的方法。

1. 设置 Nginx 配置文件

在 Nginx 的配置文件中添加以下配置:

location / {
    proxy_pass http://backend_server;
    proxy_set_header X-Real-IP $remote_addr;
}

这里的 $remote_addr 是 Nginx 获取到的客户端 IP 地址,将其添加到 X-Real-IP 标头中传递给后端服务器。

2. 修改 PHP 配置文件

如果你的后端服务器是 PHP,可以在 PHP 的配置文件中添加以下配置:

$realIp = $_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR'];

这里使用了 PHP 7 的空合并运算符 ??,如果 X-Real-IP 标头不存在,则使用 REMOTE_ADDR。

3. 使用 Nginx 模块

Nginx 提供了 ngx_http_realip_module 模块,可以直接使用该模块获取客户端的真实 IP 地址并添加到 X-Real-IP 标头,具体做法如下:

load_module modules/ngx_http_realip_module.so;

http {
    real_ip_header X-Forwarded-For;
    set_real_ip_from 172.16.0.0/12;
}

这里的 X-Forwarded-For 是在传递请求的过程中经过的所有代理服务器的 IP 地址,set_real_ip_from 制定了可靠的前置代理的 IP 段,只有在这些 IP 段中的前置代理的 IP 地址才是可信的,才会将其设为客户端真实的 IP。

总结

Nginx 设置标头 X-Real-IP,可以解决客户端真实 IP 地址被代理服务器取代的问题,提高了数据统计和安全性。我们可以通过修改 Nginx 配置文件、PHP 配置文件或使用 Nginx 模块来实现设置 X-Real-IP 标头,根据具体情况选择合适的方法即可。