У меня есть несколько докеризованных сервисов, обслуживающих http (и https). Внутренний http-порт (80) сопоставлен на уровне docker с другим портом, так что он доступен на хосте. И это работает нормально:
curl localhost:1234
Переносит меня к моему http-сервису в контейнере.
Теперь я хотел бы, чтобы это было доступно через dns, без указания порта (я хочу оградить клиентов от этого сопоставления портов). Я хотел бы использовать nginx для пересылки запросов на http://myserver1
-> http://localhost:1234
.
Можно ли настроить nginx таким образом? Можно ли настроить его для множественной пересылки следующим образом:
http://myserver1 --> http://localhost:1234
http://myserver2 --> http://localhost:1235
...
решение1
Да, оно может.
Параметр server_name используется для поиска наилучшего соответствия между различными сайтами, размещенными на одном сервере nginx, например
server {
listen 80;
listen [::]:80;
server_name myserver1;
и еще один такой
server {
listen 80;
listen [::]:80;
server_name myserver2;
Таким образом, они могут работать как на порту 80, так и совпадать в зависимости от того, вызваны ли ониhttp://мойсервер1илиhttp://myserver2.
Теперь как подключиться к вашим услугам? Вы можете определить поставщиков услуг вышестоящего уровня, например
#place this outside of the 'server{' block
upstream server1 {
server localhost:1234;
}
а затем перенаправить на него через
# place this inside the 'server{' block
location / {
proxy_pass http://server1;
}