【Azure Application Gateway】 パスベースで多言語対応サイトへのアクセスをルーティング

構成

下記のように、各言語サイトへのリクエストをパスベースで 3 台の Web サーバーへ適宜ルーティング。
通信はすべて HTTPS。

前提

  • 各言語のサイト用 Web サーバーが構築済みであること
  • 各言語のサイトは WordPress 製
言語バックエンドのドメイン名エンドユーザーにアクセスさせる想定の URL
日本語jp.example.comhttps://www.example.com/
中国語cn.example.comhttps://www.example.com/cn/
韓国語kr.example.comhttps://www.example.com/kr/

Application Gateway 作成

画面に従って適当に作成。

ここで設定するリスナーは、自動的に付与される名前がクソで、どうせ後で消したくなるので適当でよい。

Application Gateway 設定調整 (バックエンドプール)

バックエンド Web サーバーの DNS 名、もしくは IP アドレスを登録。

Application Gateway 設定調整 (HTTP設定)

(Application Gateway とバックエンド Web サーバー間の) HTTP 設定。
認証のため、バックエンドの Web サーバーに登録している SSL 証明書をアップロードして指定する必要がある。

接続ドレイン (サーバー退役時の接続維持) やCookie アフィニティ (スティッキーセッション) はお好みで。

Application Gateway 設定調整 (フロントエンドIP構成)

Application Gateway のパブリック IP を静的 IP とできないらしいので、DNS 名ラベルを設定して CNAME として指定するための DNS 名を固定。

例: xxxxxxxxxx.japaneast.cloudapp.azure.com

Application Gateway 設定調整 (リスナー)

こっちはクライアントと Application Gateway 間の通信設定。
SNI を使う場合はマルチサイト、そうじゃない場合は Basic でよいかと。

今回は Basic で間に合う。

Application Gateway に登録する証明書を pfx 形式で登録。

Application Gateway 設定調整 (ルール)

ルーティングのルール。
パスベースでルーティングするのでパスベースを押下してルール追加。

Web サーバーの設定調整

中国語、韓国語サイトのWebサーバーにおいて下記を調整。

  • HTTP リクエストにおいて、パス指定にゴミ (/cn, /kr) がついてくるので、うまいこと取り扱えるように調整
  • Application Gateway から Host = www.example.com としてリクエストが来るので、想定するバーチャルホストで取り扱えるように調整

Apache Httpd の場合

SSL の VirtualHost にて、Alias を追記。

<VirtualHost *:443>
.
.
.
ServerName www.example.com
ServerAlias cn.example.com
DocumentRoot "/var/www/public_html"
Alias /cn /var/www/public_html

.
.
.
</VirtualHost>

NGINX の場合

まぁ、頑張って……。

server {
.
.
.

     listen       443 ssl http2;
     server_name  kr.example.com www.example.com;
     root  /var/www/public_html;

.
.
.

     location ^~ /kr {
        rewrite ^/kr/(.*)$ /$1 last;
     }

.
.
.

     location ~ [^/]\.php(/|$) {
         fastcgi_pass 127.0.0.1:9000;
         fastcgi_index index.php;

            .
            .
            .
}

WordPress の設定調整

wp-config.php

.
.
.

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

.
.
.
.

さいごに

  • Azure、初めて触ったけど、めっちゃ使いづらい……
    • コンパネの時点でバグがちらほら
    • OK ボタン押すたびに数分待たされる
    • 待ってられるか! と進捗ガン無視して先に進むと、意味不明なエラーが連発したり、先の操作がしれっとシカトされたりする
  • ドキュメントがダメダメってみんな言ってる
  • 相応の事情がない限り、使わないほうがいいのでは