Re: Несколько непонятностей по nginx

proforg proforg at maloletka.ru
Tue Apr 10 23:16:02 MSD 2007


On 10.04.2007, at 22:44, Max N wrote:

> Здравствуй, all.
>
> Решил сделать nginx в качестве фронтенда, но посколько разрабатываю
> этот замысел не так давно, возникло несколько вопросов, на которые
> прямых ответов не нашел.
>
> Как я уже понял, блока if в другом блоке if быть не может, а можно в
> самом if проверять несколько условий (&& или ||)? Или может есть
> какие-нибудь другие пути проверки двух условий? Например для того,
> чтобы выдать клиенту 403, если у него неправильный реферер и адрес
> неподходящий...
Нет, нельзя.
Нужно сводить к последовательности if, используя например внутренние  
переменные, если нужно логическое AND
http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html#set
или rewrite и разные локейшны

>
> Есть какая-нибудь возможность в процессе проксировании запроса
> выполнять какой-либо скрипт, а по результату его выполнения, решать,
> отдавать запрос на обработку бэкенду или вернуть какой-нибудь статус?
> Тут очень даже кстати был бы встроенный perl с возможностью
> назначения хэндлеров в location. Но поскольку модуль -
> экспериментальный, а в офф.доках не совсем понятно написано насчет
> пересборки самого перла (с последующей пересборкой бинарных модулей),
> то на http_perl_module не особо надеюсь...
Если не хватает тривиальных проверок которые умеет if, то
видимо только на него и нужно надеяться :)


> А проксировать сразу на два адреса можно? Напр., одновременно апачу и
> какому-нибудь демону на 9999-м порту?
Нет, нельзя.

>
> Не совсем понятно насчет location / {}. Это location, ммм, по
> умолчанию (т.е. подходит для всех запросов) или нет? Ведь, по логике
> вещей, эта конструкция эквивалентна location = '/', т.е. применима для
> запросов "GET /".
Это локейшн срабатывает для всех запросов, если ранее не встречено  
более полное совпадение.
Если использовать = то тогда будет проверяться полное соответствие.
http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#location

>
> В некоторых статьях (в частности, на blog.kovyrin.net) в примерах
> конфига вижу строчку (настройка в кач-ве фронтенда)
> proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
> либо то же самое, но закомментаренное.
>
> А в чем сакральный смысл установки HTTP_X_FORWARDED_FOR?
> nginx при обработке запроса сбрасывает существующий заголовок, если он
> есть? Или это для каких-то других целей?

Этот заголовок нужен устанавливать если бакенду необходимо получить  
реальный IP клиента а не ip фронтенда.
Он добавляется первым в имеющийся список.
Назад (в случае apache) прозрачно получается модулем mod_rpaf /  
mod_realip
Как вариант ещё можно использовать заголовок X-Real-IP который  
понимает  mod_realip


Алексей Бещёков
proforg at maloletka.ru
+7 495 7853149



-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2423 bytes
Desc: not available
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20070410/582ed146/attachment.bin>


More information about the nginx-ru mailing list