Problèmes avec force https, proxy et invitations

Mon instance Discourse est derrière 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; # géré par Certbot
    ssl_certificate /etc/letsencrypt/live/forum.[...]/fullchain.pem; # géré par Certbot
    ssl_certificate_key /etc/letsencrypt/live/forum.[...]/privkey.pem; # géré par Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # géré par Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # géré par Certbot

}
server {
    if ($host = forum.[...]) {
        return 301 https://$host$request_uri;
    } # géré par Certbot

    server_name forum.smbcn.org;

    listen 80;
    return 404; # géré par Certbot

}

Ce qui redirige vers le serveur où Discourse est installé (installation Docker standard) :

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;
        }
}

Lorsque je force le HTTPS, les utilisateurs invités ne peuvent pas procéder à l’inscription. Les journaux du navigateur affichent une erreur 403 (mauvais CSRF), bien qu’un jeton CSRF ait été généré avec succès. Les invitations fonctionnent parfaitement lorsque le HTTPS n’est pas forcé.

Je suppose qu’il y a un problème avec la manière dont je relaie les requêtes HTTPS vers HTTP, peut-être certains en-têtes manquants ?

1 « J'aime »

Il semble que je rate quelque chose d’important. L’incapacité de forcer HTTPS signifie que le logo ne peut pas être affiché (ce qui n’est pas très grave pour l’instant). J’ai découvert aujourd’hui que je rencontre également une erreur liée au CSRF (« forbidden ») lorsque j’essaie de supprimer une tâche dans Sidekiq. Voici ce que j’ai trouvé dans /var/discourse/shared/standalone/log/rails/unicorn.stderr.log :

WARN – : attaque empêchée par Rack::Protection::HttpOrigin

Je me sens assez démuni, toute aide serait grandement appréciée.

1 « J'aime »

Peut-être devez-vous simplement activer le forçage du HTTPS sur votre proxy frontal et le désactiver sur Discourse.

@hawm Je pense que voici ma configuration actuelle.

Comment définissez-vous la variable $scheme ?

3 « J'aime »

Je ne le fais pas, je suppose que je me fie à la valeur par défaut. Est-ce une erreur ?

Si vous utilisez un proxy, cela peut poser problème. D’après mon expérience, c’est la raison numéro 1 des problèmes que vous décrivez. Essayez de le définir sur « https » à la place (peut-être simplement en ignorant la variable et en écrivant directement « https »).

2 « J'aime »

@michaeld oui ! Tu as tout à fait raison ! Merci beaucoup !

1 « J'aime »

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