web-dev-qa-db-de.com

Das Setzen von $ _SERVER ['HTTPS'] = 'on' verhindert den Zugriff auf wp-admin

Zunächst sitzt mein Server hinter einem Load Balancer. Mein SSL-Zertifikat befindet sich auf dem Load Balancer und verarbeitet HTTPS. Die an Port 443 eingehenden Daten werden über HTTP an Port 80 an den Wordpress-Server weitergeleitet.

Allerdings kennen WordPress und PHP meine Serverkonfiguration nicht. Dies führt dazu, dass der Browser hinsichtlich der Gültigkeit meines gültigen SSL-Zertifikats misstrauisch wird.

Um dies zu beheben, habe ich die Datei functions.php um den folgenden Code erweitert. Ich habe diesen Code hier gefunden und der Codex stimmt überein .

/**
 * Make PHP HTTPS aware via HTTP_X_FORWARDED_PROTO
 */
if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS']='on';
}

Dies funktioniert gut für das Frontend, aber jetzt ist der Zugriff auf/wp-admin/auch mit meinem Admin-Account nicht mehr möglich. Nach dem Anmelden erhalte ich die Nachricht "Entschuldigung, Sie dürfen nicht auf diese Seite zugreifen." Es wird keine andere Hilfe bereitgestellt.

Also habe ich den Ordner wp-admin durchsucht und festgestellt, dass die Wörter "Entschuldigung, Sie dürfen nicht auf diese Seite zugreifen." erscheinen 17 verschiedene Male.

Die meisten dieser Fehlermeldungen sind mit einer Überprüfung der Benutzerberechtigungen verbunden.

Wie lasse ich HTTPS aktiviert und behalte den Administratorzugriff?

Zusammenfassung:

  • Bevor ich die HTTP_X_FORWARDED_PROTO-Logik zu functions.php hinzufüge, kann ich auf wp-admin/zugreifen.
  • Nach dem Hinzufügen der HTTP_X_FORWARDED_PROTO-Logik zu functions.php kann ich nicht auf wp-admin/zugreifen.
  • Nach dem Entfernen der HTTP_X_FORWARDED_PROTO-Logik zu functions.php kann ich nicht auf wp-admin/zugreifen.

AKTUALISIEREN:

Ich habe festgestellt, dass die Fehlermeldung von wp-admin/menu.php und diesem Codestück unten kommt. Ich habe menu.php am Ende des Fehlers hinzugefügt, um herauszufinden, dass es sich um diese Datei handelt.

if ( !user_can_access_admin_page() ) {

    /**
     * Fires when access to an admin page is denied.
     *
     * @since 2.5.0
     */
    do_action( 'admin_page_access_denied' );

    wp_die( __( 'Sorry, you are not allowed to access this page. menu.php'), 403 );
}

Ich verstehe immer noch nicht, wie ich das beheben kann.

11
nu everest

Besonderer Dank geht an user42826.

Nach dem Kodex:

Wenn WordPress hinter einem Reverse-Proxy gehostet wird, der SSL bereitstellt, aber selbst ohne SSL gehostet wird, senden diese Optionen zunächst alle Anforderungen an eine Endlosumleitungsschleife. Um dies zu vermeiden, können Sie WordPress so konfigurieren, dass der HTTP_X_FORWARDED_PROTO-Header erkannt wird (vorausgesetzt, Sie haben den Reverse-Proxy richtig konfiguriert, um diesen Header festzulegen).

Die folgenden Aktionen lösen das Problem.

Fügen Sie dies zu wp-config.php hinzu. ( Codex-Referenz )

/* SSL Settings */
define('FORCE_SSL_ADMIN', true);

/* Turn HTTPS 'on' if HTTP_X_FORWARDED_PROTO matches 'https' */
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS'] = 'on';
}

Entfernen Sie dies aus functions.php, da es nicht notwendig ist.

/**
 * Make PHP HTTPS aware via HTTP_X_FORWARDED_PROTO
 */
if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS']='on';
}
15
nu everest