Здравствуйте, Андрей. Вы писали 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 либо как отдельный
веб-сервер, либо как фронт-энд к апачу.
pgpnMWsDNzLcW.pgp
Description: PGP signature

