遇到的问题:
最近重新安装了nginx+php,目前http和https都支持,编写代码判断是否是https请求:
php
function IsHttpsRequest() {
if (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {
return TRUE;
} elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https') {
return TRUE;
} elseif (!empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') {
return TRUE;
}
return FALSE;
}
一般判断 $_SERVER['HTTPS'] 值就可以了,调试代码的时候发现没有这个值。
解决方法:
网上找到的解决办法记录下。
需要在nginx配置文件中加入:
fastcgi_param HTTPS $https if_not_empty;
刚开始看到 fastcgi_param 的时候,感觉优点眼熟,后来发现nginx和php请求相关的默认配置有包含文件:
location ~ \.php$ {
...
include fastcig.conf;
...
}
文件 fastcig.conf 中定义了很多 fastcgi_param ,可以把 fastcgi_param HTTPS $https if_not_empty; 添加到文件 fastcig.conf 中,刷新nginx配置,再调试php代码就能读取到 $_SERVER['HTTPS']