16

リクエスト URI に基づいて、nginx ログの特定のリクエストを「無視」またはリダイレクトしようとしています。

これまでのところ、私はこれを持っています:

server {
  listen      80;
  #...
  access_log  /var/log/nginx/site.access;
  error_log   /var/log/nginx/site.error info;
  #...

  try_files $uri @app

  location = /lbcheck.html {
    access_log off;
    log_not_found off;
    try_files $uri @app;
  }

  location @app {
    proxy_redirect     off;
    proxy_pass http://unix:/tmp/site.unicorn.sock;
    #...
  }

}

基本的に、プロキシされた @app がリクエストに応答するようにしたいの/lbcheck.htmlですが、ログインしたくありません/var/log/nginx/site.access;

if ($uri = /lbcheck.html) { access_log off; }in でできることはわかっていますlocation @appが、if は悪なので、使いたくありません。

4

2 に答える 2

6

Nginxの構成構文内だけでそれを行う方法があるかどうかはわかりません。試してみたところ、ifステートメントなしでは不可能に思えました。

ただし、あなたがしようとしている方法でそれを行うことは、設定ファイルの書き方に関するNginxの哲学に反することを知っています。

複雑な構成ルールを記述する代わりに、好みの構成ツールで nginx.conf ファイルを生成する必要があります。これにより、実際の構成ファイルはシンプルになり、ツールによって複雑なビットがすべて生成されます。

たとえば、nginx.conf が生成されるソース ファイルは次のようになります。

%START_APP_CONFIG%
    proxy_redirect     off;
    proxy_pass http://unix:/tmp/site.unicorn.sock;
%END_APP_CONFIG%


location = /lbcheck.html {
    access_log off;
    %INSERT_APP_CONFIG%
}

location @app {
    %INSERT_APP_CONFIG%
}

これは、単一の構成変数を微調整するだけでも大変な作業のように思えるかもしれませんが、実際には、読みやすい構成ファイルを常に生成するため、長期 (および中期) 的には構成ファイルの使用がはるかに快適になります。複雑な条件を内包するのではなく、理解することです。

于 2013-07-02T15:28:32.917 に答える