Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

proxy_pass em docker

Estou utilizando o docker para fazer as aulas, e no ponto quanto o instrutor falar para criar um proxy_pass para um servidor php não funcionou utilizando no config o proxy_pass com o docker, consegui realizer apenas com rewriter, por que parece que dentro do docker ele não localiza o localhost e da bad gateway

server {
    listen 80;
    server_name localhost;

    location / {
        root /usr/share/nginx/html;
        index index.html;
    }

    location ~ \.php$ {
        proxy_pass http://localhost:3000; estou utilizando um servidor node local fora do docker
    }

}
6 respostas

Niccolas, localhost é o container atual. Para fazer o proxy_pass para outro container, você precisa identificar esse outro container. Se estiver usando docker-compose, basta usar o nome do serviço. :-)

Sim isso perfeito, porem a minha duvida é se eu tiver uma aplicação node rodando local na porta 3000 e um docker com nginx é possivel fazer dentro do docker redirecionar com o proxy_pass para um host fora da network do docker?

Aahh, você quer acessar o host a partir do container?

Eu sempre peguei o IP mesmo pra usar, mas achei essa resposta que parece bem interessante: https://stackoverflow.com/questions/31324981/how-to-access-host-port-from-docker-container#:~:text=To%20access%20host%20machine%20from,using%20it%20to%20anything%20else.&text=Then%20make%20sure%20that%20you,0.0%20.

isso fiz algo aqui porem agora recebo um status: 404 com o proxy_pass e com rewrite vai

server {
    listen 80;
    server_name localhost;

    location / {
        root /usr/share/nginx/html;
        index index1.html;
        #proxy_pass http://internal-api.com;
    }

    location /service1 {
        proxy_pass http://localhost:81/;
    }

    location /service2 {
        proxy_pass http://localhost:82/;
    }

    location ~ \.php$ {
        #rewrite ^ http://localhost:3000;
        proxy_pass http://host.docker.internal:3000;
    }

}

server {
    listen 81;
    server_name localhost;

    location / {
        root /usr/share/nginx/html/service1;
        index index.html;
    }

}

server {
    listen 82;
    server_name localhost;

    location / {
        root /usr/share/nginx/html/service2;
        index index.html;
    }

}

meu etc/host

127.0.0.1    localhost
255.255.255.255    broadcasthost
::1             localhost
127.0.0.1 kubernetes.docker.internal
127.0.0.1 host.docker.internal

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Opa consegui, está dando 404 por que nao existe nenhum arquivo da.php no meu servidor local na porta 3000, ai mudei para ele responder a rotas no servidor e funcionou

server {
    listen 80;
    server_name localhost;

    location / {
        root /usr/share/nginx/html;
        index index1.html;
        #proxy_pass http://internal-api.com;
    }

    location /service1 {
        proxy_pass http://localhost:81/;
    }

    location /service2 {
        proxy_pass http://localhost:82/;
    }

    location /livros {
         #rewrite ^ http://localhost:3000;
        proxy_pass http://host.docker.internal:3000;
    }

}

server {
    listen 81;
    server_name localhost;

    location / {
        root /usr/share/nginx/html/service1;
        index index.html;
    }

}

server {
    listen 82;
    server_name localhost;

    location / {
        root /usr/share/nginx/html/service2;
        index index.html;
    }

}