使用https,$_SERVER[‘HTTPS’]却不等于on?
目前有两台服务器,都是http和https协议共存。
但是部分程序遇到一些问题,因为PHP中有根据$_SERVER['HTTPS']来设置环境常量。
一台服务器可以拿到值为on,另外一台却是NULL。
一步步排查后才知道,这是个 fastcgi 配置的问题!
解决方法的办法就是Nginx配置加上:
fastcgi_param HTTPS $https if_not_empty;
完整配置如下:
location ~ .*\.(php|php5)?$
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_index index.php;
include fastcgi_params;
}
很多人认为使用
fastcgi_param HTTPS on;
这样是没错啦,不过强迫使用这个参数,不太有效哦!
最好的答案就(参考下面 nginx 官方的链接)
fastcgi_param HTTPS $https if_not_empty;
有 https 协议时才自动使用 https on,否则忽略这个参数。
$https:如果链接是 SSL 就返回ON,否则返回空字符串。if_not_empty:当参数有值时才传递到服务器
注意:这个 if_not_empty 额外参数只适合 Nginx 1.1.11 之后的版本
参考地址:
- Nginx:普通的HTTP请求被发送到HTTPS端口
- FastCGI application behind NGINX is unable to detect that HTTPS secure connection is used
上一篇: git配置多个SSH Key
下一篇: git代码不变,删除所有commit记录
这样啊,学习了
感谢分享。
感谢感谢