ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



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@xxxxxxxxxxxx
+7 495 7853149



Attachment: smime.p7s
Description: S/MIME cryptographic signature



 




Copyright © Lexa Software, 1996-2009.