背景
目前很多时候,部署一些服务或者工具,大多都采用docker部署,而为了更好的管理服务,我们会按照Nginx-Proxy-Manager(NPM)
一般情况下,都是没有问题的,一套Dockerfile,docker-compose.yml配置,然后 docker-compose up -d就完事了。但是如果在一些场景,我们可能需统计请求用户的ip地址。
我们一般可以使用remote_addr的请求头拿到客户的ip,但是如果请求经过了服务代理(比如我们服务器的ng代理,apache代理),我们可能拿到的就不是客户端的ip了,而是代理的ip。
代理服务器会将 X-Forwarded-For或者X-Real-Ip或者Proxy-Client-Ip 替换为代理服务器的ip(可能是服务器的局域网ip)
既然知道了问题,那么我们只需要把这些请求头改为真是的用户ip即可,比如用的nginx代理服务器,就可以添加如下配置
1 | proxy_set_header X-Real-IP $remote_addr; |
然后在代码中获取这个请求头即可
如 go代码
1 | func GetRemoteIp(r *http.Request) string { |
以上一般来说已经解决问题了,但是我用的是NPM(docker部署),可以用webUI管理,那我要如何在webUI中添加请求头呢
试错1:在Advanced内容中添加,但是下面提示这样是不会生效的
试错2:按照提示,加上了location,对接口添加 header,但是,这样是会覆盖原有的配置,会导致接口或者页面无法访问(404)
解决方法:我门可以添加Custom Location(配置和Details中一样),并且在下面添加标头,这样是不会覆盖的