阿里云SLB后NGINX、TOMCAT获取真实IP

先介绍两个nginx模块
a、proxy_module

当本机的Nginx处于一个反向代理的前端时将用户真实IP转发至后端

b、http_realip_module

当本机的nginx处于一个反向代理的后端时获取到真实的用户IP

注:默认proxy_module 是会安装的,但是http_realip_module则需要自己指定编译参数--with-http_realip_module才会安装
一、Nginx获取真实IP
由于Nginx位于SLB后面,所以需要SLB监听设置中开启真实IP地址转发

SLB开启真实IP转发

SLB转发设置完成后Nginx需要接收获取真实IP(两层Nginx的配置也适用),这是要用到http_realip_module模块的功能,设置方法如下:

set_real_ip_from   192.168.0.0/24;(Nginx前面的负载均衡的ip段)
set_real_ip_from   192.168.0.1;(Nginx前面的负责均衡的IP地址)
real_ip_header     X-Real-IP;(默认就好)

设置位置:http, server, location
这里如果前端只有一个Nginx或者SLB,可以不写ip段那行(实际情况中发现SLB到nginx的情况,即使不写这些设置Nginx日志也可以拿到用户的真实IP)
更多关于http_realip_module请参考:http_realip_modulehttp_realip_module
二、tomcat获取真实IP
这里需要Nginx向tomcat转发用户真实IP

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

这里其实有个很重要的点,如果Nginx的前端是四层负载的,如LVS,这里只能用$remote_addr获取真实IP,如果是七层负载,如Nginx,则可以用$http_x_forwarded_for来获取真实IP

# Forward the user's IP address to Rails
proxy_set_header X-Real-IP $remote_addr;
# needed for HTTPS
# proxy_set_header X_FORWARDED_PROTO https;

配置好之后怎么看tomcat是不是可以拿到真实ip呢?
可以修改tomcat的localhost_acess输出的日志格式来查看配置是否成功
修改方法:修改tomcat配置文件server.xml

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

这个标签就是设置日志相关的,将这里修改为

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%{X-Forwarded-For}i %h %l %u %t &quot;%r&quot; %s %b" />

或者

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%{X-Real-IP}i %h %l %u %t &quot;%r&quot; %s %b" />

修改完之后重启tomcat服务,然后tomcat的localhost_access日志中就会打印出两个IP,一个是客户的真实IP,一个是前端反向代理的NginxIP

115.238.*.* 192.168.*.* - - [30/Jan/2018:09:48:19 +0800] "GET /********* HTTP/1.0" 404 1023
115.238.*.* 192.168.*.* - - [30/Jan/2018:09:48:21 +0800] "GET /************** HTTP/1.0" 404 1023
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容