Problemas con force https, proxy e invitaciones

Mi instancia de Discourse está detrás de un proxy:

server {
    server_name forum.[...];

    location / {
        proxy_pass http://IP_ADDRESS;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect off;

    }

    client_max_body_size 10m;

    listen 443 ssl; # gestionado por Certbot
    ssl_certificate /etc/letsencrypt/live/forum.[...]/fullchain.pem; # gestionado por Certbot
    ssl_certificate_key /etc/letsencrypt/live/forum.[...]/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 = forum.[...]) {
        return 301 https://$host$request_uri;
    } # gestionado por Certbot

    server_name forum.smbcn.org;

    listen 80;
    return 404; # gestionado por Certbot

}

Lo que conecta con el servidor donde está instalado Discourse (instalación estándar con Docker):

server {
        listen 80; listen [::]:80;
        server_name forum.[...];

        client_max_body_size 10m;

        location / {
                proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
                proxy_set_header Host $http_host;
                proxy_http_version 1.1;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;
        }
}

Cuando obligo a usar HTTPS, los usuarios invitados no pueden continuar con el registro. Los registros del navegador muestran un error 403 (CSRF incorrecto), aunque se generó correctamente un token CSRF. Las invitaciones funcionan perfectamente cuando no se fuerza HTTPS.

Supongo que hay algo mal en la forma en que proxio las solicitudes HTTPS a HTTP, quizás faltan algunos encabezados.

1 me gusta

Parece que me estoy perdiendo algo importante. La imposibilidad de forzar HTTPS implica que el logotipo no se puede mostrar (no es algo muy grave por ahora). Hoy he descubierto que también recibo un error relacionado con CSRF (

1 me gusta

Tal vez solo necesites forzar la activación de HTTPS en tu proxy frontal y desactivarla en Discourse.

@hawm Creo que esta es mi configuración actual.

¿Cómo estás estableciendo la variable $scheme?

3 Me gusta

No lo hago; supongo que confío en el valor predeterminado. ¿Es eso incorrecto?

Si estás usando un proxy, esto puede fallar. En mi experiencia, esta es la razón número uno de los problemas que describes. Intenta configurarlo como “https” en su lugar (quizás simplemente omitas la variable y pongas directamente “https” allí).

2 Me gusta

@michaeld ¡Sí! ¡Lo has clavado! ¡Muchas gracias!

1 me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.