nginx下反向代码 apache 下的 wordpress启用证书后的数据流大体如下:

因为wordpress在接管到申请后会进行:以后申请信息是否与数据库中设置的以后网站地址相一致。从而导致在进行数据转发时因为在nginx层面产生了https与http的转换,进而导致了301的问题。对应下面的数据流,对应的流程如下:

如果把wordpress中的网站地址变更为:http://www.codedemo.club,则因为在判断协定的时候http与http雷同,则不会产生301的谬误。但因为wordpress外部发送动态资源地址时,地址上退出了网站前缀,比方发送的CSS地址为:http://www.codedemo.club/sytle.css,而非/sytle.css。这将触发一个浏览器的一个爱护机制 ---- 浏览器阻止:在一个https的页面上调用http申请。

吐个槽:话说学校某教学相干的零碎正是因为在https页面上加载了http插件,从而导致一些EXCEL的导出无奈失常工作了。

解决方案

联合上文形容以及在因为定制端口导致的301重定向问题
一文中的剖析,得出以下论断:若要防止wordpress的301问题,则必须保障转发给wordpress的是雷同的。

又因为雷同的三要素是:协定、域名、端口号。所以最终的论断是:若要防止wordpress的301问题,则必须保障转发给wordpress的协定、域名、端口号都是雷同的。

nginx+apache全面启用https

在apache中启用https,nginx在进行转发时将数据按apache的证书进行加密后,传给apache服务:

以上便保障了拜访wordpress时协定也是https的。

这个计划最大的问题在于须要别离对nginx、apache配置证书。nginx在进行数据转发时,进行了数据的解密与加密,apache又从新对数据进行了一次解密。从效率上来讲必定是最低的,当然也是最不值得举荐的计划。

批改wordpress源码

另一种计划是在nginx将以后协定通过header转发。wordpress判断转发的header信息中协定是否为https。如果为https则重置零碎变量,从而让wordpress误认为以后的http申请为https申请:
修改文件为:wp-config.php

define( 'WP_DEBUG', false );                          + if ( $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' )+ {                           +    $_SERVER['HTTPS']       = 'on';+    $_SERVER['SERVER_PORT'] = 443;+ }

本计划须要对wordpress源码进行批改,尽管解决了问题,但仍有待欠缺。