403-Fehler beim Ändern beliebiger Einstellungen nach Aktivieren von force_https mit Proxy

Hallo zusammen, ich habe ein Problem: Wenn ich die Option force_https aktiviere (nachdem ich sichergestellt habe, dass alles über HTTPS läuft), kann ich Folgendes nicht mehr tun:

  • Einstellungen ändern,
  • mich abmelden (ein Klick auf Abmelden bewirkt nichts),
  • oder mich anmelden (die SSO-Weiterleitung führt nur zur abgemeldeten Startseite).

Ich dachte zunächst, es handele sich um einen Zufall oder um einen Fehler, den ich verursacht hatte. Deshalb habe ich die App zerstört, alle Daten gelöscht und die App neu aufgesetzt.

Bei der neuen App funktionierte wieder alles einwandfrei: Ich konnte aus Backups wiederherstellen, alle Logos konfigurieren, verschiedene Einstellungen anpassen (E-Mail-Benachrichtigungseinstellungen ändern, Titel anpassen, Theme-CSS anpassen usw.). Es gab keine SSL-Fehler und Markenbilder wurden korrekt geladen.

Sobald ich jedoch erneut die Option force_https aktiviert habe, traten wieder alle 403-Fehler auf.

Dieses Mal bin ich in den Container gegangen und habe die Option force_https über die CLI deaktiviert, und zwar mit:

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

Sobald ich die Option deaktiviert habe, funktionierte wieder alles auf der Seite.

Ich habe die Logs durchsucht (site_url.com/logs), aber dort schien nichts weiter enthalten zu sein als:

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

Dieser Eintrag stammte aus einer früheren Zeit, als ich Einstellungen für das Plugin discourse-chat-integration geändert hatte.

Ich bin mir nicht sicher, wie es weitergehen soll, und wäre für jeden Hinweis dankbar.

Bist du hinter irgendwelchen seltsamen Proxies?

Ich führe es auf einem Server mit einer anderen PHP-Anwendung aus, daher verwende ich einen Nginx-Proxy-Pass; meine Nginx-Konfiguration:

server {
  server_name site_url;
  client_max_body_size 500m;

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

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

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


  listen 80;
  server_name site_url;
    return 404; # verwaltet von Certbot
}

Ich glaube, Sie leiten HTTPS nicht korrekt weiter. Suchen Sie hier nach Lösungen.

Habe völlig vergessen, die Proxy-Header zu setzen. Die fehlenden Header wurden hinzugefügt, und nun funktioniert alles einwandfrei.

Vielen Dank!

Falls jemand auf dieses Problem stößt, hier sind die Proxy-Pass-Header, die mir fehlten:

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;