基本的な設定の構造は?
nginx.confはブロック構造。httpブロックの中にserverブロック(仮想ホスト)、その中にlocationブロック(URLパスごとの設定)をネストする。serverブロックでドメインとポートを指定し、locationでパスごとにプロキシ先や静的ファイルのルートを設定。sites-available/sites-enabledパターンで仮想ホストごとにファイルを分けるのが一般的だよ
リバースプロキシの設定は?
locationブロック内でproxy_passディレクティブを書くだけ。location /api/ { proxy_pass http://backend:3000/; } のように。ヘッダー転送(proxy_set_header X-Real-IP $remote_addr;)やWebSocket対応(Upgrade/Connectionヘッダー)も重要。proxy_cache で応答をキャッシュすることもできるよ
SSL/TLS設定は?
serverブロックでlisten 443 ssl; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem;を指定。Let's Encryptの証明書はCertbotプラグインで自動設定・更新できる。ssl_protocols TLSv1.2 TLSv1.3;でTLS 1.0/1.1を無効化して、ssl_ciphersで安全な暗号スイートを指定するのがベストプラクティスだよ
おもしろい!よくある設定ミスは?
①proxy_passの末尾スラッシュの有無でパスの書き換えが変わる(超ハマりやすい)、②try_files $uri $uri/ /index.html;を忘れてSPAの直接URL遷移が404になる、③worker_connectionsが小さすぎて同時接続数が頭打ち、④バッファサイズが小さくて大きなヘッダーで502エラー。nginx -tで構文チェックしてからreloadする癖をつけようね