Http 请求经过 Nginx IP 透传问题

问题:

  1. 经过n个 Nginx 代理, Server 端如何拿到 Client 端的真实IP?
  2. 经过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 先执行。

如果大家有更好欢迎分享。

你可能感兴趣的:(Http 请求经过 Nginx IP 透传问题)