LoginSignup
6
7

More than 5 years have passed since last update.

nginx で TLS SNI 利用サーバーへの reverse proxy

Posted at

背景

ウェブサーバーを移転する場合、DNS の変更が浸透するまでは、旧サーバーから新サーバーに reverse proxy 設定をしておく必要があります。旧サーバーをそのままにしてしまうと、変更前の IP でリクエストがあった場合、旧サーバーが処理を受け付けてしまいます。データベースへの書き込みを伴うような場合に、本来反映されるべきデータが反映されないことになります。

移転するドメインが TLS SNI を使った name based virtualhost を利用している場合、reverse proxy となる旧サーバーからは正しく SNI リクエストを送信する必要があります。この記事ではその設定方法について共有します。

設定方法

旧サーバーでは以下のようにして新サーバーにリクエストを reverse proxy します。

server {
  listen 443 ssl http2;
  server_name www.example.com;
  ssl on;
  ssl_certificate     example.crt;
  ssl_certificate_key example.key;
  location / {
      proxy_pass https://new-server-ip;
      proxy_ssl_name www.example.com;
      proxy_ssl_server_name on;
      proxy_set_header Host $http_host;
      proxy_set_header X_Real_IP $remote_addr;
      proxy_set_header X_Forwarded_Proto $scheme;
      proxy_set_header X_Forwarded_Host $http_host;
      proxy_set_header X_Forwarded_Server $host;
      proxy_set_header X_Forwarded_For $proxy_add_x_forwarded_for;
  }
}

ポイントは proxy_ssl_nameproxy_ssl_server_name の二つの directive です。

proxy_ssl_server_name で proxy 先のサーバーとの接続に TLS SNI を有効にし、proxy_ssl_name で SNI で利用するホスト名を指定します。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7