web-dev-qa-db-fra.com

La définition de $ _SERVER ['HTTPS'] = 'on' permet à wp-admin

Tout d'abord, mon serveur est assis derrière un équilibreur de charge. Mon certificat SSL se trouve sur l'équilibreur de charge et gère HTTPS. Les données arrivant sur le port 443 sont transférées au serveur Wordpress via HTTP sur le port 80.

Cependant, wordpress et php ne connaissent pas la configuration de mon serveur. Cela provoque la méfiance du navigateur quant à la validité de mon certificat SSL valide.

Pour résoudre ce problème, j'ai ajouté le code suivant à functions.php. J'ai trouvé ce code ici et le codex est d'accord .

/**
 * 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';
}

Cela fonctionne très bien pour le front-end, mais maintenant/wp-admin/est inaccessible même avec mon compte administrateur. Une fois connecté, je reçois un message intitulé "Désolé, vous n'êtes pas autorisé à accéder à cette page". Aucune autre aide n'est fournie.

J'ai donc cherché dans le dossier wp-admin et découvert que les mots "Désolé, vous n'êtes pas autorisé à accéder à cette page". apparaissent 17 fois différents.

La plupart de ces messages d'erreur sont associés à une vérification des autorisations de l'utilisateur.

Comment garder HTTPS 'activé' et conserver l'accès administrateur?

Résumé:

  • Avant d'ajouter la logique HTTP_X_FORWARDED_PROTO à functions.php, je peux accéder à wp-admin /
  • Après avoir ajouté la logique HTTP_X_FORWARDED_PROTO à functions.php, je ne peux pas accéder à wp-admin /
  • Après avoir supprimé la logique HTTP_X_FORWARDED_PROTO dans functions.php, je ne peux pas accéder à wp-admin /

METTRE À JOUR:

J'ai découvert que le message d'erreur venait de wp-admin/menu.php et de cette partie de code en bas. J'ai ajouté menu.php à la fin de l'erreur pour comprendre qu'il s'agissait de ce fichier.

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

Je ne comprends toujours pas comment résoudre ce problème.

11
nu everest

Un merci spécial à user42826.

Selon le codex:

Si WordPress est hébergé derrière un proxy inverse qui fournit SSL, mais est lui-même hébergé sans SSL, ces options enverront initialement les demandes dans une boucle de redirection infinie. Pour éviter cela, vous pouvez configurer WordPress pour qu'il reconnaisse l'en-tête HTTP_X_FORWARDED_PROTO (en supposant que vous ayez correctement configuré le proxy inverse pour définir cet en-tête).

Les actions suivantes vont résoudre le problème.

Ajoutez ceci à wp-config.php. ( référence du codex )

/* 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';
}

Supprimez cela du fichier functions.php car il est inutile.

/**
 * 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