Nginx "если" не работает должным образом

У меня есть некоторые проблемы с nginx. Вот моя простая конфигурация virtualhost, которая, кажется, не работает должным образом:

server {
    listen   80;
    server_name my.site;

    access_log /home/my.site/www/my.site/log/access.log;
    error_log /home/my.site/www/my.site/log/error.log error;
    root   /home/my.site/www/my.site/public/;

    charset utf-8;

    location /search/ {
        error_page 418 = @passenger;
        recursive_error_pages on;

        if ( $arg_mode = block ) { return 418; }
        default_type text/html;
        try_files $request_uri @passenger;
    }

    location / {
        try_files $uri @passenger;
    }

    location @passenger {
        root   /home/my.site/www/my.site/public/;
        passenger_enabled on;
    }

}

Проблема именно с местоположением / поиском /. Я хочу, чтобы nginx немедленно передал запрос бэкэнду, если uri включает параметр mode со значением block (то есть uri выглядит так: http://my.site/search/word?mode=block&type=... (other parameters))

Но сейчас это не работает. Если статический файл / public / search / word существует, сервер отправляет его, даже если параметр mode=block существует в uri... В чем моя ошибка?

1 ответ

Ваша конфигурация подходит для Nginx, и любой запрос на /search/ with mode=block будет отправлен на @passenger.

Простой тестовый пример...

server {
    listen 80;
    server example.com;  
    location /search/ {
        error_page 418 = @passenger;
        recursive_error_pages on;
        if ( $arg_mode = block ) { return 418; }
        default_type text/html;
        echo "/search/";
    }
    location @passenger {
        echo "@passenger!";
    }
}

Вызов это с помощью curl...

# curl -i http://example.com/search/word/?mode=block&a=b$c=d

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 02 Oct 2014 11:35:50 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked
Connection: keep-alive

@passenger!

Итак, если файлы обслуживаются, то это происходит в блоке @passenger, как @Alexey Ten в своем комментарии.

Другие вопросы по тегам