Error 403 al cambiar cualquier configuración después de habilitar force_https con proxy

Hola a todos: tengo un problema. Cuando activo la opción force_https (después de asegurarme de que todo esté en HTTPS), no puedo:

  • cambiar ninguna configuración,
  • cerrar sesión (hacer clic en «Cerrar sesión» no hace nada),
  • ni iniciar sesión (la redirección de SSO simplemente me lleva a la página de inicio como si estuviera desconectado).

Pensé que era una anomalía o algo que había roto inicialmente, así que destruí la aplicación, eliminé todos los datos y la volví a crear/iniciar.

Con la nueva aplicación, todo funcionaba perfectamente de nuevo; pude restaurar desde copias de seguridad, configurar todos mis logotipos, ajustar diversas configuraciones (cambiar la configuración de notificaciones por correo electrónico, modificar el título, personalizar el CSS del tema, etc.), no hubo errores de SSL y las imágenes de marca se cargaron correctamente.

Sin embargo, tan pronto como volví a activar la opción force_https, los errores 403 reaparecieron.

Esta vez, entré en el contenedor y desactivé la opción force_https mediante la CLI, usando:

/var/discourse/launcher enter app
rails c
SiteSetting.force_https = false

En cuanto desactivé la opción, todo en el sitio volvió a funcionar correctamente.

Intenté revisar los registros (site_url.com/logs), pero no parecía haber mucho allí, excepto:

Error: Forbidden
Url: https://site_url.com/assets/ember_jquery-1d5617356dd43f27b8adbf60ccb854a1f5992b9b9f9e51e32ea7287fc9eeb25b.js
Line: 1
Column: 262166
Window Location: https://site_url.com/admin/plugins/chat/discord

lo cual correspondía a un momento anterior cuando estaba cambiando algunas configuraciones del plugin discourse-chat-integration.

No sé qué hacer a continuación y agradecería cualquier sugerencia.

¿Estás detrás de algún proxy extraño?

Lo estoy ejecutando en un servidor con otra aplicación PHP, por lo que estoy usando un proxy_pass de Nginx; mi configuración de nginx:

server {
  server_name site_url;
  client_max_body_size 500m;

  location / {
      proxy_pass http://127.0.0.1:8080;
  }

    listen 443 ssl; # gestionado por Certbot
    ssl_certificate /etc/letsencrypt/live/site_url/fullchain.pem; # gestionado por Certbot
    ssl_certificate_key /etc/letsencrypt/live/site_url/privkey.pem; # gestionado por Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # gestionado por Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionado por Certbot

}
server {
    if ($host = site_url) {
        return 301 https://$host$request_uri;
    } # gestionado por Certbot


  listen 80;
  server_name site_url;
    return 404; # gestionado por Certbot
}

Creo que no estás pasando el HTTPS correctamente. Busca soluciones aquí.

Olvidé completamente configurar las cabeceras del proxy; agregué las cabeceras que faltaban y ahora todo funciona correctamente.

¡Gracias!

Por si alguien se encuentra con este problema, estas son las cabeceras de proxy_pass que me faltaban:

proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;