网站加了CDN之后
网站的访问模式变为:
用户浏览器 → CDN节点 → 网站源服务器
那么针对CDN模式下的访问的Nginx的配置就应该这样写:
location ~ / { proxy_http_version 1.1; proxy_set_header Connection "keep-alive"; proxy_set_header X-Real-IP $remote_addr; if (!-e $request_filename) { proxy_pass http://127.0.0.1:9599; } if (!-f $request_filename) { proxy_pass http://127.0.0.1:9599; } proxy_redirect off; proxy_set_header http $scheme; proxy_set_header referer $http_referer; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header X-Forwarded-For $remote_addr:$remote_port; proxy_set_header Upgrade $http_upgrade; # 升级协议头 proxy_set_header Connection upgrade; }
这样就可以在EasySwoole中获取到用户的真实IP
public function getRealIp(){
// 真实IP
$ip = '';
if (count($this->request()->getHeader('x-real-ip'))) {
if(!empty($this->request()->getHeader('x-forwarded-for')[0])){
$ip = explode(',',$this->request()->getHeader('x-forwarded-for')[0])[0];
}
$ip = $ip??$this->request()->getHeader('x-real-ip')[0];
} else {
$params = $this->request()->getServerParams();
foreach (['http_client_ip', 'http_x_forward_for', 'x_real_ip', 'remote_addr'] as $key) {
if (isset($params[$key]) && !strcasecmp($params[$key], 'unknown')) {
$ip = $params[$key];
break;
}
}
}
return $ip;
}
本文为够意思原创文章,转载无需和我联系,但请注明来自够意思博客blog.go1s.cn:够意思博客 » Nginx在CDN加速之后,获取用户真实IP