使用https,$_SERVER['HTTPS']却不等于on?
目前有两台服务器,都是http和https协议共存。
但是部分程序遇到一些问题,因为PHP中有根据$_SERVER['HTTPS']来设置环境常量。
一台服务器可以拿到值为on,另外一台却是NULL。
一步步排查后才知道,这是个fastcgi配置的问题!
解决方法的办法就是Nginx配置加上:
fastcgi_paramHTTPS$httpsif_not_empty;
完整配置如下:
location~.*\.(php|php5)?$ { try_files$uri=404; fastcgi_passunix:/tmp/php-cgi.sock; fastcgi_paramHTTPS$httpsif_not_empty; fastcgi_indexindex.php; includefastcgi_params; }
很多人认为使用
fastcgi_paramHTTPSon;
这样是没错啦,不过强迫使用这个参数,不太有效哦!
最好的答案就(参考下面nginx官方的链接)
fastcgi_paramHTTPS$httpsif_not_empty;
有https协议时才自动使用httpson,否则忽略这个参数。
- $https:如果链接是SSL就返回ON,否则返回空字符串。
- if_not_empty:当参数有值时才传递到服务器
注意:这个 if_not_empty 额外参数只适合Nginx1.1.11之后的版本
参考地址:
- Nginx:普通的HTTP请求被发送到HTTPS端口
- FastCGIapplicationbehindNGINXisunabletodetectthatHTTPSsecureconnectionisused