nginx構成ファイルをデバッグする最良の方法は?


37

apacheからnginxに移植しなければならない書き換えルールがたくさんあります。

書き換えルールと「if」条件が意図したとおりに機能しているかどうかを確認できないため、かなり苦痛なプロセスです。

Apacheには、書き換えモジュールのデバッグ機能がありました。nginxで何ができますか?

回答:


37

有効にするrewrite_log

rewrite_log on;

error_logディレクティブでデバッグレベルを設定します。

error_log /var/log/nginx/localhost.error_log notice;

Apacheにとても近い;)私は間違いなくnginxを見る必要があります
オリビエポンス

これは、書き換えのデバッグ以外にも使用できることに注意してください。「rewrite DEBUG DEBUG break;」を追加できます。nginx configの好きな場所で、いつヒットするかを確認してください。この書き換え行は、ログに記録される行をトリガーする以外、事実上何も行いません(場所「DEBUG」が一致する場合、「DEBUG」に置き換えます)。技術的には、次のような変数を出力することもできます。「rewrite。* $ request break;」または。* "'$ http_x_forwarded_for' $ request" break;を書き換えます。-ただし、これによりリクエストが失敗します。access_logのカスタムログ形式に変数を追加することをお勧めします。
カーティスヤロップ

14

デバッグサポートを有効にし、error_logでデバッグレベルを設定します。

error_log   /var/log/nginx/error.log debug;

これで、ログを追跡してリクエストを送信できます。おそらくあなたが望む以上の詳細がありますが、それは時々命の恩人になる可能性があります。

ああ、あなたは少なくとも場所のコンテキストでは、であることに注意する必要があります...


3
noticeより良いよりdebugとしてerror_level、それは低レベルの無関係なデバッグ情報(;要求ごと50+ライン例えばSSLやgzipの詳細)の多くをスキップしますので、書き換えをデバッグするため。
ダンダスカレスク

1

ログおよびデバッグの組み込みサポートを使用することは、間違いなく最も合理的な方法です。早い段階でいくつかのクイックルーティングデバッグを実行していて、4xxの「テキスト」を使用して、ブラウザ/クライアントのみを介して対話したい場合ディレクティブを使用すると、ごくわずかな労力で必要な答えを得ることができます。例えば、

http {
  server {
    listen 80;
    server_name mydomain.net;
    return 404 "mydomain 80 route";
  }

  server {
    listen 80 default_server;
    return 404 "default 80 route";
  }
}

返されたウェブページのテキストは、serverリクエストをトリガーしたブロックを示します。

お役に立てれば!
アンドレス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.