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

Re: nginx proxy



Здравствуйте, Андрей.

Вы писали 24 мая 2013 г., 10:09:18:

> Быть может я не прав, но возможна такая конструкция:


> location <> {
>  rewrite <1> <2>;
> proxy_pass <url>;
>  }

Возвращаю в тред.
Нет,  так  не  работает.  Объясню почему. Приведем к более конкретному
виду в этот конфиг:

location /test {
         rewrite $a $b; # - или что Вам больше нравится, сути нет
         proxy_pass @url;
}

Делаем  запрос:  /test/$blablabla.  Попадаем в указанный location. При
наличии  совпадения в $blablabla как $a запрос на @url будет передан в
виде   получившегося   изменения  части  $blablabla  реврайтом  $b;  в
противном  случае  передано  будет  $blablabla. Обратите внимание, что
изменен буде ЗАПРОС отправленный на @url!!!!

Этот @url например нам отвечает:
<html>
...
<img src="/image.png" />
...
</html>

Браузер  когда  увидит такую конструкцию спросит сервер /image.png. Но
вот в чем проблема - реально этот файл находится на @url и правильно к
нему  обращаться  /test/image.png!!! В nginx же обработка корня задана
своим  location  и  потому  подобный  запрос уже никогда не попадет на
@url.  Родилась  идея  конечно  сделать  через  try,  но!  при наличии
нескольких  одинаковых  файлов в разных location (а так будет 100% - к
примеру  все  называют  на  серверах /style.css или /css/style.css - и
т.п.)  будут  подключаться  не  те  файлы! потому идеальным выходом из
сложившейся  ситуации  служит  обработка  ответа от @url до его выдачи
клиенту! и интелектуальная замена в выводе <img src="/image.png" /> на
<img src="/test/image.png" />.
Но  существует  ли  подобное  решение и как его сделать - я не нашел в
гугле,  потому  и  спрашиваю  у  более опытных. Сам с подобной задачей
столкнулся   впервые.  Раньше  настраивал  nginx  либо  как  отдельный
веб-сервер, либо как фронт-энд к апачу.

Attachment: pgpAWvUf_rquE.pgp
Description: PGP signature


Reply to: