2013-07-02 2 views
9

Я пытаюсь «игнорировать» или перенаправлять определенный запрос в журнале nginx на основе 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; } в location @app, но если они злы, я не хочу их использовать.

+0

Не могли бы вы попробовать снова без try_files? – Melvyn

+0

«если» не являются злыми, но они меняют «контекст», поэтому всегда трудно понять, что происходит на самом деле, когда вы используете, но для этого оно идеально. –

+0

@ThomasDecaux Как насчет этого? http://wiki.nginx.org/IfIsEvil –

ответ

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% 
} 

Хотя это может показаться, что много работы, чтобы просто быть в состоянии настроить одну переменные конфигурации, он на самом деле делает использование конфигурационных файлов много более приятным в долгий (и средний) срок, так как вы всегда будете генерировать конфигурационные файлы, которые легко читать и понимать, а не создавать сложные условия в них.

+0

Вы также можете использовать 'include', например' include php-fpm.conf; ', чтобы включить содержимое файла /etc/nginx/php-fpm.conf в любом месте файлов конфигурации вашего сайта. – alanaktion

13

Вы можете сделать это с помощью conditional logging. Это будет выглядеть примерно так:

map $request $loggable { 
    ~*lbcheck\.html 0; 
    default 1; 
} 
access_log /path/logs/name.log if=$loggable; 
+1

Но это, по-видимому, возможно только с nginx 1.7.0. – Ernestas

+0

Правильно, он доступен с этой версии. – Tom

+1

необходимо использовать «комбинированные» между .log if = '' 'access_log /var/log/snaplink26.log объединенные if = $ loggable;' '' – DeamonMV

Смежные вопросы