之前一直没注意,突然发现博客数据库中所有远程ip都是127.0.0.1
emmm..总感觉这个问题和referer传递有点像

问题原因

正如前文所说的那样,由于反向代理,客户端并不会直接访问应用服务器,而是由nginx将用户的请求转发给应用服务器,对于应用服务器来说,此时请求的地址就是nginx的地址(即本机:127.0.0.1)

解决方案

和之前一样,通过将远程ip设置到转发的请求中即可

配置nginx

location / {
  #配置反向代理,应用服务器服务路径
  proxy_pass http://127.0.0.1:9000;
  #前文设置的referer
  proxy_set_header Referer $http_referer;
  #设置请求头host
  proxy_set_header Host $http_host;
  #设置真实的客户端ip
  proxy_set_header X-Real-IP $remote_addr;
  #请求链,每次的转发ip都被记录在此处
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  #客户端的访问协议(https、http)
  proxy_set_header X-Forwarded-Proto $scheme;
  #客户端请求大小限制
  client_max_body_size 100m;
}

这样就能获取远程客户端ip了

Q.E.D.


此 生 无 悔 恋 真 白 ,来 世 愿 入 樱 花 庄 。