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
Nginx获取用户真实IP的更多相关文章
- CDN下nginx获取用户真实IP地址
随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户 ...
- 通过Nginx获取用户真实IP
nginx配置 location / { proxy_set_header Host $host; proxy_set_header X-real-ip $remote_addr; proxy_set ...
- 在有nginx做反向代理时候,如何获取用户真实Ip信息
在获取用户的Ip地址时,不一定可以获取到用户真实的地址信息,这要看代理服务器的类型,代理服务器有普通匿名代理服务器,高匿代理服务器,像这种情况很难获取到用户真实的Ip地址 假如用户没有使用匿名代理服务 ...
- nginx反向代理获取用户真实ip
nginx做反向代理时,默认的配置后端获取到的ip都是来自于nginx,如何转发用户的真实ip到后端程序呢?如是是java后端,用request.getRemoteAddr();获取到的是nginx的 ...
- 多层代理获取用户真实IP
1. 几个概念remote_addr:如果中间没有代理,这个就是客户端的真实IP,如果有代理,这就是上层代理的IP.X-Forwarded-For:一个HTTP扩展头,格式为 X-Forwarded- ...
- 获取用户真实IP:(模拟:客户端--F5--nginx--tomcat 后端获取用户真实IP)
模拟:客户端--F5--nginx--tomcat 后端获取用户真实IP 192.168.109.137 :nginx01(充当第一层代理==F5)192.168.109.138 :nginx02(二 ...
- 如何根据HttpServletRequets获取用户真实IP地址
最近的一个项目的某个功能获取用户的ip地址,添加用户的系统使用记录. 我发现当我直接使用getRemoteAddr()方法从HttpServletRequet中获取用户的ip时,获取到的是服务器的ip ...
- nginx使用用户真实IP做hash(解决经过CND后ip_hash失效问题)
在nginx中常用的有以下四种负载均衡的算法,分别是:round-robin.ip-hash.least-connected和weighted.当然在实际生产中或许使用最多的就是ip-hash了,一般 ...
- PHP获取用户真实 IP , 淘宝IP接口获得ip地理位置(转)
<?php /** * 获取用户真实 IP */ function getIP() { static $realip; if (isset($_SERVER)){ if (isset($_SER ...
- java 获取用户真实ip
/** * 获取用户真实ip * @param request * @return */ public static String getIpAddr(HttpServletRequest reque ...
随机推荐
- 1778D Flexible String Revisit
1778D Flexible String Revisit 目录 1778D Flexible String Revisit 题目大意: 做法: dp 注意 code 题目大意: 给你两个长度均为\( ...
- 干货|工作中要使用Git,看这篇文章就够了
本文将从 Git 入门到进阶.由浅入深,从常用命令.分支管理.提交规范.vim 基本操作.进阶命令.冲突预防.冲突处理等多方面展开,足以轻松应对工作中遇到的各种疑难杂症,如果觉得有所帮助,还望看官高抬 ...
- Kubernetes(K8S) kubesphere 安装
安装KubeSphere最好的方法就是参考官方文档,而且官方文档是中文的. 官网地址:https://kubesphere.com.cn/ https://github.com/kubesphere/ ...
- Centos7.x 安装 nmon性能监控工具
一.简介 nmon 工具可以帮助在一个屏幕上显示所有重要的性能优化信息,并动态地对其进行更新.这个高效的工具可以工作于任何哑屏幕.telnet 会话.甚至拨号线路.另外,它并不会消耗大量的 CPU 周 ...
- Sementic Kernel 案例之网梯科技在线教育
2023年4月25日,微软公布了2023年第一季度财报,营收528亿美元, 微软CEO纳德称,「世界上最先进的AI模型与世界上最通用的用户界面--自然语言--相结合,开创了一个新的计算时代.」该公司有 ...
- JavaWeb之day02css与js
目录: 1.CSS概述和与HTML的结合方式(四种)(*******) 2.CSS的基本选择器(******) 3.CSS的扩展选择器(了解) 4.CSS的盒子模型(了解) 5.CSS的布局(浮动)( ...
- Javascript 常见的循环方式总结
本文地址: https://www.cnblogs.com/zichliang/p/17412968.html 在Javascript中有很多种循环方式.有多种循环方式可以用来遍历数组.对象.以及执行 ...
- 数据科学工具 Jupyter Notebook 教程(一)
ipython notebook 是一个基于浏览器的 python 数据分析工具,使用起来非常方便,具有极强的交互方式和富文本的展示效果.jupyter 是它的升级版,它的安装也非常方便,一般 Ana ...
- 入门 Python GUI 开发的第一个坑
由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 使用 Anaconda 3(conda 4.5.11)的 tkinter python 包(c ...
- STL-stack(ACM)
1.没有.clear()操作,需要手动pop() 重构函数(默认) stack<int> a; 基础操作 a.push() // 入栈 a.pop() // 弹出栈顶元素 a.empty( ...