1. Uryy

    Posted

    Uryy
Changes in title
+[AWS]ALB +ACM + EC2でWordPressをSSL化した際の勘所
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,62 @@
+####■概要
+AWS上に構築したWordPress環境をSSL化しました。
+構成は下記となりALBで終端してALBから先はHTTP通信となります。
+ALBのリダイレクト機能とx-forwarded-protoを利用して構築したので
+WordPressサーバの.htaccessにリダイレクト設定を入れる必要がありません。
+また、ACMを利用したのでSSL証明書費用を抑えることができました。
+
+![Untitled Diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207381/36b3181c-c2df-6a06-6333-6ad1ed93d3ee.png)
+
+通信プロトコルのシーケンス図は下記です。
+ユーザからのアクセスがHTTPでもHTTPSのいずれでもALBとEC2間はHTTP通信となり
+ユーザへの応答はHTTPSに統一されます。
+
+![FireShot Capture 009 - js-sequence-diagrams by bramp - bramp.github.io.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207381/34a0b0af-1678-33b1-41be-5e839dc05e2e.png)
+
+####■環境
+・WordPress:5.3.x
+・MW:apache httpd2.4,php7.x
+・OS:Amazon Linux 2
+
+####■やったこと
+AWSリソースの作成・環境構築、WordPressのインストールは割愛しています。
+以下、実施内容となります。
+
+・ALBのリスナー設定
+①HTTP用のターゲットグループを作成します。
+<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207381/99497501-86df-fdd7-dff2-fc8f1ebca8d9.png">
+
+②HTTPのリスナーを作成し、HTTPSへのリダイレクト設定を入れます。
+ リダイレクト設定の詳細は下記を参考にしました。
+ 参考:[[新機能]Webサーバでの実装不要!ALBだけでリダイレクト出来るようになりました!](https://dev.classmethod.jp/cloud/aws/alb-redirects/)
+
+<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207381/8ae5de91-87e2-a496-11e6-416a5e68a234.png">
+
+
+③HTTPSのリスナーを作成し、転送先のターゲットグループをHTTPにします。
+<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207381/61ba9e03-b7c4-afad-2d6b-b0aa02a626e2.png">
+
+④HTTPとHTTPSのリスナー設定がある状態です。
+<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207381/518fbf2b-77f9-27aa-4cf2-19c8f138d038.png">
+
+・EC2
+ALBの設定だけだとWebアクセス時にcssが崩れており
+確認するとHTTPで読み込んでいました。
+参考:[ELB + SSL + WordPressについて](https://norm-nois.com/blog/archives/3869)
+サーバがHTTPSで認識できるようリクエストヘッダー:[x-forwarded-proto](https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/x-forwarded-headers.html#x-forwarded-proto)を利用して、ユーザがALBの接続に使用したプロトコル (HTTP または HTTPS) を識別して、HTTPSの場合はPHPの環境変数にHTTPSを設定するよう記述しました。
+
+```bash:wp-config.php
+if($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
+ $_SERVER['HTTPS'] = 'on';
+ $_ENV['HTTPS'] = 'on';
+}
+```
+
+これで、cssが崩れることなくWordPressのSSL化が実現できました。
+
+参考記事
+https://qiita.com/snoguchi/items/f5ccb67592f87942480d
+
+
+
+以上。