L'impostazione di $ _SERVER ['HTTPS'] = 'on' impedisce l'accesso a wp-admin


16

Prima di tutto il mio server è seduto dietro un bilanciamento del carico. Il mio certificato SSL si trova sul bilanciamento del carico e gestisce HTTPS. I dati che arrivano sulla porta 443 vengono inoltrati al server Wordpress usando HTTP sulla porta 80.

Tuttavia, wordpress e php non conoscono la configurazione del mio server. Questo fa sì che il browser diventi sospettoso sulla validità del mio certificato SSL valido.

Per risolvere questo problema, ho aggiunto il seguente codice a Functions.php. Ho trovato questo codice qui e il codice è d'accordo .

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

Funziona benissimo per il frontend, ma ora / wp-admin / è inaccessibile anche con il mio account Admin. Dopo aver effettuato l'accesso, ricevo un messaggio "Spiacenti, non puoi accedere a questa pagina". Nessun altro aiuto è fornito.

Così ho cercato nella cartella wp-admin e ho scoperto che le parole "Mi dispiace, non ti è permesso accedere a questa pagina". compaiono 17 volte diverse.

La maggior parte di questi messaggi di errore sono associati a un controllo delle autorizzazioni utente.

Come posso mantenere HTTPS "attivo" e conservare l'accesso come amministratore?

Sommario:

  • Prima di aggiungere la logica HTTP_X_FORWARDED_PROTO a Functions.php posso accedere a wp-admin /
  • Dopo aver aggiunto la logica HTTP_X_FORWARDED_PROTO a Functions.php non riesco ad accedere a wp-admin /
  • Dopo aver rimosso la logica HTTP_X_FORWARDED_PROTO in Functions.php non riesco ad accedere a wp-admin /

AGGIORNARE:

Ho scoperto che il messaggio di errore proviene da wp-admin / menu.php e da questo pezzo di codice in fondo. Ho aggiunto menu.phpalla fine dell'errore per capire che si trattava di questo file.

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

Non capisco ancora come risolvere questo problema.


1
Non dici molto sul resto della tua configurazione. Hai impostatodefine('FORCE_SSL_ADMIN', true);
user42826 il

Non ho definito "FORCE_SSL_ADMIN". Lo proverò.
nu everest,

è necessario verificare che i cookie https vengano inviati anche dal bilanciamento del carico su http. Sembra che non vengano inviati. Ovviamente anche il contrario deve essere verificato, i cookie che imposti vengono trasferiti su https
Mark Kaplun il

Risposte:


19

Un ringraziamento speciale a user42826.

Secondo il codice:

Se WordPress è ospitato dietro un proxy inverso che fornisce SSL, ma è ospitato senza SSL, queste opzioni inizialmente invieranno qualsiasi richiesta in un ciclo di reindirizzamento infinito. Per evitare ciò, è possibile configurare WordPress in modo che riconosca l'intestazione HTTP_X_FORWARDED_PROTO (presupponendo che sia stato configurato correttamente il proxy inverso per impostare tale intestazione).

Le seguenti azioni risolveranno il problema.

Aggiungi questo a wp-config.php. ( riferimento codice )

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

Rimuovere questo da Functions.php in quanto non è necessario.

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

1
Il motivo è che i cookie delle sessioni sicure si perdono quando dietro il bilanciamento del carico perché LB sta eseguendo SSL ma il back-end è semplice http. Bello vedere altri lavorare su architetture di livello enterprise;)
user42826

@ user42826 La cosa bella di questa configurazione è che posso semplicemente commentare FORCE_SSL_ADMIN se voglio vietare l'accesso all'amministratore o ci sono altri effetti collaterali che dovrebbero indurmi a riconsiderare questa linea di pensiero?
nu everest,

1
Nella tua configurazione, sembra che non impostare FORCE_SSL_ADMIN impedisca l'accesso dell'amministratore, ma ci sono modi migliori per farlo a seconda delle tue esigenze. Esempi: impedire l'accesso a wp-admin o wp-login.php in .htaccess o in apache config, rimuovere l'autenticazione nativa WP tramite plug-in, riprogrammare WP in modo che l'URL wp-admin sia diverso
dall'URL

6
Assicurati di aggiungere questo codice prima della require_once(ABSPATH . 'wp-settings.php');riga. Un ringraziamento speciale a jtl in questa risposta.
Aaronino

@Aaroninus grazie, utilizzo Cloudflare SSL flessibile e senza il tuo commento mi sarei dedicato del tempo alla ricerca. Ho trovato questa domanda correlata in precedenza: wordpress.stackexchange.com/questions/170165/…
baptx
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.