У меня в Apache следующая конфигурация:
RewriteEngine On
#APP
ProxyPass /abc/ http://remote.com/abc/
ProxyPassReverse /abc/ http://remote.com/abc/
#APP2
ProxyPass /efg/ http://remote.com/efg/
ProxyPassReverse /efg/ http://remote.com/efg/
Я пытаюсь использовать такую же конфигурацию в nginx. После прочтения некоторых ссылок у меня есть:
server {
listen 8081;
server_name localhost;
proxy_redirect http://localhost:8081/ http://remote.com/;
location ^~/abc/ {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://remote.com/abc/;
}
location ^~/efg/ {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://remote.com/efg/;
}
}
У меня уже есть такая конфигурация:
server {
listen 8080;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ^~/myAPP {
alias path/to/app;
index main.html;
}
location ^~/myAPP/images {
alias another/path/to/images
autoindex on;
}
}
Идея здесь состоит в том, чтобы преодолеть проблему политики одинакового происхождения. Основные страницы находятся на localhost: 8080, но нам нужны вызовы ajax для http://remote.com/abc. Оба домена находятся под моим контролем.
Используя приведенную выше конфигурацию, вызовы ajax либо не достигают удаленного сервера, либо отключаются из-за перекрестного происхождения.
Вышеупомянутое решение работало в Apache и не работает в nginx, поэтому я предполагаю, что это проблема конфигурации.
Я думаю, здесь возникает неявный вопрос: нужно ли мне иметь два server
декларации или их как-то объединить в одно?
РЕДАКТИРОВАТЬ: Добавлена дополнительная информация
РЕДАКТИРОВАТЬ2: Я переместил всю конфигурацию proxy_pass в основной server
объявление и изменил все вызовы ajax, чтобы они проходили через порт 8080. Теперь я получаю новую ошибку: 502 Connection reset by peer
. Wireshark показывает пакеты, идущие в http://remote.com с неверной контрольной суммой IP-заголовка.
Не работает не особо подробно описан, но позвольте мне попытаться угадать, в чем может быть проблема. Я бы посоветовал попробовать следующую конфигурацию:
server {
listen 8081;
server_name localhost;
location /abc/ {
proxy_pass http://remote.com/abc/;
proxy_http_version 1.1;
proxy_redirect http://localhost:8081/ http://remote.com/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /efg/ {
proxy_pass http://remote.com/efg/;
proxy_http_version 1.1;
proxy_redirect http://localhost:8081/ http://remote.com/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Что я действительно изменил, так это определения блоков местоположения и добавил Хост заголовок, на всякий случай, если удаленный хост использует виртуальные хосты на основе имен. Все остальные изменения носят косметический характер - читаемость улучшается, когда все соответствующие директивы собраны вместе и должным образом упорядочены (это может быть в порядке важности или по какой-либо другой характеристике).
Если приведенная выше конфигурация не работает должным образом, добавьте информацию о том, что именно не работает и как именно это выходит из строя.
Редактировать: Я добавил также Хост заголовок к приведенной выше конфигурации, на всякий случай, если удаленный использует виртуальные хосты на основе имен.