在 Nginx 的反向代理设置(一) 中,我们演示了一个如何通过 Nginx 的代理功能代理内网中运行的业务服务。 本文我们将进一步解决在业务服务器中获取用户真实IP的问题。
修改 default.conf 文件
要让代理后的后端服务获取客户的真实IP, 我们需要改变 Nginx 中代理的设置,利用 Nginx 内置的变量和 proxy_set_header 命令,将客户真实 IP 设置到 HTTP 的 header 中去, 如下:
1 | proxy_redirect off; |
修改后完整的 default.conf 文件如下:
1 | server { |
修改后端服务
为获取在 HTTP header 中的客户端信息,我们需要修改对应的业务服务器代码,增加从 HttpServeltRequest 中获取 header 的功能:
1 | StringBuffer buf = new StringBuffer(); |
以上代码只是简单的获取相关信息并存储在 StringBuffer 中。
修改后完整的 Java 代码如下:
1 | package cn.com.hohistar.study.servlet; |
再依次构建 war 包, docker 镜像, 最后使用修改在 Nginx 的反向代理设置(一) 中使用的 docker-compose.yml 文件,将 app1 的镜像文件 image 该为: hello-servlet:1.0, 然后再运行
1 | docker-compose up -d |
既可以打开浏览器查看结果了。
修改后完整的 docker-compose.yml 文件如下:
1 | version: '2' |