Обратное проксирование nginx для нескольких приложений, запрашивающих аналогичные активы

У меня есть несколько приложений, расположенных по адресу:

http://www.foo.com:80
http://www.bar.com:42
http://www.baz.com:1337

что я пытаюсь изменить прокси-сервер с одной машиной nginx. проблема, с которой я сталкиваюсь сейчас, заключается в том, что эти приложения запрашивают файлы, которые идентичны по имени, но не идентичны по содержанию:

location /bootstrap.css {
 proxy_pass http://www.foo.com:80/bootstrap.css;
}

location /bootstrap.css {
 proxy_pass http://www.bar.com:42/bootstrap.css;
}

location /baz {
 proxy_pass http://www.baz.com:1337;
}

location /foo {
 proxy_pass http://www.foo.com:80/;
}

Могу ли я переписать все ответы, поступающие от определенного сервера приложений, чтобы они указывали на его подпапку приложения?

например: перенаправить

http://www.foo.com:80/* 

to

/foo

person Carl Sagan    schedule 09.05.2016    source источник


Ответы (1)


Вы можете настроить что-то вроде:

location /foo {
    proxy_pass http://www.foo.com:80;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

Однако вашему приложению foo может понадобиться знать об этом. См., например, этот сообщение.

ИЗМЕНИТЬ:

Nginx может делать то, что вы хотите, используя http://nginx.org/en/docs/http/ngx_http_sub_module.html.

Попробуйте пример в: ответ 1 и ответ 2

person JrBenito    schedule 09.05.2016
comment
Проблема в том, что html, созданный www.foo.com, имеет абсолютные ссылки, чтобы сказать -- /bootstrap.css, а не /foo/bootstrap.css Как мне получить ответ от www.foo.com, чтобы быть /foo/ bootstrap.css или получить запрос /bootstrap.css для пересылки в /foo/bootstrap.css - person Carl Sagan; 10.05.2016
comment
Я не знаю, может ли nginx сделать это в одиночку. Я считаю, что это ответственность приложения foo. Посмотрите сообщение и убедитесь, что автор явно указывает настроить application (в данном примере Sickrage), чтобы знать, что оно будет вызываться из каталога (в данном примере /sickrage). Является ли ваше приложение автономным или обслуживается сервером Apache или другим http-сервером? Я не знаю, можно ли переписать ответы в Apache или любом другом http-сервере. - person JrBenito; 10.05.2016
comment
На самом деле это возможно, как показано в разделе EDIT выше. Я надеюсь, что это поможет вам. - person JrBenito; 10.05.2016