pound+apache+gitlabでリバプロ環境を構築して貰う

Page content

事の発端

すでにapacheが動いている環境で、新規にgitlabをインストールすると競合してしまう。
もちろんポート名を分ければ解決するが、かっこ悪いしSSLの対応も面倒。
他のサービスを増やしたい予定もあり、早急な対策が必要だった。
友人のOさんに相談すると、リバースプロキシであるpoundを勧められた。
クライアント<->pound間をSSL化し、poundと各種サービスは平文でやりとりすることでパフォーマンスUPにも貢献するらしい。
とってもナイスだがやり方が分からなかったので、200kmほど車で走ってOさんを訪問して設定をご教示頂いた。

混乱の始まり

すでに亀の子方式で色々動いていたため、作業は結構難航した。混乱の過程で発覚したことは大きく三点。

  1. poundがgitlabを正常にリバプロしなかった。これは、綴りミスで直ぐ解決した。
  2. 取得しているSSL証明書が、サブドメイン毎に分かれており、ワイルドカード証明書が必要だった。が、letsencryptは現状ワイルドカード証明書に対応しないためSAN証明書を作成する必要が有った。しかし既存証明書がある環境ではなぜか既存証明書の更新になってしまう…
  3. WordPressをリバプロ環境下で使用する場合、設定に細工が必要。

証明書の新規作成

/etc/letsencryptディレクトリをリネームしておく
apache等を全て停止。
現状でlets encryptはワイルドカード証明書に対応しないため、

のように、使用するサブドメインを全て列挙して証明書を取得。
取得された証明書は、/etc/letsencrypt/live/1番目のサブドメイン に格納されているはず。

証明書の連結

poundで用いるためには、証明書の連結が必要。
保存先に移動し、
cat privkey.ppk fullchain.ppk > pound.ppk
を実行し、連結証明書を作成する。

apacheのバーチャルホスト、ポートの変更

apacheのヴァーチャルホスト設定を変更する。まず、https用のヴァーチャルホストを全て無効化する。
a2dissite subdomain1.localhost-ssl.conf みたいな感じ。
その後、http用のバーチャルホストのリッスンポートを使用していないポートへ変更。

/etc/apache2/ports.conf を開いて

みたいな感じに。次に、
/etc/apache2/sites-available/subdomain1.conf
みたいなやつを開いて

poundの設定

こんな感じになるらしい。なお、ちまたでローカルIPを入れろと書かれている箇所、VPSだとグローバルIPになる。

apacheの設定

リバースプロキシを噛ませると、wordpressが永久にリダイレクトしてしまい正常に機能しなくなる。
https://wpdocs.osdn.jp/管理画面でのSSL通信に詳しい。
wordpressのドキュメントルートに移動し、

コメント欄の、「編集するのはここまでです」みたいな所の上の行に

を挿入。

はまりポイント

  1. 複数のドメインを列挙した証明書(SAN)を作るとき、既存の証明書があるとSANになってくれず既存証明書の更新になるっぽい事を知らなかった。
    一度証明書を消去し無かったことにして対応。
  2. wordpressの無限ループの対応の際、wordpressのconfigとDBをいじくりまくって訳が分からなくなる。
    結局バックアップを別VPSに復元し全ての作業が振り出しに戻る。

謝辞

深夜3時まで付き合ってくださったOさんに感謝申し上げます。
もう足を向けて寝られないよう。真冬だったので、帰りは車のフロントが凍ってました。