PHP-FPM + Nginx 架构下解决SSL不输出 $_SERVER['HTTPS'] 问题

背景: 最近在搭建Discuz X,因为考虑支持HTTPS,所以按照经验来部署证书,服务器用的是阿里云的云服务,选择了LNMP。但是chrome一直都提示不安全,还提示此网页正试图从未经验证的来源加载脚本 。这说明我页面上加载的资源不纯粹是https的,有部分是http的或者有些资源不支持https却用了https。打开浏览器控制台找到提示的源,发现基本都是功能组件加载的时候是以http加载的。
在搜索学习之后,才定位到问题所在,例如在source/class/discuz/discuz_application.php文件中

$_G['isHTTPS'] = ($_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;

使用$_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配置或者discuz程序来解决问题。基于服务器的兼容性考虑,还是修改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端口。按照这个思路,可以将上诉文件中的代码改为如下所示。

$_G['isHTTPS'] = ($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;

方法3:你要把代理程序改成Apache我也是没办法啊。

后记:记得检查其他引用资料是否为https 比如模板中备案号查询地址等处。有问题欢迎留言讨论!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • 1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单...
    rosekissyou阅读 10,209评论 5 124
  • CGI 通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接...
    没我找不到电子书阅读 1,926评论 1 4
  • 这篇是Nginx安装配置PHP(FastCGI)环境的教程。Nginx不支持对外部程序的直接调用或者解析,所有的外...
    SkTj阅读 3,094评论 2 20
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 2,000评论 0 9
  • 1、每晚睡前一杯牛奶 2、每星期敷2次面膜,睡前记得擦护肤品 3、每天记得吃维生素 4、防晒 5、抹口红,气色好 ...
    boboboboBo妞儿阅读 184评论 0 0