2015-11-27 3 views
2

Это мой CDN и файл conf содержат «несколько строк».Nginx не возвращает страницы пользовательской ошибки, если выражение

Ситуация действительно странно:

В конфигурации я есть

error_page 403 = /e403; 
error_page 404 = /e404; 

и

location =/e403 { 
    default_type text/html; 
    return 403 "somehtml403"; 
} 
location =/e404 { 
    default_type text/html; 
    return 404 "somehtml404"; 
} 

то же время я есть арг Фитлер (арг запрещены, это CDN):

if ($args !~ ^$){ 
    return 404; 
} 
if ($request ~* (^.*\?.*$)){ 
    return 404; 
} 

Когда я спрашиваю /cookies.txt У меня есть пользовательская страница 404. Когда я запрашиваю /cookies.txt?onemore или /cookies.txt? У меня есть страница 404 nginx.

Вопрос в том, почему?

ответ

1

Я могу реплицировать проблему, когда операторы $if находятся непосредственно внутри блока server, но он работает правильно, когда они находятся внутри блока местоположения верхнего уровня. Это работает для меня:

location/{ 
    if ($args !~ ^$){ 
    return 404; 
    } 
    if ($request ~* (^.*\?.*$)){ 
    return 404; 
    } 
} 

Конечно, если у вас есть другие блоки местоположение, возможно, потребуется include правила там тоже.

+0

Это гениальный и удивительный! Спасибо!! – nikitasius

Смежные вопросы