Сначала мой сервер сидит за балансировщиком нагрузки. Мой SSL-сертификат находится на балансировщике нагрузки и обрабатывает HTTPS. Данные, поступающие на порт 443, перенаправляются на сервер Wordpress с использованием HTTP на порт 80.
Тем не менее, WordPress и PHP не знают конфигурацию моего сервера. Это заставляет браузер с подозрением относиться к действительности моего действующего SSL-сертификата.
Чтобы исправить это, я добавил следующий код в functions.php. Я нашел этот код здесь, и кодекс согласен .
/**
* 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';
}
Это прекрасно работает для внешнего интерфейса, но теперь / wp-admin / недоступен даже для моей учетной записи администратора. После входа в систему я получаю сообщение «Извините, у вас нет доступа к этой странице». Никакой другой помощи не предоставляется.
Поэтому я поискал в папке wp-admin и обнаружил, что слова «Извините, у вас нет доступа к этой странице». появляются 17 разных времен.
Большинство из этих сообщений об ошибках связаны с проверкой прав доступа пользователя.
Как мне оставить HTTPS включенным и сохранить доступ администратора?
Резюме:
- Перед добавлением логики HTTP_X_FORWARDED_PROTO в functions.php я могу получить доступ к wp-admin /
- После добавления логики HTTP_X_FORWARDED_PROTO в functions.php я не могу получить доступ к wp-admin /
- После удаления логики HTTP_X_FORWARDED_PROTO для functions.php я не могу получить доступ к wp-admin /
ОБНОВИТЬ:
Я обнаружил, что сообщение об ошибке исходит из wp-admin / menu.php и этого фрагмента кода внизу. Я добавил menu.php
в конец ошибки, чтобы выяснить, что это был за файл.
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 );
}
Я до сих пор не понимаю, как это исправить.
define('FORCE_SSL_ADMIN', true);