Nginx获取用户真实IP

Nginx获取用户真实IP地址

本人在一次项目中,使用Nginx需要获取到用户IP,本来可以很常规的获取的,可现实往往不常规,项目是前后端分离的,部署时,前端使用了Nginx进行了代理并转发,后端也使用了Nginx进行了负载均衡和代理,分别部署在两台机器上,使用的不是同一个Nginx,所以此处当用户的请求过来时,先是通过前端Nginx转发到后端Nginx,后端Nginx再转发到具体的服务上,当时使用常规手法获取IP,结果获取到的是前端部署的机器IP。

在此本人通过了Nginx的realip模块进行了获取,特此来记录一下。

使用Nginx自带模块realip模块获取IP地址

首先来看看配置文件,此处只展示主要部分

http {
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
access_log off;
error_log off;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#负载均衡配置
upstream serverCluster{
server 127.0.0.1:82 weight=1;
server 192.168.0.80:81 weight=1;
}
server {
listen 80; #监听的端口
server_name yunque.natapp1.cc;
#配置负载均衡
location /{
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://serverCluster;
set_real_ip_from 192.168.1.0/254;
real_ip_header X-Real-IP;
real_ip_recursive on;
expires 3d;
}
}
}

set_real_ip_from  127.0.0.1; #这一网段过来的请求全部使用X-Real-IP里的头信息作为remote_addr
real_ip_header X-Real-IP;#从哪个header头检索出所要的IP地址
real_ip_recursive on; #开启

接下来就是测试配置是否正确

# 在Nginx安装目录下输入一下命令
./sbin/nginx -tc conf/nginx.conf

如果报一下错:

说第66行是未知的命令,表示当前Nginx没有相关realip模块,所以缺少该模块相关命令

下载realip模块并进行配置

 找到Nginx解压的目录,在该目录下输入以下命令

# 下载http_realip_module模块
./configure --prefix=/usr/local/nginx-1.4.1 --with-http_realip_module --原来有的模块(如果有的话)
# 查看Nginx版本号 (/usr/local/nginx/是你Nginx服务器的实际位置)
/usr/local/nginx/sbin/nginx -V

查看configure arguments:后边有没有值,如果有,就复制下来。

 配置完成后,运行命令make命令

make
# 注意,此处不能mark install 否则就是覆盖安装

替换已安装好的Nginx包

 替换之前先备份:

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

先停止Nginx服务 

# 停止服务
./usr/local/nginx/sbin/nginx -s stop

将刚刚编译好的nginx覆盖掉原有的nginx 

# 在Nginx解压目录下使用以下命令
cp ./objs/nginx /usr/local/nginx/sbin/
# 通过查看版本命令收看是否下载SSL模块成功
/usr/local/nginx/sbin/nginx -V

启动服务即可,命令如下

./usr/local/nginx/sbin/nginx
posted @   阿尔法哲  阅读(2698)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示