LoginSignup
28
41

More than 3 years have passed since last update.

NginxでSSL+リバースプロキシ

Last updated at Posted at 2018-11-17

はじめに

NginxでSSL+リバースプロキシさせるための設定です。手順が多いように見えますが、あらかじめ設定ファイルのひな形を作っておけば比較的簡単に設定できると思います。

前提環境

  • さくらVPSのUbuntu16.04(カスタムOS)
  • ドメインを取得済みで、かつサブドメインも登録済み。
  • Let's Encryptを導入済み。

仮定条件

  • ドメインhoge.fuga.comにアクセスしたときにリバースプロキシでサーバアドレス123.456.789.12:3456に接続させる。

設定手順

初回認証

認証用のディレクトリを作成し、所有ユーザをwww-dataに変更

# mkdir /var/www/hoge
# chown -R www-data:www-data /var/www/hoge

HTTP接続するためのサイト設定ファイルを作成する。

# vi /etc/nginx/conf.d/hoge.conf

設定ファイルの中身は以下のようにする。

/etc/nginx/conf.d/hoge.conf
# HTTPの設定
server{
    listen 80;
    listen [::]:80;
    server_name hoge.fuga.com;

    #letsencryptで認証するためのURL
    location ^~ /.well-known/acme-challenge {
        default_type "text/plain";
        root /var/www/hoge;
    }
}

Nginxを再起動する。

# systemctl restart nginx

サブドメインhoge.fuga.comcertbotで認証する。
認証完了後、キーファイルが/etc/letsencrypt/live以下に作成される。

# certbot certonly --webroot -w /var/www/hoge -d hoge.fuga.com

SSL接続設定

設定ファイルを編集する。

# vi /etc/nginx/conf.d/hoge.conf

設定ファイルを以下のように編集する。

/etc/nginx/conf.d/hoge.conf
# HTTPの設定
server{
    listen 80;
    listen [::]:80;
    server_name hoge.fuga.com;

    #letsencryptで認証するためのURL
    location ^~ /.well-known/acme-challenge {
        default_type "text/plain";
        root /var/www/hoge;
    }
    #HTTPで接続された場合、HTTPSで同URLにリダイレクトさせる。
    return 301 https://$host$request_uri;
}

# HTTPSの設定
server{
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name    hoge.fuga.com;

    ssl_protocols TLSv1.2;
    ssl_ciphers EECDH+AESGCM:EECDH+AES;
    ssl_ecdh_curve prime256v1;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;

    # SSL認証キーの参照先。certbotで自動的に生成されるファイルを指定する。
    ssl_certificate     /etc/letsencrypt/live/hoge.fuga.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hoge.fuga.com/privkey.pem;
    ssl_dhparam         /etc/ssl/certs/dhparam.pem;

    keepalive_timeout    70;
    sendfile             on;
    client_max_body_size 0;

    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;

    location / {
        # プロキシ先のサーバアドレスとポート番号を指定
        proxy_pass    123.456.789.12:3456;
    }
}

Nginxを再起動する。

# systemctl restart nginx

ブラウザでhttps://hoge.fuga.comに接続し、正常に目的のページが表示されることを確認する。

※2019/02/08修正:Let's Encryptの再認証用URLはHTTP側じゃなきゃダメでした・・・

28
41
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
28
41