Как настроить обратный прокси с помощью nginx?

Как настроить обратный прокси с помощью nginx?

Я пытаюсь получить имена хостов для моих контейнеров 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;
}

Связанный контент