侧边栏壁纸
博主头像
STONE

行动起来,活在当下

  • 累计撰写 70 篇文章
  • 累计创建 67 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

【转载】解决nginx反向代理apache服务下的wordpress启用证书后发生301循环重定向

STONE
2024-05-02 / 0 评论 / 0 点赞 / 29 阅读 / 0 字
温馨提示:
本文最后更新于2024-06-19,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

【转载】解决nginx反向代理apache服务下的wordpress启用证书后发生301循环重定向

nginx下反向代码 apache 下的 wordpress启用证书后的数据流大体如下:
image.png
由于wordpress在接收到请求后会进行:当前请求信息是否与数据库中设置的当前网站地址相一致。从而导致在进行数据转发时由于在nginx层面发生了https与http的转换,进而导致了301的问题。对应上面的数据流,对应的流程如下:
image.png

如果把wordpress中的网站地址变更为:http://www.codedemo.club,则由于在判断协议的时候http与http相同,则不会发生301的错误。但由于wordpress内部发送静态资源地址时,地址上加入了网站前缀,比如发送的CSS地址为:http://www.codedemo.club/sytle.css,而非/sytle.css。这将触发一个浏览器的一个保护机制 ---- 浏览器阻止:在一个https的页面上调用http请求。

解决方案


结合上文描述以及在由于定制端口导致的301重定向问题
一文中的分析,得出以下结论:若要避免wordpress的301问题,则必须保证转发给wordpress的是相同的。

又由于相同的三要素是:协议、域名、端口号。所以最终的结论是:若要避免wordpress的301问题,则必须保证转发给wordpress的协议、域名、端口号都是相同的。

nginx+apache全面启用https

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

以上便保证了访问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源码进行修改,虽然解决了问题,但仍有待完善。

0

评论区