Openresty配置Nginx并在ELB后获取用户真实IP
Openresty安装及介绍
openresty中文站:link
配置nginx环境变量:
以默认安装路径/usr/local/openresty/nginx/为例
export PATH=$PATH:/usr/local/openresty/nginx/sbin
测试是否配置成功:
[root@xxx ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/openresty/nginx/sbin
- 1
- 2
以及
[root@xxx ~]# nginx -V
nginx version: openresty/1.13.6.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.0 --add-module=../echo-nginx-module-0.61 --add-module=../xss-nginx-module-0.06 --add-module=../ngx_coolkit-0.2rc3 --add-module=../set-misc-nginx-module-0.32 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.08 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10.13 --add-module=../ngx_lua_upstream-0.07 --add-module=../headers-more-nginx-module-0.33 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 --add-module=../redis2-nginx-module-0.15 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.15 --add-module=../rds-csv-nginx-module-0.09 --add-module=../ngx_stream_lua-0.0.5 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib --with-stream --with-stream_ssl_module --with-http_ssl_module
- 1
- 2
- 3
- 4
- 5
- 6
configure argument中介绍了openresty的安装配置参数
配置ELB
大多数ELB默认开启了真实用户ip传递功能,其中,七层默认开启,四层(TCP)需要安装TOA插件。
注意,在ELB配置监听器时,需要使用HTTP 80端口或者HTTPS 443端口,如果配置的是TCP 80端口的监听器,如果不安装TOA插件,后端是无法拿到用户真实的client ip的。
安装http_realip_module
关闭nginx:
nginx -s stop
查看是否关闭:
ps -ef|grep nginx
安装http_realip_module插件
cd 到 openresty安装包目录
./configure --with-http_realip_module
gmake
gmake install
查看插件是否安装成功:
nginx -V
如果看到末尾有 --with-http_realip_module,说明插件安装成功。
在Nginx.conf中配置获取用户真实ip
server { listen 80; listen 8080; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; content_by_lua_block { local uri = ngx.var.uri --ngx.say("var uri :"..uri) local host = ngx.var.host -- take the real client ip from ELB local proxy_ip_list = ngx.var.proxy_add_x_forwarded_for if proxy_ip_list then local clientipEnd = string.find(proxy_ip_list, ',', 1) if clientipEnd then client_ip = string.sub(proxy_ip_list, 0, clientipEnd - 1) end end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
其中,ngx.var.proxy_add_x_forwarded_for中存储的是链式结构的访问ip信息
ip1, ip2, ip3
其中ip1是访问用户的真实ip,而后续ip2, ip3均为负载均衡器ip。
通过lua代码,可以拿到真实的client_ip。
文章来源: zclhit.blog.csdn.net,作者:zclhit_,版权归原作者所有,如需转载,请联系作者。
原文链接:zclhit.blog.csdn.net/article/details/82878257
- 点赞
- 收藏
- 关注作者
评论(0)