LoginSignup
7

More than 5 years have passed since last update.

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

背景

ウェブサーバーを移転する場合、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 で利用するホスト名を指定します。

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
What you can do with signing up
7