如果项目部署在云服务负载均衡下,会导致无法获取正确的客户端IP地址
解决方案
参考文档https://learnku.com/docs/laravel/8.x/requests/9369#453bc9
修改 App\Http\Middleware\TrustProxies 中间件 信任所有代理#
如果你使用 Amazon AWS 或其他的「云」的负载均衡服务,你可能不知道负载均衡器的实际 IP 地址。在这种情况下,你可以使用 * 来信任所有代理:
/**
* 此应用的信任代理
*
* @var string|array
*/
protected $proxies = '*';
上述配置还可以解决,telescope和horizon在SLB下通过https访问无法正确加载样式和js问题
获取IP其它解决方案
参考https://help.aliyun.com/document_detail/54007.html?spm=a2c4g.11186623.6.933.5b203253t8UrIO
背景信息
七层负载均衡(HTTP/HTTPS协议)服务需要对应用服务器进行配置,然后使用X-Forwarded-For
的方式获取客户端的真实IP地址。真实的客户端IP存放在HTTP头部的X-Forwarded-For字段,格式如下:
X-Forwarded-For: 用户真实IP, 代理服务器1-IP, 代理服务器2-IP,...
当使用此方式获取客户端真实IP时,获取的第一个地址就是客户端真实IP。
配置Nginx服务器
- 执行如下命令,安装http_realip_module。
wget http://nginx.org/download/nginx-1.0.12.tar.gz tar zxvf nginx-1.0.12.tar.gz cd nginx-1.0.12 ./configure --user=www --group=www --prefix=/alidata/server/nginx --with-http_stub_status_module --without-http-cache --with-http_ssl_module --with-http_realip_module make make install kill -USR2 `cat /alidata/server/nginx/logs/nginx.pid` kill -QUIT `cat /alidata/server/nginx/logs/ nginx.pid.oldbin`
- 执行如下命令,打开nginx.conf文件。
vi /alidata/server/nginx/conf/nginx.conf
- 在以下配置信息后添加新的配置字段和信息。
fastcgi connect_timeout 300; fastcgi send_timeout 300; fastcgi read_timeout 300; fastcgi buffer_size 64k; fastcgi buffers 4 64k; fastcgi busy_buffers_size 128k; fastcgi temp_file_write_size 128k;
需要添加的配置字段和信息为:set_real_ip_from IP_address; real_ip_header X-Forwarded-For;
说明 如果您要获取代理服务器的地址,可以将代理服务器的网段添加到set_real_ip_from <IP_address>
,如负载均衡的IP地址段100.64.0.0/10(100.64.0.0/10 是阿里云保留地址,其他用户无法分配到该网段内,不会存在安全风险)和高防IP地址段。多个IP地址段用逗号分隔。 - 执行如下命令,重启Nginx。
/alidata/server/nginx/sbin/nginx -s reload
然后获取请求头
//原生
$_SERVER['X-Forwarded-For'];
//laravel
$request->header('X-Forwarded-For');
HTTP监听访问正常但是HTTPS监听访问网址不加载样式
https://help.aliyun.com/document_detail/178368.htm?spm=a2c4g.11186623.2.17.116f7503fHVPRT