Quiero instalar un servicio web simple para explorar un árbol de directorios de archivos en un servidor interno y, para cumplir con la política de la empresa, debe usar TLS ("https://...").
Primero probé varias imágenes, incluida davralin/nginx-autoindex, y monté el directorio que quiero que comparta este servicio. Funcionó a las mil maravillas, pero no usó una conexión TLS.
Para que algo funcione con TLS, comencé desde cero y creé mi propio archivo default.conf para nginx:
server { listen 443 ssl; listen [::]:443 ssl; server_name localhost; ssl_certificate /etc/ssl/certs/my-cert.crt; ssl_certificate_key /etc/ssl/certs/server.key; location / { root /usr/share/nginx/html; autoindex on; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }Luego creé el siguiente Dockerfile:
FROM nginx:stable-alpine MAINTAINER lsiden at gmail.com COPY default.conf /etc/nginx/conf.d COPY my-cert.crt /etc/ssl/certs/ COPY server.key /etc/ssl/certs/Luego lo construyo:
docker build -t lsiden/nginx-autoindex-tls .Luego lo ejecuto:
docker run -dt -v /var/www/data/files:/usr/share/nginx/html:ro -p 3453:80 lsiden/nginx-autoindex-tlsSin embargo, no puedo alcanzarlo ni siquiera desde la máquina host. Lo intenté:
$ telnet localhost 3453 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host.Traté de leer los mensajes de registro:
docker logs <container-id>Silencio.
Ya confirmé que el proxy docker está escuchando el puerto:
tcp6 0 0 :::3453 :::* LISTEN 14828/docker-proxyEl puerto aparece en tcp6 pero no en "tcp" (ipv4), pero leí aquí que netstat mostrará solo la conexión ipv6 incluso si está disponible en ambos. Para estar seguro, verifiqué:
sudo sysctl net.ipv6.bindv6only net.ipv6.bindv6only = 0Para ser exhaustivo, ya abrí este puerto en iptables, aunque iptables no puede jugar un papel aquí si ni siquiera puedo acceder desde la misma máquina a través de localhost.
Espero que alguien con buenas habilidades para establecer contactos pueda decirme dónde buscar a continuación. No puedo entender lo que me perdí.
En caso de que la configuración que compartió esté completa, no aparecerá en el puerto 80 dentro de su contenedor.
cambie su configuración a algo así en caso de que desee redirigir el tráfico entrante en el puerto 80 al 443:
server { listen 80; listen [::]:80; location / { return 301 https://$server_name$request_uri; } } server { listen 443 ssl; listen [::]:443 ssl; server_name localhost; ssl_certificate /etc/ssl/certs/my-cert.crt; ssl_certificate_key /etc/ssl/certs/server.key; location / { root /usr/share/nginx/html; autoindex on; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } Si no desea hacer esto, simplemente cambie el comando docker run :
docker run -dt -v /var/www/data/files:/usr/share/nginx/html:ro -p 3453:443 lsiden/nginx-autoindex-tls