您的位置:

如何正确使用nginx-real-ip?

一、nginx-real-ip是什么?

nginx-real-ip是nginx的一个模块,可以在反向代理服务器和后端服务器之间传递客户端真实的IP地址,从而方便服务器做进一步的操作。

在默认情况下,当使用nginx等反向代理服务器时,服务器会认为请求来自于代理服务器IP地址,而不是客户端的IP地址。这样,当处理日志、检查黑名单等功能时,就会出现问题。因此,使用nginx-real-ip就可以进行客户端真实IP地址的获取。

二、如何安装nginx-real-ip模块?

在安装nginx之前,需要确保已经安装了pcre-devel和openssl-devel,否则将无法成功安装。

# 下载nginx-real-ip模块
wget https://github.com/flant/nginx-http-rdns/archive/v0.4.3.tar.gz

# 解压
tar zxvf v0.4.3.tar.gz

# 下载nginx
wget https://nginx.org/download/nginx-1.18.0.tar.gz

# 解压并进入目录
tar zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0

# 配置nginx,并添加nginx-real-ip模块
./configure --with-http_ssl_module --add-dynamic-module=../nginx-http-rdns-0.4.3

# 编译并安装
make && make install

三、如何配置nginx-real-ip模块?

在nginx的配置文件中,需要添加如下代码:

http {
    # ...
    real_ip_header X-Real-IP;
    set_real_ip_from 172.0.0.0/8;
    # ...
}

其中:

real_ip_header:设置要获取客户端真实IP地址的HTTP头

set_real_ip_from:设置代理服务器IP地址

四、如何测试nginx-real-ip模块?

可以通过访问含有real-ip的测试页面进行测试。首先,需要在nginx的配置文件中添加如下代码:

server {
    listen 80;
    server_name test.com;
 
    location / {
        add_header X-Real-IP $remote_addr;
        return 200 'Hello World!';
    }
}

然后,可以使用curl命令测试:

curl -H "Host: test.com" -H "X-Forwarded-For: 1.2.3.4" http://127.0.0.1/
Hello World!

通过上面的测试,可以从返回的内容中看到real-ip获取到了客户端的真实IP地址。

五、nginx-real-ip的其他用途

除了获取客户端真实IP地址外,nginx-real-ip还可以用于:

防CC攻击:可以根据客户端IP地址进行限制或封锁,从而保护网站的安全。

防黑名单:可以根据IP地址对黑名单进行识别和处理,从而过滤出坏人。

多网卡环境下的IP获取:可以解决多网卡环境下客户端IP获取的问题。

六、总结

nginx-real-ip是nginx模块中非常实用的一个模块,可以简单地解决反向代理服务器和后端服务器之间客户端IP地址获取的问题。同时,还可以应用于防CC攻击、防黑名单等网站安全方面的操作。