项目场景:
为公司的服务器加了一层Nginx反向代理之后,Yii::$app->request->userIP无法得到真实的客户IP。
问题描述:
Yii::$app->request->userIP无法得到客户真实IP这种情况下,会造成一下微信支付失败、日志追踪错误的问题。对于维护系统有很大的麻烦。
而自己看到Yii::$app->request->userIP得到的是代理服务器的ip,还以为在代理服务器的Nginx上面的并没有把客户的真实ip进行转发。
检查Nginx配置之后发现 X-Real-IP 和 X-Forwarded-For 已经配置成功。
location /{
proxy_pass $remoteHostIp;
proxy_http_version 1.1;
proxy_connect_timeout 10s;
proxy_read_timeout 300s;
proxy_send_timeout 600s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host "www.test.com";
}
然后再去做了一个临时页面,把$_SERVER变量打印出来。
于是,直接阅读 yii\web\Request 的代码,其中关于headers有这样的一个方法
public function getHeaders()
{
if ($this->_headers === null) {
$this->_headers = new HeaderColl