问题:
- 经过n个 Nginx 代理, Server 端如何拿到 Client 端的真实IP?
- 经过n个 Nginx 代理, Client 端如何拿到 Server 端真实IP(一般这种需求只限于内网)?
解决方法:
问题1: 这个问题比较简单,只需要在经过的 代理 配置 nginx.conf 的location下加入:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
加了之后在header内会有 X-Forwarded-for 第一个IP就是客户端IP。
问题2:客户端获取服务端真实IP是比较麻烦的,或者说方法都是比较笨的。
方法1:直接在服务端AOP加Header, 但是如果要全公司的服务都加的话就会比较麻烦,入侵了应用;
方法2:Nginx location配置内加Lua脚本,添加header,切点为 header_filter_by_lua
单个Nginx Lua:
header_filter_by_lua '
ngx.header.kss_upstream_add = ngx.var.upstream_addr
';
ngx.var.upstream_addr是upstream配置的地址。
如果是多级Nginx 需要对ngx.header.kss_upstream_add判空,为空才赋值,肯定是最内层Nginx 先执行。
如果大家有更好欢迎分享。
网友评论