Mauvais csrf
Dépannage de l’erreur « BAD CSRF » lors de la configuration initiale du site ?
Lee_Ars (Lee_Ars) 1
Mettre en place un nouveau forum Discourse en tant que conteneur docker distinct sur un serveur physique dédié qui exécute déjà un forum Discourse existant (qui bourdonne sans erreur).
L’amorçage fonctionne sans erreur et le message initial « Vous avez installé avec succès Discourse ! » apparaît sans problème, et je peux entrer le nom d’utilisateur et le PW de mon choix sans aucune erreur. Cependant, lors de l’envoi du formulaire, plutôt que d’envoyer l’e-mail d’inscription initial, Discourse affiche une page blanche dans le coin supérieur gauche.
Honnêtement, je ne sais même pas par où commencer pour résoudre ce problème. La recherche ici sur meta n’a pas vraiment donné de résultats qui semblent pertinents.
Des suggestions sur où commencer à chercher ?
pfaffman (Jay Pfaffman) 2
Il s’agit probablement d’un problème avec tout ce qui fait https. Comment est-ce configuré ?
Lee_Ars (Lee_Ars) 3
Il s’agit probablement d’un problème avec tout ce qui fait https. Comment est-ce configuré ?
Le serveur Web héberge 4 domaines et sept sites Web distincts, de sorte que la terminaison SSL universelle est effectuée par HAProxy afin que je puisse garder les couches séparées et fournir une mise en cache même au contenu SSL.
La pile est HAProxy → Varnish (cache) → proxy inverse nginx → Discourse.
Il convient de noter que je n’ai eu aucun problème à configurer le premier forum Discourse dans cette même configuration.
Modifié pour ajouter - les connexions client sont via https, mais je fais un proxy de nginx au port HTTP du conteneur docker, pas HTTPS (encore une fois, je fais ce qui fonctionne pour le premier Instance de discours). Je peux essayer de changer cela pour le port HTTPS pour voir ce qui se passe, cependant, si cela peut aider.
edit^2 - Non, ça n’a pas aidé.
Lee_Ars (Lee_Ars) 4
En regardant à travers le discours et voici ce que je vois :
Je regarde toujours à travers les autres fils de discussion sur meta où est apparu.
Je vois aussi la réponse 403 dans la console de Chrome :
Falco (Falco) 5
Cela se produit lorsque SSL est mal configuré. La plupart du temps, un en-tête est manquant dans la configuration du proxy inverse.
2 Aime
Stephen (Stephen) 6
un en-tête est manquant dans la configuration du proxy inverse
^ ceci - l’en-tête de l’hôte doit rester intact tout au long, sinon le cryptage ne peut pas être établi. Est-ce que tout est basé sur l’IP/port derrière HAProxy ?
Par curiosité, pourquoi utilisez-vous HAProxy devant Varnish puis nginx derrière ?
Lee_Ars (Lee_Ars) 7
C’est exact, et ma première supposition était de m’assurer qu’il était correctement ajouté par le proxy inverse – et c’est le cas. C’est ce qui est ennuyeux ici : la configuration entre le forum de travail et le nouveau forum est identique.
Et quand je dis « identique », je veux dire littéralement en utilisant exactement les mêmes processus et fichiers de configuration Ils sont tous les deux sur le même serveur, donc à part le fichier de configuration nginx, ils utilisent même exactement le même ensemble de fichiers de configuration. Tout est exactement pareil.
La configuration de nginx est assez courte, difficile pour moi de tout gâcher :
les seules différences entre elle et la configuration du forum de travail sont la directive et le port vers lequel je passe.
Stephen (Stephen) 8
Ils sont tous les deux sur le même serveur, donc à part le fichier de configuration nginx, ils utilisent exactement le même ensemble de fichiers de configuration. Tout est exactement pareil.
La configuration de nginx est assez courte, difficile pour moi de la gâcher :
HAProxy utilise-t-il un certificat SAN, ou des adresses IP uniques et des certificats séparés ?
Lee_Ars (Lee_Ars) 9
Par curiosité, pourquoi utilisez-vous HAProxy devant Varnish et ensuite nginx derrière ?
Les objectifs globaux de la configuration étaient de 1) tout chiffrer et 2) tout mettre en cache. Ce sont évidemment des objectifs opposés, donc la façon dont j’ai procédé a été de stratifier les choses : la terminaison SSL d’abord, puis une couche de cache, puis un serveur web Cela sert à la fois à des choses statiques et fonctionne également comme un proxy inverse si nécessaire (pour WordPress, Discourse et quelques autres choses).
Au départ, j’ai eu pas mal de problèmes avec l’approche « sandwich nginx » (nginx → varnish → nginx) - faire fonctionner correctement deux instances distinctes de nginx avec Upstart sur ubuntu 14.04 s’est avéré très difficile et nécessitait beaucoup de manipulation, alors j’ai abandonné nginx comme couche de terminaison ssl et j’ai opté pour haproxy à la place. Si je devais refaire cela maintenant, j’irais avec Hitch, mais pour supprimer haproxy à ce stade, il faudrait faire des recherches sur la façon de faire la transition.
edit :
HAProxy utilise-t-il un certificat SAN, ou des adresses IP uniques et des certificats séparés ?
HAProxy utilise des certificats LetsEncrypt distincts (gérés via acme.sh), un par hôte. Cela se fait principalement parce que le nombre de sites hébergé a changé au fil du temps et la modification/mise à jour d’un seul certificat SAN s’est avérée être un peu pénible. De plus, j’ai quelques sites locataires qui préféreraient garder leurs configurations SSL aussi séparées que possible des miennes.
Stephen (Stephen) 10
faire fonctionner correctement deux instances distinctes de nginx avec Upstart sur ubuntu 14.04 s’est avéré très difficile et a nécessité beaucoup de visibilité
. D’accord, ce ne sont que des sites distincts, bien que dans la même instance de NGINX, c’est une configuration assez courante. En raison de la nature de l’application, Discourse ne répond pas vraiment bien ou n’a pas besoin d’une mise en cache externe, HAProxy ne va vous donner qu’un peu de port-redirection-fu là-bas, que Nginx couvre également.
Falco (Falco) 11
Les seules différences entre celui-ci et la configuration du forum de travail sont la directive et le port vers lequel je passe.
Avez-vous activé dans le deuxième site ?
Lee_Ars (Lee_Ars) 12
Avez-vous activé dans le deuxième site ?
Existe-t-il un moyen simple de le faire via l’édition du fichier de configuration ? Je ne peux pas encore me connecter au nouveau site, je ne peux pas passer l’étape initiale d’enregistrement de l’utilisateur administrateur.
D’accord, ce ne sont que des sites distincts, mais dans le même cas de NGINX, il s’agit d’une configuration assez courante. En raison de la nature de l’application, Discourse ne répond pas vraiment bien ou n’a pas besoin d’une mise en cache externe,
oui, je suis conscient du comportement du cache de Discourse - cette configuration est en ligne depuis un certain nombre d’années. Discourse n’est pas la seule application locataire sur la machine, cependant, donc ses exigences sont ajoutées au mélange avec tout le reste, et à peu près tout le reste sur la boîte est très convivial pour le cache.
Honnêtement, je n’avais pas pensé à faire tout cela avec une seule instance de nginx. C’est certainement une suggestion intéressante, même si j’aurais besoin de m’asseoir et de faire un tableau blanc pour démêler le flux. Connexions initiales sur le port 443 (ou 80 redirigé vers 443), proxy vers varnish, proxy à partir de là vers nginx sur un port différent, je suppose, bien que je sois prudent de m’appuyer sur une seule application pour les trois couches ici. On a l’impression qu’il devient beaucoup plus complexe d’isoler les erreurs et de les corriger.
(Je sais que nginx a un cache utilisable, mais il lui manque la riche fonctionnalité de purge/bannissement de varnish et rend l’invalidation manuelle des objets très pénible.)
Falco (Falco) 13
Existe-t-il un moyen simple de le faire via l’édition du fichier de configuration ? Je ne peux pas encore me connecter au nouveau site, je ne peux pas passer l’étape initiale d’enregistrement de l’utilisateur administrateur.
Stephen :
Cela devrait le faire :
3 J’aime
Lee_Ars (Lee_Ars) 14
Pas de joie - réglé sur true :
J’ai arrêté et redémarré le conteneur docker juste pour être sûr (je ne sais pas si c’est nécessaire ou non, mais j’ai pensé que cela ne pouvait pas faire de mal), mais j’ai toujours reçu la même erreur.
Falco (Falco) 15
Votre configuration est donc la suivante :
HAProxy → Varnish (cache) → proxy inverse nginx → Docker
Et la terminaison SSL se produit chez HAProxy, n’est-ce pas ? La configuration HAProxy est-elle la même pour les deux sites ? Avec la même injection d’en-tête ?
Lee_Ars (Lee_Ars) 16
Et la terminaison SSL se produit chez HAProxy, n’est-ce pas ? La configuration HAProxy est-elle la même pour les deux sites ? Avec la même injection d’en-tête ?
Exactement la même chose : le trafic des deux sites passe par le même haproxy et le même . Ne faisant aucune injection d’en-tête avec haproxy - en fait, j’utilise HAproxy en mode TCP afin de pouvoir passer le trafic via varnish, ce qui me permet d’offrir un HTTP/2 complet à partir du proxy inverse nginx en bas de la pile.
Je fais l’injection d’en-tête de réponse via varnish (hsts, referrer-policy, x-frame-options, x-content-type-options, quelques autres), et je demande l’injection d’en-tête (comme x-forwarded-protocol) avec nginx.
edit - Je comprends tout à fait les limites du support gratuit - si cela doit devenir compliqué, je vais m’y mettre un peu tout seul ce week-end quand j’aurai un peu de temps libre (et plus important encore, un peu de latitude pour casser un peu les choses). J’espérais que ce serait quelque chose de très simple, et c’est peut-être toujours le cas, mais je ne veux pas être pénible.
1 Comme
fais3000 (Fais3000) 17
Pour tous ceux qui se cognent la tête face à ce problème. Veuillez lire ci-dessous.
J’avais un problème similaire. Dans mon cas, nous sommes derrière Cloudflare, puis Nginx et la configuration était pour un forum sur le sous-dossier.
En fin de compte, la combinaison suivante a fonctionné.
- Désactivation de la mise en cache pour le sous-dossier sur Cloudflare
- Suivant le bloc Nginx
2 J’aime
pfaffman (Jay Pfaffman) 18
Content que vous l’ayez compris ! Le site de test était-il également à l’origine de cloudflare ?
1 Comme
fais3000 (Fais3000) 19
L’autre Le site était également sur Cloudflare, mais la mise en cache n’était pas activée. La nouvelle racine du site dispose d’une mise en cache agressive activée via des règles de page, qui s’appliqueraient également aux sous-dossiers, d’où le problème.
Cache du navigateur TTL : un mois, Toujours en ligne : activé, Niveau du cache : Cache Everything, Edge Cache TTL : 2419200 secondes
Je pense également que l’en-tête suivant est également essentiel.
3 J’aime