Re: error_page и limit_conn
Maxim Dounin
mdounin на mdounin.ru
Пт Апр 8 15:27:59 MSD 2011
Hello!
On Fri, Apr 08, 2011 at 03:08:12PM +0400, Костенко Евгений wrote:
> Всем доброго времени суток.
>
> Есть конфиг, в котором используется limit_zone/limit_conn и proxy_pass к
> бэкенду с apache.
> Там же перехват 500-504х ошибок через error_page и переход в именованный
> locaition @error500.
>
> limit_zone one $binary_remote_addr 10m;
> log_format outofsrv '"$time_local" $host $request_method $original_uri
> $remote_addr/$geoip_country_code $status/$upstream_status
> $request_time/$upstream_response_time $content_length/$body_bytes_sent
> "$http_user_agent"';
>
> location / {
>
> limit_conn one 50;
> proxy_pass http://127.0.0.1:80;
>
> error_page 500 502 503 504 =503 @error500;
> <SKIP>
> }
>
> location @error500 {
> internal;
Just a side note: internal тут смысла не имеет, в именованный
location по другому не попадёшь.
> root /bla/bla/htdocs;
> set $original_uri $uri;
> rewrite ^.*$ /sorry.html break;
Just another side note: BTW, а зачем именованный location +
rewrite, вместо
error_page ... /sorry.html
location = /sorry.html {
...
}
?
И, BTW, для POST-запросов такая конструкция с именованным
location'ом выдаст стандартный текст от 405-й ошибки вместо
искомого /sorry.html.
> access_log /bla/bla/nginx/error500.log outofsrv buffer=1m;
> log_not_found on;
> }
>
> Вопрос - как разделить (разложить по разным файлам) 500-504е ошибки от
> бэкенда и 503е от срабатывания limit_conn?
> Поиски в в документации и гугле не дали желанного результата. Плз, ткните
> урлом или примером.
Отделить 503 от бекенда от 503-ей от limit_conn - можно анализируя
значение в $upstream_status (если там 503 - значит от бекенда).
Но делать это в конфиге на if'ах - будут ужасненько, я бы не
рекомендовал без крайней нужды.
Maxim Dounin
Подробная информация о списке рассылки nginx-ru