0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

mixed-contentの対処

Posted at

はじめに

WordPressサイトをHTTPS化するときに、ページ内の画像だけHTTPで参照されてしまい、ブラウザのコンソールに「Mixed Content: The page at '...' was loaded over HTTPS, but requested an insecure resource '...'」と表示される現象が起こります。本記事では、WordPress側とCloudFront(CDN)側の設定によってMixed Contentを解消し、画像を正常に表示させる方法を解説します。

環境

  • WordPress
  • AWS EC2 + CloudFront

問題

  1. SSL証明書は正常に適用され、URLはhttps://example.comとしてHTTPSでアクセス可能
  2. 投稿や固定ページのHTMLソースでは画像URLがhttp://のまま生成される
  3. ブラウザのDeveloper Consoleに以下のようなエラーが表示され、画像が読み込まれない
    Mixed Content: The page at 'https://example.com' was loaded over HTTPS, but requested an insecure resource 'http://example.com/image/foo.jpg'. This request has been blocked; the content must be served over HTTPS.
    

原因

  • WordPressの設定(WP_HOME/WP_SITEURLなど)がHTTPのままか、内部的に$_SERVER['HTTPS']を認識できずHTTPSを強制できていない
  • CloudFront経由でのリクエスト時にHostヘッダーやプロトコル情報がオリジン(WordPress)に伝わらず、WPがHTTPとして扱っている

対策

1. wp-config.php でHTTPS強制設定

WordPressが実際にHTTPSでアクセスされていることを認識できるよう、以下を wp-config.php に追加します。

$_SERVER['HTTPS'] = 'on';
// 管理画面もHTTPSに強制
define('FORCE_SSL_ADMIN', true);

// サイトURLをHTTPSに固定
define('WP_HOME', 'https://example.com');
define('WP_SITEURL', 'https://example.com');
  • HTTP_X_FORWARDED_PROTO はCloudFrontやALBなどのリバースプロキシから送信されるプロトコル情報を拾うためのヘッダーです。
  • これにより、WordPress内部でHTTPSを認識し、投稿URLやメディアURLもhttps://となります。

2. CloudFrontの設定確認

CloudFrontで配信するとき、オリジンリクエストポリシーでプロトコルヘッダーを渡す設定を行います。

  1. Behaviors で該当ビヘイビアを選択
  2. Origin request policyAllViewer もしくはカスタムで Header: X-Forwarded-Proto を含めるポリシーを選択
  3. Viewer protocol policyRedirect HTTP to HTTPS もしくは HTTPS Only に設定

これにより、CloudFront→WordPressへプロトコル情報が正しく伝わり、WordPressがHTTPSリクエストとして処理します。

3. キャッシュの無効化

設定変更後はCloudFrontキャッシュが残っていると反映されないため、Invalidationを実行します。

1.該当ディストリビューションを選択
2.キャッシュの削除を選択
3.削除したいパスを入力し、実行

まとめ

  • WordPress側では $_SERVER['HTTPS']='on'FORCE_SSL_ADMINWP_HOME/WP_SITEURL をHTTPS化
  • CloudFront側では X-Forwarded-Proto をオリジンへ転送し、HTTPS Onlyへリダイレクト
  • キャッシュをInvalidationして設定を即時反映

これらを組み合わせることで、Mixed Contentエラーを解消し、画像を含むすべてのコンテンツをHTTPSで安全に配信できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?