使用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记录
这样啊,学习了
感谢分享。
感谢感谢