Como configurar um proxy reverso usando nginx?

Como configurar um proxy reverso usando nginx?

Estou tentando obter nomes de host para meus contêineres docker ejá que só posso usar um proxy reversopara isso, estou tentando conseguir exatamente isso com a ajuda do nginx.

Um contêiner docker é um serviço da web que expõe a porta 8080 ao meu host local.

Para que eu possa acessar o servidor web via:

http://localhost:8080

Em vez disso, prefiro usar:

http://webservice.local

Por isso adicionei ao meu/etc/hosts

127.0.0.1 webservice.local

Em seguida, instalei o nginx e adicionei ao /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
     }

Depois de recarregar o nginx, recebo o seguinte erro ERR_CONNECTION_REFUSEDao tentar abrir http://webservice.localno meu navegador.

O que eu fiz errado? Como posso configurar o proxy reverso corretamente?

Responder1

Não tenho certeza se esta é a sintaxe correta. Tente algo assim:

upstream myupstream {
    server 127.0.0.1:8080 fail_timeout=2s;
    keepalive 32;
}

location / {
     proxy_pass http://myupstream;
     proxy_redirect http://myupstream/ /;
}

algo nesse sentido..

Mas se você deseja apenas redirecionar a porta 8080 para 80, por que não usar um utilitário de rede como o socat?

Então você deve adicionar virtualhosts no nginx para cada upstream e adicionar esses virtualhosts no DNS ou/etc/hosts, que serão todos resolvidos para localhost.

Ou você pode simplesmente evitar o upstream e usar virtualhosts assim:

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;
}

informação relacionada