Nginx+php 架构下解决不输出 $_SERVER['HTTPS'] 问题
使用$_SERVER['HTTPS']来判断是http还是https,但在Nginx+PHP-FPM架构下,
nginx使用fastcgi_pass指令将请求传递给PHP-FPM,但是在使用fastcgi_pass时,Nginx默认不会将HTTPS传递给PHP-FPM。
如果你使用的是Apache,它就会自动设置HTTPS服务器变量,PHP代码可以通过$ _SERVER ['HTTPS']检查以确定请求是HTTPS还是HTTP。
那现在就需要需改nginx配置或者PHP程序来解决问题。
基于服务器的兼容性考虑,还是修改nginx配置。
因为很多CMS程序(WordPress,Drupal,...)都是使用$ _SERVER ['HTTPS']来确定请求是HTTPS还是HTTP。
修改方法如下:
方法1:增加 一个fastcgi_param 环境变量即可。
fastcgi_param HTTPS 'on';
将上述代码添加至网站对应的Nginx配置文件中。
但要注意,按我理解,这样也会导致一个问题。因为这种方式属于写死环境变量,在此环境变量生效的区域,
服务器无法判断是http请求还是https请求。如果你的站点两种请求都支持,
建议把两种请求的配置分开写,
类似与人工预设请求的类型。我的网站决定已经只支持https,
所以这种方式问题不大,http的请求也设置了跳转至https。所以我只需要是写在虚拟机配置文件中即可。
方法2:修改web程序的判断方式
不要只根据环境变量来判断,增加一个请求的端口的判断条件。
我们一般HTTP请求都使用80端口,而HTTPS则使用443端口。按照这个思路,可以将上诉文件中的代码改为如下所示。