Nginx 設定ジェネレーター
Nginx の設定をゼロから書くには、proxy_set_header の一行一行や gzip で圧縮する MIME タイプをすべて覚えたうえで、try_files $uri/ /index.php?$args と、ルーティングを静かに壊してしまう書き方との違いまで把握しておく必要があります。このジェネレーターはドメイン、アップストリーム、PHP ハンドラー、SSL ファイルのパスを尋ね、TLS・HTTP/2・静的ファイルのキャッシュ・圧縮に適切な初期値を設定した server block を出力します。
server block を生成する手順
-
1
プリセットを選ぶ
静的サイト、PHP-FPM(Laravel、WordPress)、Node.js のリバースプロキシ、または単純な 301 リダイレクトから選びます。
-
2
ドメインを入力する
server_name の一覧を記載します。通常は www ありと www なしの両方を含めます。
-
3
SSL の情報を設定する
fullchain と privkey のファイルを指定します。HTTP のみで運用する場合はスキップして構いません。
-
4
アップストリームを調整する
proxy_pass を使う場合のポート、ソケットのパス、またはバックエンドの URL を指定します。
-
5
コピーして反映する
出力を /etc/nginx/sites-available に置き、nginx -t を実行してから Nginx を reload します。
良い server block の構成
最近の Nginx のバーチャルホストは、たいてい次の要素で構成されています。
| 構成要素 | 役割 |
|---|---|
listen 443 ssl http2 |
HTTP/2 を有効にしたまま HTTPS を受け付ける |
ssl_certificate + ssl_certificate_key |
TLS の証明書と秘密鍵のファイルを指定する |
ssl_protocols TLSv1.2 TLSv1.3 |
古い TLS のバージョンを切り捨てる |
gzip on + タイプの一覧 |
テキスト/HTML/JSON/JS/CSS を配信時に圧縮する |
静的ファイル向けの expires ヘッダー |
再訪問者からの重複リクエストを減らす |
try_files |
フロントコントローラー(PHP、Laravel など)へ渡す |
| HSTS + セキュリティヘッダー | ブラウザに TLS を使い続けさせる |
リバースプロキシの要点
Nginx の背後で動く Node.js、Python、Ruby のアプリケーションでは次のように書きます。
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
X-Forwarded-For を書き忘れることは、アプリのログから本当のクライアント IP が消えてしまう典型的な原因です。
よくある失敗
- server_name のフォールバックがない。 どの名前にも一致しない場合、Nginx は最初の server block を既定として使います。Host ヘッダーを悪用した攻撃を避けるため、444 を返すキャッチオールの
server_name _ブロックを置きましょう。 - 証明書の順序が誤っている。
ssl_certificateのファイルはリーフ証明書だけでなく、フルチェーン(fullchain:リーフ + 中間証明書)である必要があります。 - キャッシュが効きすぎている。
/index.htmlにexpires 1yを付けると、以後のデプロイが反映されなくなります。代わりに静的ファイルの URL にバージョンを付けてください。 - テストせずに reload する。
systemctl reload nginxの前に必ずnginx -tを実行してください。構文エラーが一つあるだけでサイトは停止します。
よくある質問
HTTP/2 は安定しており、Nginx 1.25 以降で広くサポートされています。HTTP/3(QUIC)も Nginx 1.25 以降で利用できますが、まだ実験的な位置づけです。いま本番用の設定を組むなら HTTP/2 を有効にし、必要に応じて http3 と quic のディレクティブで HTTP/3 を追加してください。
慣例として、公開される証明書チェーンは /etc/ssl/certs/ に、秘密鍵は /etc/ssl/private/ に置きます。Let’s Encrypt はすべてを /etc/letsencrypt/live/domain/ の下に配置します。更新ツールが前提としている場所に合わせてください。
ほとんどのサイトでは必要です。301 https://$host$request_uri を返すポート 80 用の server block を別に追加してください。HSTS と組み合わせれば、最初のリクエスト以降この HTTP ブロックが使われることはほとんどありません。
sudo nginx -t を実行すると、reload せずに設定を解析できます。“syntax is ok” と “test is successful” が表示されたら sudo systemctl reload nginx で反映します。本番環境で restart を使ってはいけません。reload ならサービスを止めずに切り替えられます。
関連ツール
ASCII表リファレンス
0から127までの完全なASCII表です。NUL、LF、DELなどの制御コードを含め、各文字の10進数、16進数、8進数、2進数、HTML数値文字参照を表示します。
HTML文字参照
HTMLエンティティの検索可能なリスト、その名称コードおよび数値コード、および特殊文字や記号のワンクリックコピー機能を提供します。
キーボードショートカット一覧
macOS、Windows、Linux向けに、VS Code、Chrome、GNU Readlineを使うBashの公式資料に基づく既定ショートカットを検索できます。
JavaScript圧縮ツール
変数名のリネーム、空白の削除、デッドコードの除去、定数畳み込みでJavaScriptを圧縮し、より小さなバンドルを作成します。
FPS カウンター
requestAnimationFrame でブラウザーの FPS を測定。平滑化、最小・最大フレームレート、警告しきい値、任意のグラフに対応。ローカルで動作し、アップロードも API も不要です。
EditorConfig ジェネレーター
インデントのスタイルとサイズ、改行コード、文字コード、空白ルールを指定して .editorconfig ファイルを生成し、IDE やエディタをまたいで書式を統一できます。
このツールは他の言語でも利用できます
- Nginx 설정 생성기 [KO]
- Générateur de configuration Nginx [FR]
- Gerador de Configuração Nginx [PT]
- ตัวสร้างไฟล์ config ของ Nginx [TH]
- Trình tạo cấu hình Nginx [VI]
- Generator Konfigurasi Nginx [ID]
- Nginx-konfigurationsgenerator [SV]
- مولّد إعدادات Nginx [AR]
- Nginx-configuratiegenerator [NL]
- Nginx Konfigurationsgenerator [DE]
- Generator konfiguracji Nginx [PL]
- Generador de Configuración de Nginx [ES]
- Nginx Config Generator [EN]
- Generatore di Configurazione Nginx [IT]
- Генератор конфигураций Nginx [RU]
- Nginx Yapılandırma Üreteci [TR]
- Nginx 配置生成器 [ZH]