$ _SERVER [ 'HTTPS'] = 'on'을 설정하면 wp-admin에 액세스 할 수 없습니다


16

먼저 내 서버는로드 밸런서 뒤에 있습니다. 내 SSL 인증서는로드 밸런서에 있으며 HTTPS를 처리합니다. 포트 443에서 들어오는 데이터는 포트 80에서 HTTP를 사용하여 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를 '켜짐'으로 유지하고 관리자 액세스를 유지하려면 어떻게합니까?

요약:

  • functions.php에 HTTP_X_FORWARDED_PROTO 로직을 추가하기 전에 wp-admin /에 액세스 할 수 있습니다
  • functions.php에 HTTP_X_FORWARDED_PROTO 로직을 추가 한 후 wp-admin /에 액세스 할 수 없습니다
  • functions.php에 대한 HTTP_X_FORWARDED_PROTO 로직을 제거한 후 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 );
}

여전히이 문제를 해결하는 방법을 이해하지 못합니다.


1
나머지 구성에 대해서는 말하지 않습니다. 설정 했습니까define('FORCE_SSL_ADMIN', true);
user42826

'FORCE_SSL_ADMIN'을 정의하지 않았습니다. 해볼 게요
nu everest

https 쿠키가로드 밸런서에서 http를 통해 전송되는지 확인해야합니다. 전송되지 않은 것 같습니다. 분명히 다른 방법을 확인해야합니다. 설정 한 쿠키가 https를 통해 전송되고 있습니다.
Mark Kaplun

답변:


19

user42826에게 특별 감사합니다.

코덱에 따르면 :

WordPress가 SSL을 제공하는 역방향 프록시 뒤에 호스팅되지만 SSL없이 호스팅되는 경우 이러한 옵션은 처음에 모든 요청을 무한 리디렉션 루프로 보냅니다. 이를 방지하기 위해 HTTP_X_FORWARDED_PROTO 헤더를 인식하도록 WordPress를 구성 할 수 있습니다 (해당 헤더를 설정하도록 리버스 프록시를 올바르게 구성했다고 가정).

다음 조치로 문제점이 해결됩니다.

이것을 wp-config.php에 추가하십시오. ( 코덱 참조 )

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

필요하지 않으므로 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';
}

1
LB가 SSL을 수행하지만 백엔드는 일반 http이므로로드 밸런서 뒤에서 보안 세션 쿠키가 손실되기 때문입니다. 다른 사람들이 엔터프라이즈 급 아키텍처에서 작업하는 것을 보게되어 반갑습니다.;)
user42826

@ user42826이 설정에서 좋은 점은 관리자 액세스를 금지하고 싶거나이 사고 방식을 재고해야하는 다른 부작용이있는 경우 FORCE_SSL_ADMIN을 주석 처리 할 수 ​​있다는 것입니다.
nu everest

1
설정에서 FORCE_SSL_ADMIN을 설정하지 않으면 관리자 액세스가 차단되는 것처럼 들리지만 요구 사항에 따라 더 나은 방법이 있습니다. 예 : .htaccess 또는 apache 구성에서 wp-admin 또는 wp-login.php 액세스 방지, 플러그인을 통해 WP 기본 인증 제거,
wp-

6
이 코드를 require_once(ABSPATH . 'wp-settings.php');줄 앞에 추가하십시오 . 이 답변에서 jtl에 특별한 감사를드립니다.
Aaroninus

@Aaroninus에게 감사드립니다. Cloudflare flexible SSL을 사용하므로 의견이 없으면 다시 검색하는 데 시간을 보냈습니다. 나는이 관련 질문을 이전에 발견했다 : wordpress.stackexchange.com/questions/170165/…
baptx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.