#
ドキュメント

Document

自分のための備忘録です。

CloudFront と WordPress の連携

CloudFront の表示フロー

前提

カスタムドメイン オリジンドメイン ビヘイビア(パスパターン)
example.com origin.example.com /foo/* -> origin.example.com

表示の流れ

クライアント[^viewer]から https://example.com/foo/ をリクエストした際のフローはオリジンリクエストポリシーによって異なる。

  1. AllViewer:CloudFront からオリジンの HTTP リクエストの Host ヘッダーは example.com
  2. AllViewerExceptHostHeader:CloudFront からオリジンの HTTP リクエストの Host ヘッダーは origin.example.com

以下は例としてオリジンリクエストポリシーに AllViewerExceptHostHeader を指定した場合を記載する。
詳細はCloudFront Hostヘッダーを参照。

  1. クライアントから CloudFront に https://example.com/foo/ を発行する
  2. CloudFront は origin.example.com/foo/ にHTTP リクエストを発行する( Host ヘッダーは origin.example.com になる)
  3. CloudFront は 2. で取得したレスポンスをクライアントに返す

[^viewer]:CloudFront はクライアントをビューワーと呼ぶ。

オリジン

カスタムドメイン オリジン1 オリジン2
example.com origin1.example.com origin2.example.com

ビヘイビア

パス オリジン
https://example.com origin1.example.com
https://example.com/blog origin2.example.com

オリジン1( origin1.example.com )

WordPress インストールディレクトリ

/var/www/html/example.com

wp-config.php

# wp-config.php

define( 'WP_HOME', 'https://example.com' );
define( 'WP_SITEURL', 'https://example.com' );

SSL

certbot を使用して origin1.example.com の SSL を取得する。

Apache

<Directory "/var/www/html/example">
    AllowOverride All
    Options -Indexes +FollowSymLinks
    Order allow,deny
    Allow from all
    Require all granted
</Directory>
<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/example.com

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        ServerName origin1.example.com
        SSLCertificateFile /etc/letsencrypt/live/origin1.example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/origin1.example.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

オリジン2( origin2.example.com )

WordPress インストールディレクトリ

/var/www/html/example.com/blog

wp-config.php

# wp-config.php

define( 'WP_HOME', 'https://example.com/blog' );
define( 'WP_SITEURL', 'https://example.com/blog' );

SSL

certbot を使用して origin2.example.com の SSL を取得する。

Apache

<Directory "/var/www/html/example/dx">
    AllowOverride All
    Options -Indexes +FollowSymLinks
    Order allow,deny
    Allow from all
    Require all granted
</Directory>
<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/example.com

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # 以下 sudo certbot --apache で自動追記
        ServerName origin2.example.com
        SSLCertificateFile /etc/letsencrypt/live/origin2.example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/origin2.example.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>