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.