流行ってますね、Nginx。
Nginx で SSLオフロード(アクセラレーション)して配下のApacheにプロキシするように設定をしてみます。
Nginx で リバースプロキシ
簡単に図を書いてみました。以下のような動きをするようになります。
要点をまとめると以下の3点です。
- Nginx では 80 or 443 で待ち受け
(Apacheでは8080で受けていますが、80でも10080とかでもなんでも良いです) - 80 に来たアクセスは443にリダイレクト
- Nginx でSSL通信を終端(Nginx ~ Apache間は暗号化無し)
ポイントとしては3つめで Nginx でSSL通信を終端することでApacheの負荷を軽減することができます。つまり上に乗っかっているアプリケーションの処理に専念させることができる。SSLの復号化の処理は負荷が高いので役割を別に持たせようということです。
では設定です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
### http でアクセスしてきた場合は https にリダイレクト server { listen 80; server_name hoge1.com; return 301 https://$host$request_uri; } ### https 設定 server { listen 443 ssl ; server_name hoge1.com; ### SSL有効化と証明書の保存場所指定 ssl on; ssl_certificate /etc/nginx/cert/hoge1.com.pem; ssl_certificate_key /etc/nginx/cert/hoge1.com.key; ### プロキシ先(Apache)の指定とApacheに渡すリクエストヘッダーの指定 location / { proxy_pass http://apache-hoge1.com:8080; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } |
これでリバースプロキシとしてNginxが動いてくれます。
ただ、実際にはSSLプロトコル(TLS1.1とか1.2 とか)の指定や Cipher(暗号スイート)や、今回は常時SSLを想定しているので HSTS の設定もしないといけないし、、、などなど実用には程遠い部分もありますので、環境や要件によってカスタマイズする必要があります。SSLセッションキャッシュの設定もしたほうがよさそうです。
おまけ
リダイレクトの設定やSSLの設定については以下にそれぞれをまとめていますので参考にどうぞ。
以上です。
↓↓↓ 持っていると便利な一冊。