$ _SERVER ['HTTPS'] = 'on' ayarının yapılması wp-admin'e erişimi engeller


16

İlk sunucum bir yük dengeleyici arkasında oturuyor. SSL sertifikam yük dengeleyicisinde oturuyor ve HTTPS kullanıyor. 443 numaralı bağlantı noktasına gelen veriler 80 numaralı bağlantı noktasındaki HTTP kullanılarak Wordpress sunucusuna iletilir.

Ancak, wordpress ve php sunucu yapılandırmamı bilmiyor. Bu, tarayıcının geçerli SSL sertifikamın geçerliliği hakkında şüphelenmesine neden olur.

Bunu düzeltmek için function.php dosyasına aşağıdaki kodu ekledim. Bu kodu burada buldum ve kodeks kabul ediyor .

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

Bu ön uç için harika çalışıyor, ancak şimdi / wp-admin / Yönetici hesabımda bile erişilemiyor. Giriş yaptıktan sonra "Maalesef bu sayfaya erişim izniniz yok" şeklinde bir mesaj alıyorum. Başka yardım sağlanmamaktadır.

Bu yüzden wp-admin klasörünü aradım ve "Üzgünüm, bu sayfaya erişmenize izin verilmiyor" kelimelerini keşfettim. 17 farklı kez görünür.

Bu hata iletilerinin çoğu bir kullanıcı izin denetimi ile ilişkilidir.

HTTPS'yi 'açık' halde nasıl tutabilirim ve yönetici erişimini nasıl koruyabilirim?

Özet:

  • Function.php'ye HTTP_X_FORWARDED_PROTO mantığı eklemeden önce wp-admin /
  • Function.php'ye HTTP_X_FORWARDED_PROTO mantığı ekledikten sonra wp-admin /
  • Function.php HTTP_X_FORWARDED_PROTO mantığını kaldırdıktan sonra wp-admin /

GÜNCELLEME:

Hata mesajının wp-admin / menu.php'den geldiğini ve alttaki kod yığınını keşfettim. menu.phpBu dosya olduğunu anlamak için hatanın sonuna ekledim .

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

Bunu nasıl düzeltebileceğimi hala anlamıyorum.


1
Yapılandırmanızın geri kalanı hakkında fazla bir şey söylemezsiniz. Set define('FORCE_SSL_ADMIN', true);
yaptınız

'FORCE_SSL_ADMIN' tanımlayamadım. Deneyeceğim.
nu everest

https çerezlerinin ayrıca yük dengeleyiciden http üzerinden gönderildiğini kontrol etmeniz gerekir. Gönderilmiyor gibi geliyor. Açıkçası, diğer yolların da kontrol edilmesi gerekiyor, ayarladığınız çerezler https üzerinden aktarılıyor
Mark Kaplun

Yanıtlar:


19

Kullanıcı 422826'ya özel teşekkürler.

Kodeksine göre:

WordPress, SSL sağlayan bir ters proxy'nin arkasında barındırılıyor, ancak kendisini SSL olmadan barındırıyorsa, bu seçenekler başlangıçta herhangi bir isteği sonsuz bir yönlendirme döngüsüne gönderir. Bundan kaçınmak için, WordPress'i HTTP_X_FORWARDED_PROTO üstbilgisini tanıyacak şekilde yapılandırabilirsiniz (bu üstbilgiyi ayarlamak için ters proxy'yi doğru şekilde yapılandırdığınız varsayılarak).

Aşağıdaki işlemler sorunu çözecektir.

Bunu wp-config.php dosyasına ekleyin. ( kodeks referansı )

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

Gerekmediği için function.php dosyasından kaldırın.

/**
 * 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
Bunun nedeni, LB SSL yapıyor ancak arka uç düz http olduğu için yük dengeleyicinin arkasındayken güvenli oturum çerezlerinin kaybolmasıdır. Kurumsal düzeyde mimariler üzerinde çalışan başkalarını görmek güzel;)
user42826

@ user42826 Bu kurulumla ilgili güzel olan şey, yönetici erişimini yasaklamak istersem FORCE_SSL_ADMIN'e yorum yapabilmem veya bu düşünme hattını yeniden düşünmeme neden olacak başka yan etkiler var mı?
nu everest

1
Kurulumunuzda, FORCE_SSL_ADMIN ayarının yapılmaması yönetici erişimini önler, ancak gereksinimlerinize bağlı olarak bunu yapmanın daha iyi yolları vardır. Örnekler: .htaccess veya apache config'te wp-admin veya wp-login.php erişimini engelleyin, eklenti aracılığıyla WP yerel kimlik doğrulamasını kaldırın, wp-admin url'si genel
URL'den

6
Bu kodu require_once(ABSPATH . 'wp-settings.php');satırdan önce eklediğinizden emin olun . Bu cevapta jtl'ye özel teşekkürler.
Aaroninus

@Aaroninus teşekkürler, Cloudflare esnek SSL kullanıyorum ve yorumunuz olmadan tekrar aramak için zaman harcayacağım. Bu soruyu daha önce buldum: wordpress.stackexchange.com/questions/170165/…
baptx
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.