У нас есть версия QA, версия UAT и версия webapp для DEV. Пользователи должны получить к ним доступ через http://uat.company.com:41002/webapp
, http://qa.company.com:41002/webapp
, и http://dev.company.com:41002/webapp
. Существует также другое веб-приложение на порту 41001, а также на порту 8080, к которому им потребуется доступ.
Эти URL-адреса должны быть доступны для компании извне, и у нас есть только один общедоступный IP-адрес, с которого можно получить доступ. Таким образом, записи DNS должны, чтобы все 3 адреса указывали на один IP. На этом единственном IP-адресе находится сервер, на котором запущен nginx. в фоновом режиме мне нужно, чтобы каждый URL-адрес указывал на другой сервер
http://uat.company.com --> 123.123.123.1
http://qa.company.com --> 123.123.123.2
http://dev.company.com --> 123.123.123.3
Боюсь, я не знаю правильной терминологии, однако оставшаяся часть URI и порта также должна быть перенесена на IP-адрес. Т.е. если кто-то посетит
http://uat.company.com:41002/webapp/somepage`
будет казаться, что это страница, которую они посетили, но на самом деле они будут смотреть на
http://123.123.123.1:41002/webapp/somepage
или если они посетили
http://qa.company.com:8080/static/home.html
они действительно будут смотреть на
http://123.123.123.2:8080/static/home.html
но их браузер все равно скажет http://qa.company.com:8080/static/home.html
я пытался
server {
server_name uat.company.com;
listen 41001;
listen 41002;
listen 8080;
location / {
proxy_pass http://123.123.123.1:$server_port$uri;
proxy_set_header Host $host;
}
}
однако это дает мне плохую страницу шлюза 502 с журналом: 2015/01/28 16:04:49 [crit] 30571#0: *1 connect() to 123.123.123.1:41002 failed (13: Permission denied) while connecting to upstream, client: 172.23.128.245, server: uat.company.com, request: "GET /webapp/ HTTP/1.1", upstream: "http://123.123.123.1:41002/webapp/", host: "uat.company.com:41002"
Надеюсь, это более понятно.
Обновить Из-за предположения Xaviers, что SELinux мог мешать, я отключил его и продолжаю. Использование конфигурации nginx, приведенной выше, похоже, теперь подключается ко второму серверу: порт, однако, все еще не проходит. я звоню
uat.company.com:41002/webapp/
При прямом вызове службы это приведет к перенаправлению на
uat.company.com:41002/webapp/spring/config/main
Однако через прокси-сервер происходит то, что он возвращается или заканчивается на
uat.company.com/webapp/spring/config/main
и, таким образом, не удалось загрузить страницу ...
Я установил, какие проблемы были с моей настройкой.
1) SELinux не позволял мне подключиться к восходящей сети. Я отключил это и рассмотрю возможность правильной настройки позже.
2) proxy_pass выполнял свою работу, как и ожидалось, однако мне нужны были аргументы http://123.123.123.1:$server_port/$uri$is_args$args;
3) proxy_set_header Host $host
правильно установите имя хоста на то, что я хотел, однако он съел номер порта. Правильный формат для моих нужд: proxy_set_header Host $host:$server_port
Для этого могут быть более изящные решения, и у меня еще нет полного рабочего решения, поскольку я сократил его, чтобы заставить его работать, однако рабочий раздел моей конфигурации:
server {
listen 41002;
server_name uat.comapny.com;
location /webapp {
proxy_pass http://123.123.123.1:41002/$uri$is_args$args;
proxy_set_header Host $host:$server_port;
}
}
Я опубликую более общую версию, как только доработаю ее. Большое спасибо всем, кто помогал.
Вы хотите сохранить порт, тогда вы должны вставить его в proxy_pass
.
server {
server_name bob.something.com;
listen 41001;
listen 41002;
listen 8080;
location / {
proxy_pass http://123.123.123.1:$server_port$uri;
proxy_set_header Host $host;
}
}
Вы должны понимать, что это будет прокси-запрос через nginx.