はじめに
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.comをcertbotで認証する。
認証完了後、キーファイルが**/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側じゃなきゃダメでした・・・