Openresty配置Nginx并在ELB后获取用户真实IP

举报
ChillRay 发表于 2020/12/29 22:35:22 2020/12/29
【摘要】 Openresty安装及介绍 openresty中文站:link 配置nginx环境变量: 以默认安装路径/usr/local/openresty/nginx/为例 export PATH=$PATH:/usr/local/openresty/nginx/sbin 测试是否配置成功: [root@xxx ~]# echo $PATH /usr/local/sbin:...

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。