
Estoy intentando enviar el tráfico SSH desde nginx (escuchando en el puerto 7999) a un servidor bitbucket (escuchando en el puerto 7998) en el back-end. Tanto nginx como bitbucket se ejecutan dentro de contenedores Docker. Si inicio sesión en el contenedor nginx y telnet bitbucket.domain-name.com 7998
lo hago, se conecta. En la máquina host, si lo hago, netstat -pnlt
obtengo:
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
Pero cuando hago esto en mi computadora: obtengogit 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.
Y cuando lo hago, telnet domain-name.com 7999
lo consigo telnet: Unable to connect to remote host: Connection refused
.
Parece que el problema es que nginx no escucha en el puerto 7999 dentro del contenedor acoplable. Pero puedo ver que el host dockerd
está escuchando en el puerto 7999. Me imagino que es posible que no tenga la configuración de nginx correcta, pero no estoy seguro. Aquí están los bits relevantes de los archivos de configuración.
docker-compose.yaml (nginx)
services:
nginx:
ports:
- "80:8080"
- "443:8443"
- "7999:7997"
nginx.conf (dentro del contenedor nginx)
stream {
server {
listen 7997;
proxy_pass bitbucket1.cybertron.ninja:7998;
}
}
Y aquí hay algunos resultados ejecutados dentro del contenedor 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 -
¿Alguna idea de cómo solucionar este problema? Estoy perplejo.
Respuesta1
Acabo de configurar un entorno de prueba para su caso con la poca información que proporciona. Suponiendo que lo que proporcionó es todo lo que cambió, esto no puede funcionar.
El nginx.conf predeterminado dentro del contenedor oficial de nginx tiene la include
directiva dentro de un http
bloque:
http {
# ...
include /etc/nginx/conf.d/*.conf;
}
Si simplemente coloca su archivo .conf en el directorio conf.d, nginx fallará con el siguiente mensaje de error:
2021/09/23 05:58:30 [emerg] 1#1: La directiva "stream" no está permitida aquí en /etc/nginx/conf.d/blah.conf:1
Dado que su nginx se está ejecutando, solo puedo asumir que colocó la configuración en el directorio después de que se inició y no reinició ni recargó nginx.
Elstream
La directiva debe estar en la raíz de la configuración; también debe proporcionar un nginx.conf modificado.
Copie el nginx.conf de su contenedor:
docker cp test_nginx_1:/etc/nginx/nginx.conf .
Agregue su configuración allí, o agregue una segunda directiva de inclusión con un directorio separado y móntela también como un volumen:
Por ejemplo, agregue fuera del http {}
bloque:
include /etc/nginx/conf.stream.d/*.conf;
Agregue esto a su 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
ejecutar docker-compose up -d
y funciona.