HTTP/HTTPSとリダイレクトの設定
Debian / Ubuntu 系で nginx をインストールし、HTTP 公開、HTTPS 公開、HTTP から HTTPS へのリダイレクトを設定する。
| 項目 | 例 |
|---|---|
| OS | Debian 13.x(Ubuntu系でも概ね同様) |
| サイト名 | www.example.com |
| ドキュメントルート | /var/www/www.example.com/html |
| 証明書 | /etc/nginx/tls/www.example.com/fullchain.pem |
| 秘密鍵 | /etc/nginx/tls/www.example.com/privkey.pem |
| 設定ファイル | /etc/nginx/sites-available/www.example.com.conf |
証明書と秘密鍵の成果物は作成済みとし、手順4でnginxへ配備する。作成方法は Server Certificateの作成 を参照する。
1. nginxをインストールする
Section titled “1. nginxをインストールする”sudo apt updatesudo apt install nginxサービス状態を確認する。
systemctl status nginx2. HTTP用のドキュメントルートを作る
Section titled “2. HTTP用のドキュメントルートを作る”sudo mkdir -p /var/www/www.example.com/html確認用の HTML を作る。
cat <<'EOF' | sudo tee /var/www/www.example.com/html/index.html<!doctype html><html><head> <meta charset="utf-8"> <title>www.example.com</title></head><body> <h1>www.example.com</h1></body></html>EOF3. HTTPで公開する
Section titled “3. HTTPで公開する”/etc/nginx/sites-available/www.example.com.conf を作成する。
server { listen 80; listen [::]:80; server_name www.example.com;
root /var/www/www.example.com/html; index index.html;
location / { try_files $uri $uri/ =404; }}有効化する。
sudo ln -s /etc/nginx/sites-available/www.example.com.conf \ /etc/nginx/sites-enabled/www.example.com.conf構文を確認して reload する。
sudo nginx -tsudo systemctl reload nginxHTTP で確認する。
curl -I http://www.example.com/期待する状態は、200 OK が返ることである。
4. 証明書と秘密鍵を配備する
Section titled “4. 証明書と秘密鍵を配備する”Server Certificateの作成 で作成した fullchain.pem と privkey.pem を配備する。
sudo install -d -o root -g root -m 700 \ /etc/nginx/tls/www.example.comsudo install -o root -g root -m 644 fullchain.pem \ /etc/nginx/tls/www.example.com/fullchain.pemsudo install -o root -g root -m 600 privkey.pem \ /etc/nginx/tls/www.example.com/privkey.pemfullchain.pem はサーバー証明書、Intermediate CA証明書の順で連結する。Root CA証明書は含めず、接続するクライアントのTrust Storeへ登録する。
検証用クライアントがDebianの場合の例。
sudo install -o root -g root -m 644 ca.crt \ /usr/local/share/ca-certificates/skills-root-ca.crtsudo update-ca-certificates5. HTTPS用serverを追加する
Section titled “5. HTTPS用serverを追加する”同じ設定ファイルに HTTPS 用の server を追加する。
server { listen 80; listen [::]:80; server_name www.example.com;
root /var/www/www.example.com/html; index index.html;
location / { try_files $uri $uri/ =404; }}
server { listen 443 ssl; listen [::]:443 ssl; server_name www.example.com;
ssl_certificate /etc/nginx/tls/www.example.com/fullchain.pem; ssl_certificate_key /etc/nginx/tls/www.example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3;
root /var/www/www.example.com/html; index index.html;
location / { try_files $uri $uri/ =404; }}構文を確認して reload する。
sudo nginx -tsudo systemctl reload nginxHTTPS で確認する。
curl -I https://www.example.com/証明書エラーになる場合は、接続名がSANと一致するか、Root CAが検証用端末のTrust Storeへ登録されているか、サーバーがIntermediate CA証明書を配布しているかを確認する。
切り分けだけなら curl -k で証明書検証を一時的に無効化できるが、最終確認や通常運用では使わない。
6. HTTPからHTTPSへリダイレクトする
Section titled “6. HTTPからHTTPSへリダイレクトする”HTTP 用 server を、静的ファイル配信ではなくリダイレクト専用にする。
server { listen 80; listen [::]:80; server_name www.example.com;
return 301 https://$host$request_uri;}
server { listen 443 ssl; listen [::]:443 ssl; server_name www.example.com;
ssl_certificate /etc/nginx/tls/www.example.com/fullchain.pem; ssl_certificate_key /etc/nginx/tls/www.example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3;
root /var/www/www.example.com/html; index index.html;
location / { try_files $uri $uri/ =404; }}反映する。
sudo nginx -tsudo systemctl reload nginxHTTP でアクセスし、HTTPS へリダイレクトされることを確認する。
curl -I http://www.example.com/期待する状態は、301 Moved Permanently と Location: https://www.example.com/ が返ることである。
確認コマンド
Section titled “確認コマンド”sudo nginx -tsudo nginx -Tsystemctl status nginxjournalctl -u nginxcurl -I http://www.example.com/curl -I https://www.example.com/nginx -T は、include された設定を含めて nginx が読んでいる設定全体を表示する。複数ファイルに分かれた設定の確認に使う。