Помогите в nginx разобраться с проверкой параметров в url

S
На сайте с 14.04.2008
Offline
60
806

Коллеги, помогите кто шарит в настойке nginx. Есть такой простой конфиг виртуалхоста.

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

}

Конкретно проблема с локейшном /search/. Мне нужно, чтобы при наличии параметра mode=block обработка передавалсь бекенду, в противном случае отдавался статичный файл если он есть. То есть если идет запрос вида my.site/search/url?mode=block&(...прочие параметры) то он отправлялся в бекенд. Пошарился по stackoverflow - ну вроде как все у меня правильно. Но нифига не работает :)

UPD. "Нифига не работает" означает вот что: даже при наличии параметра mode=block сервер все равно отдает статичную страницу

VK
На сайте с 29.12.2011
Offline
42
#1

seraphim, разнесите на два локейшена это все.

iamsens
На сайте с 26.08.2009
Offline
115
#2

попробуй для теста сначала так

    if ( $arg_mode = block ) { return 418; }

поменять на

    if ($args ~ mode=block )  { return 500; }

и на всякий случай

    location ~ /search/ {
Glueon
На сайте с 26.07.2013
Offline
172
#3
seraphim:
if ( $arg_mode = block ) { return 418; }

Я бы начал с того, что сюда бы вместо return 418 вставил бы что-нибудь понятное, типа 403. Тогда сразу будет понятно срабатывает ли if. Кавычки еще поставь ... А вдруг :)

Если 403 не увидишь, то ставить в location /search. Если и после этого не покажет, то видимо не попадает в location. Я обычно для подстрочных location-ов пишу сразу "^~" в начале, но по идее твой вариант тоже должен работать.

Есть много IP-сетей в аренду под прокси, парсинг, рассылки (optin), vpn и хостинг. Телега: @contactroot ⚒ ContactRoot команда опытных сисадминов (/ru/forum/861038), свой LIR: сдаем в аренду сети IPv4/v6 (/ru/forum/1012475).
S
На сайте с 14.04.2008
Offline
60
#4

Советы помогли помочь, что проблема не в конфиге (не в nginx'е), а в бэкенде. К сожалению :) Всем спасибо.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий