Я пытаюсь получить имена хостов для моих контейнеров Docker, итак как я могу использовать только обратный проксиИменно этого я и пытаюсь добиться с помощью nginx.
Один контейнер Docker представляет собой веб-сервис, который предоставляет порт 8080 моему локальному хосту.
Итак, я могу получить доступ к веб-серверу через:
http://localhost:8080
Вместо этого я бы предпочел использовать:
http://webservice.local
Поэтому я добавил к своему/etc/hosts
127.0.0.1 webservice.local
Затем я установил nginx и добавил в /etc/nginx/sites-available/default
:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
location webservice.local {
proxy_pass http://localhost:8080
}
ERR_CONNECTION_REFUSED
После перезагрузки nginx при попытке открыть его http://webservice.local
в браузере появляется следующая ошибка .
Что я сделал не так? Как правильно настроить обратный прокси?
решение1
Я не уверен, что это правильный синтаксис. Попробуйте что-то вроде этого:
upstream myupstream {
server 127.0.0.1:8080 fail_timeout=2s;
keepalive 32;
}
location / {
proxy_pass http://myupstream;
proxy_redirect http://myupstream/ /;
}
что-то в этом роде..
Но если вы просто хотите перенаправить порт 8080 на 80, почему бы не воспользоваться сетевой утилитой вроде socat?
Затем вам следует добавить виртуальные хосты в nginx для каждого восходящего потока и добавить эти виртуальные хосты в DNS или /etc/hosts, которые все будут разрешаться в localhost.
Или вы можете просто обойти upstream и использовать виртуальные хосты следующим образом:
server {
listen 80;
server_name myvirtualhost1.local;
location / {
proxy_pass http://127.0.0.1:8080;
}
server {
listen 80;
server_name myvirtualhost2.local;
location / {
proxy_pass http://127.0.0.1:9090;
}