Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What are the problem?

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 で利用するホスト名を指定します。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
6
Help us understand the problem. What are the problem?