2016年9月29日木曜日

nginx+動的ドメイン+動的プロキシ

あまり使わないテクニックですが、awsで必要になった案件があったので紹介します。
調べても見つからなく、方法に気づくまで苦労しました。


ドメインが沢山あり、常に増減する。
毎回設定ファイルを登録してnginxをリロードはやりたくない。

これはよくあるパターンで簡単ですね。
apacheの %0 に相当するのが、$host です。
デフォルトサーバーのみ設定し、アクセスしてきたドメイン名でルートディレクトリが変わるようにすればいいだけです。
細かく分けたい場合は、rewrite を使えばいいですよね。

では、nginxをリバースプロキシとして使い、別サーバーにドメインごとのパスでコンテンツを置いた場合はどうでしょう。

proxy_pass でURLを指定ですが、なんと $host 変数が使えません。

これを解決する簡単な方法の一つに、あらかじめパスを変換してからリダイレクトする方法があります。
EC2にnginxを入れて、S3にアクセスする設定。

        location / {
            rewrite /(.*) /s3-バケット名/$host/$1  break;
            proxy_pass https://s3-ap-northeast-1.amazonaws.com/;
        }

これで、リダイレクト先のパスにrewriteの内容が適用されて内部リダイレクトされます。
ちなみにEC2にgoofysでマウントも試しましたが、重すぎて話になりませんでした。
マウントはあくまで管理用としてしか使えませんね。

EFSがはやく東京リージョンに来てくれればこんな変な事しないで済むのね。