Re: помогите с проксированием

Maxim Dounin mdounin на mdounin.ru
Пн Ноя 13 13:25:34 UTC 2017


Hello!

On Mon, Nov 13, 2017 at 12:08:14PM +0300, Иван Мишин wrote:

> Я догадываюсь какие модули нужны, но все мои попытки реализовать задачу
> провалились.
> Может ли кто-то подсказать более точнее?

Более точнее так:

- В простейшем случае задача сводится к тому, чтобы сделать 
  proxy_pass внутри соответствующего location'а:

  location /site1/ {
      proxy_pass http://xyz.com/;
  }

  Тут важно обратить внимание на "/" в proxy_pass - он говорит 
  nginx'у, что при проксировании следует менять префикс "/site1/" в 
  исходном URI запроса на "/".

  Так будет работать, если бэкенд использует относительные адреса 
  для ресурсов, возвращает предсказуемые перенаправления (см. 
  proxy_redirect) и так далее.

- В наиболее сложном случае абсолютные адреса оказываются зашиты 
  не только в возвращаемых html-страницах (которые, при желании, 
  можно пытаться править с помощью sub_filter), но и в каких-нибудь 
  бинарных/проприетарных swf-файлах.  И поставленная задача вообще 
  не решается.

Где именно между этими крайними положениями находится ваш сайт - 
известно только вам.  А если не известно - то и выяснять, 
соответственно, вам.  Постепенно дополняя простейшую конфигурацию 
выше различными подпорками для решения возникающих проблем.

Ну и не следует забывать, что в общем случае - задача не решается.  
И где-то в тот момент, когда возникает необходимость менять 
содержимое возвращаемых страниц с помощью sub_filter - имеет смысл 
задуматься о том, чтобы пойти и переделать бэкенд.  Или даже не 
переделать, а просто разобраться с ним чуть получше - часто 
бывает, что бэкенд всё умеет, просто его нужно соответствующим 
образом сконфигурировать.

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru