Ich stagiere Wordpress- und Discourse-Sites (selbst gehostet) mit dem WP-Discourse-Plugin.
Ich habe erfolgreich die HTTP Basic Authentication auf beiden Sites aktiviert, damit sie nicht zugänglich sind, bis sie öffentlich geschaltet werden (wodurch der Zugriff durch die allgemeine Öffentlichkeit sowie Suchmaschinen effektiv blockiert wird).
Wordpress (informativ für Leute, die etwas Ähnliches erreichen wollen)
.htpasswd-Datei mit einem Benutzer und entsprechendem Passwort erstellt
Authentifizierungsabschnitt zu .htaccess hinzugefügt
Konfiguration neu erstellen: /var/discourse# ./launcher rebuild app
Das WP-Discourse-Plugin funktioniert gut, bis die Basic Authentication auf dem Discourse-Server aktiviert ist.
(Bearbeiten) Dies ist der Fehler im Log des WP-Discourse-Plugins auf der Wordpress-Seite: [2025-02-14 18:20:06] connection.INFO: check_connection_status.failed_to_connect {\"error\":\"wpdc_response_error\",\"message\":\"An invalid response was returned from Discourse\",\"http_code\":401,\"http_body\":\"\u003chtml\u003e\\r\\n\u003chead\u003e\u003ctitle\u003e401 Authorization Required\u003c/title\u003e\u003c/head\u003e\\r\\n\u003cbody\u003e\\r\\n\u003ccenter\u003e\u003ch1\u003e401 Authorization Required\u003c/h1\u003e\u003c/center\u003e\\r\\n\u003chr\u003e\u003ccenter\u003enginx\u003c/center\u003e\\r\\n\u003c/body\u003e\\r\\n\u003c/html\u003e\\r\\n\"}
Irgendwelche Gedanken, wie man APIs von der Anforderung der HTTP Basic Authentication auf Discourse ausschließen kann?
Hast du das wirklich? Ich bin mir nicht ganz sicher, ob Discourse hinter der Basisauthentifizierung funktioniert; ich habe es einmal versucht, aber aufgegeben. Es scheint sogar noch wahrscheinlicher, dass es wp-discourse kaputt macht (oh, und ich hatte damit Recht!). Wenn du erfolgreich gewesen wärst, würdest du diese Nachricht nicht schreiben.
Für Discourse-Staging-Sites setze ich normalerweise einfach “Login erforderlich” und das hält Suchmaschinen fern. Jemand mit einem Login kann sich immer noch anmelden, aber das ist normalerweise das, was du willst.
Wenn es inakzeptabel ist, dass deine Websites für jedermann zugänglich sind, solltest du vielleicht eine Firewall verwenden und den Zugriff auf deine IP beschränken.
Danke, dieser Hinweis hat mir geholfen, das Problem zu lösen. Hier ist der aktualisierte Abschnitt für die Basisauthentifizierung von app.yml auf meinem Discourse-Server (es waren keine Änderungen am WordPress-Server erforderlich):
# Basisauthentifizierung
after_bundle_exec:
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: "# Allow bypass cache from localhost"
to: |
# Erlaube die Umgehung der Basisauthentifizierung für das WP-Discourse-Plugin
geo $authentication {
default "Credentials you must provide.";
127.0.0.1 "off";
151.101.3.55/32 "off";
}
# Erlaube die Umgehung des Caches von localhost
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: "# auth_basic on"
to: "auth_basic $authentication"
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: "# auth_basic_user_file /etc/nginx/htpasswd"
to: "auth_basic_user_file /etc/nginx/htpasswd"
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: "location = /srv/status {"
to: "location = /srv/status {
auth_basic off;"
- file:
path: "/etc/nginx/htpasswd"
contents: |
alfred:$apr1$jSdLuHyZ$faWxYGjnmLd/zRC6UMsRs1
151.101.3.55 ist die (Beispiel-)öffentliche IP-Adresse meines WordPress-Servers. WP-Discourse meldet nun: