如何爲 wordpress 添加 ELB 並啓用 https

1、架構

如何爲 wordpress 添加 ELB 並啓用 https

咱們有的時候會遇到這樣的狀況,咱們的 wordpress 的服務器是提供 http 服務的,咱們如今須要在前面添加一個負載均衡,配置用戶和負載均衡之間使用 https 協議,負載均衡到 apache 之間使用 http 協議php

2、問題

2.一、遇到的問題

若是咱們這樣設置的話,會致使一些頁面不正常,由於 css 文件還有 js 文件會被瀏覽器攔截,這是由於瀏覽器爲了安全,會攔截 https 頁面中的一些 http 連接。css

如何爲 wordpress 添加 ELB 並啓用 https

https://developers.google.com/web/fundamentals/security/prevent-mixed-content/fixing-mixed-contentnginx

2.二、形成緣由的原理

據我所瞭解,當 wordpress 會根據用戶的請求,返回的文檔中包含不一樣的連接:web

  • 若是用戶使用 http 訪問 wordpress,wordpress 返回的文檔中的連接,協議都是 http 的,
  • 若是用戶使用 https 訪問 wordpress,wordpress 返回的文檔中的連接,協議都是 https 的。

咱們目前遇到的狀況就是,ELB 使用 http 訪問 wordpress,因此 wordpress 返回給 ELB 的連接是 http 的,而後返回給瀏覽器這些連接,瀏覽器就使用 http 向 ELB,這就致使了上面的問題。apache

3、解決

咱們須要添加一些配置,告訴 wordpress,當用戶使用 http 請求的時候,給它返回 https 協議的連接。瀏覽器

3.一、修改 apache 配置文件

修改成以下,添加 http 到 https 的重定向。安全

<VirtualHost *:80>
...
SetEnvIf x-forwarded-proto https HTTPS=on

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}
...

3.二、對於 nginx 配置文件

修改成以下,添加 http 到 https 的重定向。bash

server {
        if ($http_x_forwarded_proto != "https") {
            rewrite  ^/(.*)$  https://$host/$1 permanent;
        }
}

3.二、修改 wordpress 配置文件

修改文件wp-config.php,在最後新增以下內容服務器

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
    $_SERVER['HTTPS']='on';

這段很重要,他告訴 wordpress 用戶使用的 https,請返回的連接協議使用 https,避免返回 http 連接而被瀏覽器 blocked 掉。架構

https://community.bitnami.com/t/aws-load-balencer-is-configured-for-https-but-app-receives-http-requests/51228/12

相關文章
相關標籤/搜索