一、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攻击、防黑名单等网站安全方面的操作。