2013-03-12

Apache の Reverse Proxy を SSL 経由で試す

Apache のリバース・プロキシを使って、Apache の 443 ポートに来た通信を Nginx の 4443 ポートに飛ばした。

関連エントリー/前提条件

関連するエントリーは以下の通り:

前提条件は下記の通り:

  1. myserver.com に複数の Rails アプリが動いている
  2. myserver.com:/var/redmine に最新の Redmine をインストールした
  3. 今までは https://myserver.com で Redmine を公開
    • Apache を利用
    • 443 ポートを利用
  4. 新 Redmine は https://myserver.com:4443 で公開
    • Nginx を利用
    • 4443 ポートを利用

新 Redmine を Nginx で動かしたのは、他の Rails アプリが使っている Passenger と競合したため。Nginx で 4443 ポートを使ったのは、443 ポートが Apache に使われているため。

Apache のリバース・プロキシを試す

現在、Redmine は https://myserver.com:4443/ で動いている。けれど、ポート番号をいちいち入力するのは手間だし、過去のメールや Wiki にはポート番号なしの URL が記入されており、そこからリンクを辿る時にポート番号を追加するのはとても面倒。

なので、https://myserver.com/ にアクセスしてたら、自動的に https://myserver.com:4443/ に転送する様にしたい。つまり、Apache が 443 ポートで受けたリクエストを Nginx の 4443 ポートに飛ばしたい (また Nginx の 4443 ポートからの返信を Apache が 443 ポートで受け取れる様にしたい)。これを Apache のリバース・プロキシ機能で実現する。

80 番ポートで練習

まずは SSL (443 ポート) を使わない。80 番ポートで練習。

Nginx は 8080 ポートを開く設定にした:

server {
  listen 8080;
  server_name myserver.com;
  root /var/redmine/public;
  ...
}

Nginx を再起動。http://myserver.com:8080/ でサイトを開ける。Apache に Reverse Proxy の設定を追加して http://myserver.com/ でサイトを開くようにする。設定ファイルは以下の通り (Proxy の設定を青字で書いた)。

<VirtualHost *:80>
  ServerName myserver.com
  DocumentRoot /var/redmine/public
  ProxyPass / http://myserver.com:8080/
  ProxyPassReverse / http://myserver.com:8080/
</VirtualHost>

Apache を再起動すれば http://myserver.com/ でサイトが開く。

443 番ポート対応

まず Nginx 側のポート番号を 4443 にする。

server {
  listen 4443;
  server_name myserver.com;
  root root /var/redmine/public;

  ssl on;
  ssl_certificate /my/path/to/ssl-cert.pem;
  ssl_certificate_key /your/path/to/ssl-cert.key;
  ...
}

Nginx を再起動。https://myserver.com:4443/ で開ければ OK。http を https に変えるのを忘れるポカをしないこと (意外とハマる)。

4443 番ポートを指定するのは面倒。https://myserver.com/ で開きたい。まず、Apache で Reverse Proxy の設定を変更する (新変更点を青字で書いた)。

<VirtualHost *:443>
  ServerName myserver.com
  DocumentRoot /var/redmine/public
  ProxyPass / https://myserver.com:4443/
  ProxyPassReverse / https://myserver.com:4443/

  SSLEngine on
  SSLProxyEngine on
  SSLCertificateFile /my/path/to/ssl-certpem
  SSLCertificateKeyFile /my/path/to/ssl-cert.key
</VirtualHost>

SSLProxyEngineon にしていること、http を https に直していること、ポート番号をちゃんと指定すること、を注意。

Apache を再起動すれば、https://myserver.com/https://myserver.com:4443 にアクセスする。ポート番号不要になって幸せ。

参考エントリー

No comments:

Post a Comment