Nginx não abre a porta de escuta especificada

Nginx não abre a porta de escuta especificada

Estou tentando fazer proxy do tráfego SSH do nginx (escutando na porta 7999) para um servidor bitbucket (escutando na porta 7998) no back-end. Tanto o nginx quanto o bitbucket estão sendo executados em contêineres Docker. Se eu fizer login no contêiner nginx e telnet bitbucket.domain-name.com 7998ele se conectar. Na máquina host, se eu netstat -pnltconseguir:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp6       0      0 :::2377                 :::*                    LISTEN      24477/dockerd       
tcp6       0      0 :::7946                 :::*                    LISTEN      24477/dockerd       
tcp6       0      0 :::80                   :::*                    LISTEN      24477/dockerd       
tcp6       0      0 :::443                  :::*                    LISTEN      24477/dockerd       
tcp6       0      0 :::7999                 :::*                    LISTEN      24477/dockerd   

Mas, quando faço isso no meu computador: recebogit clone ssh://[email protected]:7999/project_key/repo_name.git

Cloning into 'repo_name'...
ssh: connect to host domain-name.com port 7999: Connection refused
fatal: Could not read from remote repository.

E quando eu consigo , telnet domain-name.com 7999eu consigo telnet: Unable to connect to remote host: Connection refused.

Parece que o problema é que o nginx não está escutando na porta 7999 dentro do contêiner do docker. Mas, no host que vejo, dockerdestá escutando na porta 7999. Imagino que talvez não tenha a configuração do nginx correta, mas não tenho certeza. Aqui estão os bits relevantes dos arquivos de configuração.

docker-compose.yaml (nginx)

services:
    nginx:
        ports:
            - "80:8080"
            - "443:8443"
            - "7999:7997"

nginx.conf (dentro do contêiner nginx)

stream {
    server {
        listen 7997;
        proxy_pass bitbucket1.cybertron.ninja:7998;
    }
}

E aqui estão algumas saídas executadas dentro do contêiner nginx:

root@6d123f454eef:/# netstat -pnlt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name                                                                        
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      10/nginx: master pr                                                                     
tcp        0      0 0.0.0.0:8443            0.0.0.0:*               LISTEN      10/nginx: master pr                                                                     
tcp        0      0 127.0.0.11:44703        0.0.0.0:*               LISTEN      -            

Alguma idéia de como corrigir esse problema? Estou perplexo.

Responder1

Acabei de configurar um ambiente de teste para o seu caso com as poucas informações que você fornece. Supondo que o que você forneceu é tudo o que você mudou, isso não funcionará.

O nginx.conf padrão dentro do contêiner nginx oficial possui a includediretiva dentro de um httpbloco:

http {
    # ...
    include /etc/nginx/conf.d/*.conf;
}

Se você apenas colocar seu arquivo .conf no diretório conf.d, o nginx falhará com a seguinte mensagem de erro:

2021/09/23 05:58:30 [emerg] 1#1: A diretiva "stream" não é permitida aqui em /etc/nginx/conf.d/blah.conf:1

Como o seu nginx está em execução, só posso presumir que você colocou a configuração no diretório depois de iniciado e não reiniciou ou recarregou o nginx.

OstreamA diretiva deve estar na raiz da configuração, você também precisa fornecer um nginx.conf modificado.

Copie o nginx.conf do seu contêiner:

docker cp test_nginx_1:/etc/nginx/nginx.conf .

Adicione sua configuração lá ou adicione uma segunda diretiva de inclusão com um diretório separado e monte-a também como um volume:

Por exemplo, adicione fora do http {}bloco:

include /etc/nginx/conf.stream.d/*.conf;

Adicione isso ao seu docker-compose.yml

services:
nginx:
    image: nginx
    volumes:
        - ./config/nginx.conf:/etc/nginx/nginx.conf:ro
        - ./config/nginx:/etc/nginx/conf.d:ro
        - ./config/nginx_stream:/etc/nginx/conf.stream.d:ro

execute docker-compose up -de funciona.

informação relacionada