如果服务器使用了负载均衡或CDN后造成获取客户端IP为内网IP以及生成URL链接不正确时可按以下方式修改配置。
问题1:获取客户端IP为内网IP
因为在ThinkPHP5框架中获取客户端IP是通过REMOTE_ADDR参数来获取的,如果此时我们使用了负载均衡或CDN后会造成客户端IP为负载均衡或CDN服务器的IP地址,此时我们可以咨询我们使用的云服务商或参考云服务商提供的相关文档,获取负载均衡或CDN传递真实IP的参数名,然后修改application/config.php中的http_agent_ip值即可。
问题2:生成的URL链接不正确(协议不正确)
因为ThinkPHP5框架中使用url函数生成URL路径时,优先使用HTTPS/REQUEST_SCHEME/SERVER_PORT/HTTP_X_FORWARDED_PROTO来判断是否是SSL请求,从而生成URL地址。
如果服务器使用了负载均衡或CDN后,由于服务器无法获取到这几个参数判断,从而导致生成URL地址错误,主要表现在生成的URL地址本应该是https://开头,但却生成了http://开头。
解决办法分两种:
一种是需要修改application/config.php,添加一个is_https的参数,值设定为true即可,这种解决方案会导致不管是否是SSL请求,都会强制生成https://开头的URL。
另一种就是添加转发参数,通常情况下负载均衡或CDN都会有转发或回源参数的配置,添加以下转发(回源)参数,让服务器识别到SSL请求即可。
| 参数名 | 参数值 |
|---|---|
| HTTP_X_FORWARDED_PROTO | https |
问题3:生成的URL链接不正确(域名不正确/端口号丢失)
因为ThinkPHP5框架中使用url函数生成URL路径时,优先使用HTTP_X_REAL_HOST/HTTP_HOST来生成URL地址。
如果服务器使用了负载均衡或CDN后,由于服务器无法获取到这几个参数判断,从而导致生成URL地址错误
解决办法:
添加转发参数,通常情况下负载均衡或CDN都会有转发或回源参数的配置,添加以下转发(回源)参数,让服务器识别到正确请求即可。
| 参数名 | 参数值 |
|---|---|
| HTTP_X_REAL_HOST | 你的站点域名 |















这一切,似未曾拥有