AWS上で動かしていたMastodonインスタンスを、このブログと同じAzure上にお引っ越ししている話をスライドにまとめました。
Azure Front Doorを使ってSSL/TLS通信をさせる
Front Door経由で配信したいドメイン(FQDN)に対してCNAMEを設定し、ドメインの所有権を確認させられば、Azureが提供する無償のSSL証明書を使うことができる。
最近は一般サイトも常にSSL通信させることが普通になってきているので、HTTPでのリクエストもHTTPSにリダイレクトさせる設定をFront Doorに設定する。
① HTTPで受信したら、HTTPSにリダイレクトする
② HTTPSで受信しても、App Serviceのホスト名でアクセスされていたら、公開用のドメイン名に変えてリダイレクトする
③ HTTPSで公開用のドメイン名でアクセスされたら、バックエンドのApp Serviceにリクエストを転送(Forward)して結果を返す
リダイレクトがうまくいっているかの確認方法
- ブラウザでアクセスしてみる
- ChromeやFirefoxなどのブラウザ内蔵のデベロップメントツールでHTTPリクエストがHTTPSにリダイレクトされていることを見る
- curl -v http://…とコマンド実行して、Locationヘッダでリダイレクトされていることを確認する
Azure Database for MySQLを作成する
インスタンスの作成は、https://docs.microsoft.com/ja-jp/azure/mysql/quickstart-create-mysql-server-database-using-azure-portal に記載されているとおり。
DBが起動後、Wordpress用にDBユーザを分ける場合は以下のようにして分けておく。
CREATE USER wordpress IDENTIFIED BY ‘password’;
CREATE DATABASE wordpressdb;
GRANT ALL PRIVILEGES ON wordpressdb.* TO wordpress;
FLUSH PRIVILEGES;
Azure App ServiceでPHP 7.3を起動する
サービスの作成とランタイムの選択はウィザードに従うとできると思うので割愛。
作成後、https://wordpress.org/download/ からZIPファイルをダウンロードして、FTPS経由でwwwroot配下にファイルをアップロードする。
Azure Database for MySQLに接続するための設定
Azure Database for MySQLはデフォルトでSSLがオンになっているため、wp-config.phpに以下の設定をしておく。
define(‘MYSQL_CLIENT_FLAGS’, MYSQLI_CLIENT_SSL);
Azure Front Door配下に入れるための設定
また、Azure Front DoorなどのCDNやリバースプロキシ配下にするとWordpressの実ホスト名と異なることから、特にSSLをオンにするとリダイレクトループが発生してしまうので、リバプロが付与するX-Forwarded-Forヘッダを読み取るようにwp-config.phpに以下のコードも入れておく。
$_SERVER[‘HTTP_HOST’] = $_SERVER[‘HTTP_X_FORWARDED_HOST’];
$_SERVER[‘REMOTE_ADDR’] = $_SERVER[‘HTTP_X_FORWARDED_FOR’];
define(‘FORCE_SSL_ADMIN’, true);
if (isset($_SERVER[‘HTTP_X_FORWARDED_PROTO’])
&& $_SERVER[‘HTTP_X_FORWARDED_PROTO’] === “https”) {
$_SERVER[‘HTTPS’] = ‘on’;
}