Está apagado. X-Forwarded-Proto está en mi bloque de servidor. Por lo tanto, el único elemento (o elementos) que no estoy utilizando, según los enlaces que todos han compartido, es este:
# plantillas base utilizadas; se puede reducir para incluir menos funcionalidad por plantillas de contenedor: # - "templates/cron.template.yml" # cron ahora está incluido en la imagen base - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/sshd.template.yml" - "templates/web.template.yml" # - "templates/web.ssl.template.yml" # eliminar - https será manejado por nginx externo - "templates/web.ratelimited.template.yml" - "templates/web.socketed.template.yml" # <-- Agregado # ¿qué puertos exponer? # expose: comentar toda la sección
Cargué el sitio en 3 navegadores (Edge, Firefox y Chrome móvil) y obtuve un certificado perfectamente válido como anónimo. ¿Cuáles son tus pasos para reproducir esto?
El infierno no se desató aquí. Un problema potencial es que tus correos electrónicos aún contienen el enlace http://. Sin embargo, fui redirigido correctamente al sitio https para activar mi cuenta y no veo ningún error relacionado con SSL aquí.
Eso es donde te equivocas. Si la opción forzar HTTPS está habilitada, Discourse debe enviar todos los enlaces como HTTPS. Cada enlace relacionado con el foro debe cargarse a través de HTTPS. Si sigues haciendo cosas extrañas y no lo haces de la manera sugerida, tendrás que arreglártelas solo. No podemos ayudar más allá de los procedimientos estándar que funcionan.
Eso no tiene mucho sentido para mí. Si lo desglosamos lógicamente, en esencia estoy haciendo exactamente lo que está destinado a hacer force-https, pero con el bloque del servidor.
force_https no es simplemente una reescritura; internamente hace más que eso. Si quieres que se resuelvan tus problemas, ya se ha proporcionado una solución. Si rechazas la solución, siéntete libre de tomar el asunto en tus propias manos y explorar nuevas vías.
Eso se debe a tu proxy inverso inestable. Tendrás que averiguar qué está mal y hacerlo de la manera correcta. No podemos brindar asistencia con tus propias soluciones.
Todas las “soluciones” que se han presentado no se ajustan a mi caso de uso específico:
Servidor remoto (dentro de la misma red) – Creo que todos los ejemplos asumen que Nginx se ejecuta en el mismo servidor que Discourse; yo estoy utilizando proxy_pass para acceder a otra IP interna.
¿Por qué he hecho esto? Mayor seguridad y dispersión de recursos. Es la misma razón por la que separo los servicios de dos maneras: mediante contenedores y máquinas virtuales. La documentación sugerida parece favorecer un escenario donde todos los servicios se ejecutan en el mismo servidor.
Imagino que las condiciones descritas anteriormente son bastante comunes. Si alguna de ellas puede utilizarse para acomodar una condición de proxy_pass, estaré más que dispuesto a ajustar mis configuraciones en consecuencia. Solo siento que ofrecer una declaración general de “usted se las arregla solo” porque estoy tratando de evitar un escenario de “poner todos los huevos en la misma cesta” es un poco injustificado.
Esa es tu preferencia; lo escribí como ejemplo. También puedes optar por exponer el puerto 80.
No hay beneficio ni sentido en habilitar SSL en una red local.
Eso debe existir.
server {
listen 80;
server_name discourse.example.com;
return 301 https://example.com$request_uri;
}
Eso es exactamente lo que está ocurriendo: estás reenviando todas las solicitudes recibidas por tu proxy/ingress a un backend interno en el puerto 8080 (es decir, Discourse).
Ya se respondió en el punto #1: fue una preferencia personal. Siéntete libre de usar el puerto que más te guste.
Específicamente no necesitas nada relacionado con sockets o SSL en el servidor interno. SSL debe terminarse correctamente en el proxy inverso.
Nota: la mayor parte es una preferencia personal basada en la implementación para clientes.
El comportamiento que estoy experimentando ocurre bajo las condiciones mencionadas anteriormente.
El inicio de app.yml se ve así:
## este es la plantilla de contenedor Docker Discourse todo-en-uno, independiente ## ## Después de realizar cambios en este archivo, DEBES reconstruir ## /var/discourse/launcher rebuild app ## ## ¡TEN *MUCHO* CUIDADO AL EDITAR! ## ¡LOS ARCHIVOS YAML SON SUPER SENSIBLES A ERRORES EN ESPACIOS EN BLANCO O ALINEACIÓN! ## visita http://www.yamllint.com/ para validar este archivo según sea necesario
templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" - "templates/web.ratelimited.template.yml" ## Descomenta estas dos líneas si deseas agregar Lets Encrypt (https) #- "templates/web.ssl.template.yml" #- "templates/web.letsencrypt.ssl.template.yml"
## ¿Qué puertos TCP/IP debe exponer este contenedor? ## Si deseas que Discourse comparta un puerto con otro servidor web como Apache o nginx, ## consulta https://meta.discourse.org/t/17247 para obtener detalles expose: - "80:80" # http - "443:443" # https
## Establece db_shared_buffers en un máximo del 25% de la memoria total. ## se establecerá automáticamente durante el arranque según la RAM detectada, o puedes sobrescribirlo db_shared_buffers: "1024MB"
## puede mejorar el rendimiento de ordenamiento, pero aumenta el uso de memoria por conexión #db_work_mem: "40MB"
## ¿Qué revisión de Git debe usar este contenedor? (predeterminado: tests-passed) #version: tests-passed