nginx/0.8.21 exited on signal 11

Maxim Dounin mdounin at mdounin.ru
Wed Oct 28 14:19:11 MSK 2009


Hello!

On Wed, Oct 28, 2009 at 06:36:48AM -0400, Vladimir Korkodinov wrote:

> Но почему падает в http_upstream_init_request?

Потому что:

        location /crash {

            set $true 1;

            if ($true) {
                # fastcgi_pass here
                fastcgi_pass  127.0.0.1:9000;
            }

Вот тут ставится безусловный обработчик на запрос.

            if ($true) {
                # no handler here
            }

А вот тут он по прежнему стоит, но location уже другой, и 
конфигурации upstream'а в нём нет.  При срабатывании обработчика и 
попытке разыменования конфигурации upstream'а происходит SIGSEGV.

        }

> Подскажите как по другому: 
> 1. сделать ограничение по скорости для не RU.
> 2. Подключить тот coralCDN 
> Рекомендуется  конструкция вида.
> if ($http_user_agent ~ (CoralWebPrx)) { xxxx }

По if() в location можно делать безопасно две вещи:

1.  Уходить в другой location через rewrite ... last;

    if (...) {
        rewrite ... last;
    }

2.  Возвращать ошибку (по которой тоже можно при желании уходить в 
другой location, в том числе именованный):

    if (...) {
        return 404;
    }

Можно также использовать if() на уровне server{}, там он 
безопасен.

> Заметил еще одну странность.
> Есть две строки
> if ($query_string ~ (coral-no-serve)) { set $need_CDN  "1"; }
> if ($http_user_agent ~ (CoralWebPrx)) { set $need_CDN  "1"; }
> Падает при заходе с CoralWebPrx.

При двух строчках - не падает, trust me.  А вот если выше есть ещё 
какой-нибудь if (...) { proxy_pass ... } - будет падать.  Это я к 
тому что конфиги надо приводить полностью.

Впрочем, это всё ложится в приведённый выше pattern.  Этот способ 
прострелить себе ногу давно изучен и задокументирован, никакой 
новизны.  :)

Maxim Dounin





More information about the nginx-ru mailing list