$ _SERVER ['HTTPS'] = 'को' पर सेट करना wp-admin तक पहुँच को रोकता है


16

सबसे पहले मेरा सर्वर एक लोड बैलेंसर के पीछे बैठा है। मेरा एसएसएल प्रमाणपत्र लोड बैलेंसर पर बैठता है और HTTPS को संभालता है। पोर्ट 443 पर आने वाले डेटा को पोर्ट 80 पर HTTP का उपयोग करके Wordpress सर्वर पर भेजा जाता है।

हालाँकि, वर्डप्रेस और php मेरे सर्वर कॉन्फ़िगरेशन को नहीं जानते हैं। यह ब्राउज़र को मेरे वैध एसएसएल प्रमाणपत्र की वैधता के बारे में संदेह करने का कारण बनता है।

इसे ठीक करने के लिए मैंने निम्न कोड को 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 तर्क जोड़ने से पहले। मैं wp-admin / का उपयोग कर सकता हूं
  • HTTP_X_FORWARDED_PROTO तर्क को फ़ंक्शन में जोड़ने के बाद। मैं wp-admin तक नहीं पहुँच सकता / सकती
  • HTTP_X_FORWARDED_PROTO लॉजिक को फंक्शन्स में हटाने के बाद।

अपडेट करें:

मुझे पता चला है कि त्रुटि संदेश 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 सदाबहार

आपको यह जांचने की आवश्यकता है कि http कुकीज़ को http पर लोड बैलेंसर से भी भेजा गया है। ऐसा लगता है कि उन्हें नहीं भेजा गया है। जाहिर है कि दूसरे तरीके की भी जाँच की जानी चाहिए, क्या आपके द्वारा निर्धारित कुकीज़ https पर हस्तांतरित की जा रही हैं
मार्क कप्लून २४'१६ को ३:४

जवाबों:


19

User42826 के लिए विशेष धन्यवाद।

कोडेक्स के अनुसार:

यदि वर्डप्रेस को एक रिवर्स प्रॉक्सी के पीछे होस्ट किया जाता है जो एसएसएल प्रदान करता है, लेकिन एसएसएल के बिना ही होस्ट किया जाता है, तो ये विकल्प शुरू में एक अप्रत्यक्ष अप्रत्यक्ष लूप में कोई अनुरोध भेज देंगे। इससे बचने के लिए, आप HTTP_X_FORWARDED_PROTO हेडर को पहचानने के लिए वर्डप्रेस को कॉन्फ़िगर कर सकते हैं (यह मानते हुए कि आपने उस हेडर को सेट करने के लिए रिवर्स प्रॉक्सी को ठीक से कॉन्फ़िगर किया है)।

निम्नलिखित क्रियाएं समस्या का समाधान करेंगी।

इसे 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';
}

इसे अनावश्यक रूप से निकालें।

/**
 * 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 एसएसएल कर रहा है लेकिन बैकएंड सादे http है। दूसरों को उद्यम स्तर के आर्किटेक्चर पर काम करते हुए देखकर अच्छा लगा;)
user42826

@ user42826 इस सेटअप के बारे में क्या अच्छा है कि मैं केवल FORCE_SSL_ADMIN टिप्पणी कर सकता हूं यदि मैं व्यवस्थापक पहुंच को प्रतिबंधित करना चाहता हूं, या क्या अन्य दुष्प्रभाव हैं जो मुझे इस सोच की रेखा पर पुनर्विचार करने का कारण बनना चाहिए?
न्यू एवरेस्ट

1
आपके सेटअप में, ऐसा लगता है कि FORCE_SSL_ADMIN सेट न करना एडमिन एक्सेस को रोकता है, लेकिन आपकी आवश्यकताओं के आधार पर ऐसा करने के बेहतर तरीके हैं। उदाहरण: wp-admin या wp-login.php को .htaccess या apache
कॉन्फिगर में जाने से रोकें

6
इस कोड को require_once(ABSPATH . 'wp-settings.php');लाइन से पहले जोड़ना सुनिश्चित करें । इस उत्तर में jtl के लिए विशेष धन्यवाद।
एरोनिनस

@ एरोनिनस धन्यवाद, मैं क्लाउडफ्लेयर लचीले एसएसएल का उपयोग करता हूं और आपकी टिप्पणी के बिना मैंने फिर से खोज करने में समय बिताया होगा। मुझे यह संबंधित प्रश्न पहले मिला: wordpress.stackexchange.com/questions/170165/…
baptx
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.