nginx と wordpress と http と https
ややこしい設定と魔改造
nginx を フロントエンド、バックエンドの2つに分け(理由はある)、さらに、その後ろに php-fpm が構えているという構成の WordPress サイトをいくつか持っているが、折角なので、https も offer したい。ただ、設定を http と https のために複数書くのはあほらしいので、できるだけ統一したかった。以下のような工夫で、設定ファイルをできるだけコンパクトにしたま、複数サイトの提供ができる。
DNS ラウンドロビンのように、あるいは、フロント、バックエンド構成のようにして、負荷分散をすることがある。WordPress ではファイルのアップロードが特定のある1つのホストに行くようにしないと、同期が結構面倒である。公開用の画像データが更新されていくが、それは、アップロードされたある1つのホストにしかないファイルになるからだ。解決策として、S3 保存系のプラグインを使う方法がある。設定は面倒荘であるが、これは設定さえすれば、どのサイトからアクセスしても良い。それ以外に、rsync でファイルを共有する方法もあるが、これは「マスターとなるデータ」の固定が必須で、そのときは「一般用」と「管理用」のバックエンドを分けて、管理用だけで情報公開等を行う必要がある。
map $scheme $sites_admin_backend { default sites_admin_backend; http sites_admin_backend; https sites_admin_backend_https; } map $scheme $sites_backend { default sites_backend; http sites_backend; https sites_backend_https; } upstream sites_backend { server localhost:6580; server remotehost:6580; } upstream sites_backend_https { server localhost:6581; server remotehost:6581; } upstream sites_admin_backend { server adminhost:6580; } upstream sites_admin_backend_https { server adminhost:6581; }
して、さらに
proxy_pass $scheme://$sites_local_backend; proxy_pass $scheme://$sites_admin_backend;
として、バックエンドに投げればよい。バックエンドは
listen 6580 default_server; listen 6581 default_server ssl http2;
として待っていれば、整合性は取れる。
ディスカッション
コメント一覧
まだ、コメントがありません