阿里云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_module或http_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


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


或者


修改完之后重启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

你可能感兴趣的:(阿里云SLB后NGINX、TOMCAT获取真实IP)