Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: логирование location
Hello!
On Wed, Jun 23, 2010 at 11:11:50PM +0700, Igor V. Fatkulin wrote:
>
> Всем доброго времени суток.
>
> Пытаюсь сделать запись средствами nginx логирование обращений к
> определенному location, пытался сделать что-то типа:
>
> location ~ ^/cgi-bin/script.cgi\?(.+)$ {
> log_format scriptlog '$http_referer';
> access_log logs/$1.log scriptlog;
> }
>
> по итогу либо лог не создается, либо такое ощущение, что локейшн
> начинает на себя сгребать все запросы к скрипту, в результате все
> перестает работать.
Side note: ни разу не понятно какое отношение ваше письмо имеет к
треду "Critical errors nginx под Windows 2003". Если никакого -
то зачем было отвечать в тред c In-Reply-To?
По существу:
1. Вы неправильно понимаете как работают location'ы. Для
обработки запроса используется *только один location*. Никакого
волшебного склеивания конфигураций описанных в разных location'ах
не происходит.
Если вы хотите чтобы запросы логгировались отдельно и отправлялись
на апач - так и напишите в наиболее специфичном location'е для
данных запросов.
2. При matching'е location'ов тестируется только путь из URL,
т.е. "/cgi-bin/script.cgi". Так что написанное про '\?(.+)'
смысла не имеет и приведёт только к тому что данный location не
будет срабатывать для запросов к /cgi-bin/script.cgi.
3. Регулярные выражения тут не нужны. Идеально подойдёт location
с проверкой точного совпадения.
Итого писать надо как-то так:
location = /cgi-bin/script.cgi {
access_log /path/to/log format;
proxy_pass ...
}
Если в имени log-файла действительно нужны аргументы запроса
(настоятельно не рекомендую без нужды - это лишние открытия файлов
на каждый запрос и лишний вектор для dos'а), то использовать
переменную $args (aka $query_string).
Maxim Dounin
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|