咱們有的時候會遇到這樣的狀況,咱們的 wordpress 的服務器是提供 http 服務的,咱們如今須要在前面添加一個負載均衡,配置用戶和負載均衡之間使用 https 協議,負載均衡到 apache 之間使用 http 協議php
若是咱們這樣設置的話,會致使一些頁面不正常,由於 css 文件還有 js 文件會被瀏覽器攔截,這是由於瀏覽器爲了安全,會攔截 https 頁面中的一些 http 連接。css
https://developers.google.com/web/fundamentals/security/prevent-mixed-content/fixing-mixed-contentnginx
據我所瞭解,當 wordpress 會根據用戶的請求,返回的文檔中包含不一樣的連接:web
咱們目前遇到的狀況就是,ELB 使用 http 訪問 wordpress,因此 wordpress 返回給 ELB 的連接是 http 的,而後返回給瀏覽器這些連接,瀏覽器就使用 http 向 ELB,這就致使了上面的問題。apache
咱們須要添加一些配置,告訴 wordpress,當用戶使用 http 請求的時候,給它返回 https 協議的連接。瀏覽器
修改成以下,添加 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} ...
修改成以下,添加 http 到 https 的重定向。bash
server { if ($http_x_forwarded_proto != "https") { rewrite ^/(.*)$ https://$host/$1 permanent; } }
修改文件wp-config.php
,在最後新增以下內容服務器
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS']='on';
這段很重要,他告訴 wordpress 用戶使用的 https,請返回的連接協議使用 https,避免返回 http 連接而被瀏覽器 blocked 掉。架構