nginx -t が成功したからといって、ウェブサイトが開けるわけではない。
当社独自のバックエンドアドレス /admin 長期的には不適切:301 が以下にリダイレクト /admin/そして、それは実際のディレクトリであり、インデックスファイルが存在しないため、ブラウザは直接403エラー(白い画面)を表示します——構文チェックはすべて緑色ですが、ログには「directory index is forbidden」というメッセージが大量に記録されています。このツールは、ステータスコードを段階的に出力するcurl診断スクリプトと、対応する障害に対するnginx修正コード断片を提供します。
—
—
| 現象 | 最も一般的な根本原因 | 確認方法 |
|---|---|---|
| 301 → スラッシュ付き → 403 | パス名は実際のディレクトリですtry_files $uri $uri/ ディレクトリのリダイレクトがトリガーされ、そのディレクトリ内に index ファイルがない場合 | ls /var/www/サイト/該当ディレクトリ index.html があるかどうかを確認する |
| リダイレクト回数が多すぎます | 正確な location における 301 と try_files の内部リダイレクトが相互にネストされる問題 | スクリプト内で Location ヘッダーが前のアドレスに戻っているかどうかを確認します。 |
| クリーンURLで404になるが、.html付きでは正常に動作する | try_files の記述が不足しています $uri.html | 補完 try_files $uri $uri.html $uri/ =404; |
| .html が誤ったクリーンURLへ301リダイレクトされる | location 内で使用 if 正規表現による判定を行い、カバー済み $1 キャプチャグループ | if 判定をこの location 外に移動するか、map を使用する |
| あるプレフィクスパスが想定された location を経由していない | 正規表現 location が優先される ^~ プレフィックス前方ヒット(^~ 正規表現を抑制しますが、通常のプレフィックスは抑制されません) | nginx -T | grep -n location 順序とタイプを確認 |
| 403 かつログに「forbidden by rule」と記録されている場合 | deny ルールまたはファイル権限 | error log の具体的な行を確認し、推測しないこと |
1 · バックエンドアドレスが常に 403 になる。/admin 301 でリダイレクトされました /admin/一方で /admin/ 実際のディレクトリ(中に data/ が配置されている)であり、index ファイルが存在しない場合 → 403 白画面。ただそれだけです。 /admin.html アクセス可能。
2・リライトは内部での処理であり、index ファイルの追加ではありません。rewrite ^/admin/?$ /admin.html last; /admin および /admin/ の両方をファイルに直接ルーティングし、ログイン保護レイヤーは変更しません。
3 · 構文チェックではこのような問題は検出できない。nginx -t 構文のみをチェックするため、リダイレクトチェーンやディレクトリインデックスといった論理エラーはすべて「OK(緑)」と表示されます。修正後は、実際にリクエストを送信してステータスコードとリダイレクト回数を確認する必要があります。
4・ペアテスト/x と /x/ 2 つの異なる URI であり、マッチするルールが異なる可能性があるため、両方とも 200 になる必要があります。