Как запретить некоторые запросы в nginx

neoks
На сайте с 17.03.2010
Offline
152
6085

Здравствуйте, есть к примеру 5 страниц:

/index.pl?get_id=1

/index.pl?get_id=2

/index.pl?get_id=3

/index.pl?get_id=4

/index.pl?get_id=5

Как можно вывести ошибку 404 к для последнего запроса "/index.pl?get_id=5" использую только nginx ?

Есть ли вообще в nginx такая возможность или может быть модуль который позволяет работать с запросами такого плана ?

kxk
На сайте с 30.01.2005
Offline
970
kxk
#1

Вам нужно ограничить число запросов к бекенду или за единицу времени с ip адреса ?

Ваш DEVOPS
neoks
На сайте с 17.03.2010
Offline
152
#2
kxk:
Вам нужно ограничить число запросов к бекенду или за единицу времени с ip адреса ?

нет, нужно просто вывести ошибку 404 на определенные страницы.

К примеру в файле "index.pl", есть всего две функции:

/index.pl/?get=user

/index.pl/?get=user2

Если к скрипту обратиться так "/?get=user3" или любой другой текст после знака "?", скрипт обработает запросы и выдаст ошибку так как такая функция в нем не описана, но при этом скрипт "index.pl" все равно обрабатывает запрос "/?get=user3", а нужно бы что бы этот запрос блокировался на nginx не доходя до скрипта "index.pl".

Проще говоря мне нужно что-бы всего два запроса обрабатывал "index.pl"

/index.pl/?get=user

/index.pl/?get=user2

А остальные запросы типа "/index.pl/?get=user3" и т.д блокировались на уровне nginx не доходя до самого скрипта.

kxk
На сайте с 30.01.2005
Offline
970
kxk
#3

neoks, С ходу решения подобного не припомню, тут в любом случае регулярка, вопрос в том решается стандартными средствами или нет, если не решается надо писать модуль на perl например.

V1
На сайте с 26.07.2007
Offline
102
#4

location ~* "^/index.pl/?(get=user1|get=user[3-9])"

{

deny all; # запретить все для всех

return 404; # вернуть код ошибки

}

??????)

я кочегарю Топы Яндекса и Гугла.
iHead
На сайте с 25.04.2008
Offline
137
#5

if ($request_uri = "/index.pl?get_id=5") {

return 404;

}

Рекомендуемый хостинг партнер 1С-Битрикс (https://www.ihead.ru/bitrix/), PHP-хостинг (https://www.ihead.ru/php/), доверенный партнер RU-CENTER (https://www.ihead.ru/news/573.html), официальный представитель REG.RU в Кирове (https://www.ihead.ru/news/851.html)
iamsens
На сайте с 26.08.2009
Offline
115
#6
neoks:
нет, нужно просто вывести ошибку 404 на определенные страницы.

К примеру в файле "index.pl", есть всего две функции:
/index.pl/?get=user
/index.pl/?get=user2

Если к скрипту обратиться так "/?get=user3" или любой другой текст после знака "?", скрипт обработает запросы и выдаст ошибку так как такая функция в нем не описана, но при этом скрипт "index.pl" все равно обрабатывает запрос "/?get=user3", а нужно бы что бы этот запрос блокировался на nginx не доходя до скрипта "index.pl".

Проще говоря мне нужно что-бы всего два запроса обрабатывал "index.pl"
/index.pl/?get=user
/index.pl/?get=user2
А остальные запросы типа "/index.pl/?get=user3" и т.д блокировались на уровне nginx не доходя до самого скрипта.

задача решается следующим способом:

создается локейшен, для запроса /index.pl/


location ~ ^/index.pl\/$
{
#далее проверяются аргументы запроса ?get=user или ?get=user2
if ($args ~ ^get=user2?$ )
{
если правило сработало выполняем проксирование
}
#во всех других случаях закрываем соединение
return 444;
}

если самому сложно составить regexp для запроса, пишите сюда конкретную задачу - напишу

к примеру, если запросить ( /index.pl?get=user или /?get=user ) - в даном случае запрос в указаный локейшне не попадет

neoks
На сайте с 17.03.2010
Offline
152
#7

Всем спасибо, это то что нужно, просто долго не мог найти на оф сайте какой функцией обрабатывать именно такие запросы.

Тему можно закрывать.

siv1987
На сайте с 02.04.2009
Offline
427
#8
iamsens:
создается локейшен, для запроса /index.pl/

А зачем отдельный локейшин чтобы проверить один аргумент? разве в каком нибудь общим это сделать нельзя?

Андрей
На сайте с 30.09.2009
Offline
482
#9

локейшин не нужен. Зачем лишний код.

EuroHoster.org ( https://eurohoster.org/ru/ ) - территория быстрых серверов. Выделенные серверы, VPS, SSL, домены и VPN.
iamsens
На сайте с 26.08.2009
Offline
115
#10
siv1987:
А зачем отдельный локейшин чтобы проверить один аргумент? разве в каком нибудь общим это сделать нельзя?

можно и в общем локейшене, выполнять проверку, но если к другому скрипту будут обращаться с этими же аргументами, могут быть проблемы, и самое важное, не будет лишних regex'повых проверок при каждом обращению к сайту, это экономия на спичках, но зачем сразу делать криво :)

---------- Добавлено 11.10.2013 в 11:27 ----------

и еще, сделать двойную проверку без локейшена еще хуже :)

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