क्लाउडफ्लेयर के लचीले ssl का उपयोग करके लूप को पुनर्निर्देशित करें


11

मैं अपनी साइट पर CloudFlare द्वारा प्रदान लचीले SSL को लागू करने का प्रयास कर रहा हूं।

यहाँ मेरा nginx config है:

# PHP-FPM upstream; change it accordingly to your local config!
upstream php-fpm {
    server 127.0.0.1:9000;
}

server {
    listen         80;
    server_name    example.com www.example.com;
    return         301 https://$server_name$request_uri;
}

server {
    ## Listen ports
    listen 443;

    # use _ if you want to accept everything, or replace _ with domain
    server_name example.com www.example.com;

    location / {
      #proxy_set_header        X-Forwarded-Proto $scheme;
      proxy_set_header X_FORWARDED_PROTO https;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header  Host $http_host;
      proxy_set_header  X-Url-Scheme $scheme;
      proxy_redirect    off;
      proxy_max_temp_file_size 0;
    }

(...rest of config...)

हालाँकि, जब मैं वेबसाइट (वर्डप्रेस) से जुड़ने की कोशिश करता हूं, तो मुझे एक रीडायरेक्ट लूप (क्रोम: ERR_TOO_MANY_REDIRECTS) मिलता है। मैं इसे रोकने के लिए nginx को कैसे कॉन्फ़िगर करूं?

जवाबों:


31

Cloudflare के लचीले ssl का अर्थ है कि Cloudflare और आपके सर्वर के बीच का संबंध हमेशा http पर होता है:

कनेक्शन हमेशा http है

इसे देखते हुए - प्रासंगिकता के सवाल में एकमात्र सर्वर ब्लॉक यह है:

server {
   listen         80;
   server_name    example.com www.example.com;
   return         301 https://$server_name$request_uri;
}

यह स्पष्ट होना चाहिए कि क्यों एक पुनर्निर्देशित लूप के परिणामस्वरूप, उनके लचीले एसएसएल समाधान का उपयोग करके https कनेक्शन को मजबूर करने के लिए 2 समाधान हैं।

Cloudflare के पेज नियमों का उपयोग करें

यदि सर्वर तक पहुँच विशिष्ट रूप से क्लाउडफ़ेयर के माध्यम से है तो आप डोमेन, सबडोमेन, या किसी यूआरएल पैटर्न के लिए प्रतिक्रियाओं को संशोधित करने के लिए क्लाउडफेयर के अपने पेज के नियमों का उपयोग कर सकते हैं :

क्लाउडफ़ेयर के पृष्ठ नियमों का उपयोग करना

विकल्पों में से एक https को मजबूर करना है:

हमेशा HTTPS का उपयोग करें

परीक्षा $http_x_forwarded_proto

कई बार आप पृष्ठ नियमों का उपयोग करने से बचना चाहते हैं (केवल दुर्लभ या संक्रमणकालीन होना चाहिए), इन परिदृश्यों के लिए यह संभव है कि अग्रेषित प्रोटोकॉल का परीक्षण किया जाए और उसके आधार पर पुनर्निर्देशित किया जाए:

server {
   listen         80;
   server_name    example.com www.example.com;

   if ($http_x_forwarded_proto = "http") {
     return 301 https://$server_name$request_uri;
   }

   ... directives to generate a response
}

और क्या मेरे https कनेक्शन में त्रुटियां होंगी जैसे कि इस मामले में http पर सब कुछ प्रसारित नहीं होता है?
डेक्क

आप क्लाउडफ़ेयर / nginx को कैसे सेटअप करते हैं, इस पर कोई असर नहीं पड़ता है, HTML सामग्री यह निर्धारित करेगी कि क्या ऐसी त्रुटियां बताई गई हैं।
AD7six

इस उत्तर की पहली पंक्ति गलत है: ब्राउज़र और CloudFlare के बीच संबंध TLS एन्क्रिप्टेड है, CloudFlare से मूल सर्वर से कनेक्शन http है। रीडायरेक्ट लूप पृष्ठ नियमों या उच्च स्तर की सेटिंग के कारण हो सकते हैं जो एन्क्रिप्शन प्रकार को गलत तरीके से निर्दिष्ट करते हैं - जैसे कि पूर्ण जब आपको वास्तव में लचीलेपन की आवश्यकता होती है।
टिम

वहाँ भी एक प्लगइन है कि इस के साथ मदद करता है: en-nz.wordpress.org/plugins/cloudflare-flexible-ssl
Tim

6

यदि आपके पास वैध SSL प्रमाणपत्र है, तो यह समस्या को ठीक कर सकता है। [क्रिप्टो] बॉक्स और Full (strict)छवि के रूप में चयन करें । यहाँ छवि विवरण दर्ज करें

वास्तव में Nginx के लिए वेब सर्वर कॉन्फ़िगरेशन फ़ाइल को अपडेट करने की आवश्यकता नहीं है।


पूर्ण (सख्त) केवल तभी काम करता है जब मूल वेब सर्वर के पास वैध प्रमाणपत्र श्रृंखला के साथ एक वैध एसएसएल प्रमाणपत्र है। पूर्ण हस्ताक्षर सहित किसी भी एसएसएल प्रमाणपत्र के साथ काम करता है। यह सवाल का अच्छा जवाब नहीं है।
टिम

हां, अब मैं देख रहा हूं, प्रश्न में लचीले प्रमाण पत्र का उल्लेख है। मैं आपकी प्रतिक्रिया के लिए अपने उत्तर को बेहतर बनाऊंगा और मैं और अधिक विशिष्ट हो जाऊंगा। हम यहां ज्ञान के आधार में सुधार कर रहे हैं। यदि हम SEO परिप्रेक्ष्य पर विचार करें तो एक मान्य SSL प्रमाणपत्र Google के लिए सर्वोत्तम मूल्य है। मुझे यह पोस्ट करने के बाद पछतावा नहीं है।
प्रोस्टि

लचीले / पूर्ण / सख्त से एसईओ पर कोई फर्क नहीं पड़ता है, यह सेटिंग मूल सर्वर से कनेक्शन के लिए है। Cloudflare एक साझा https प्रमाणपत्र प्रस्तुत करता है, जो भी पृष्ठ का अनुरोध करता है, वह मूल से कैसे जुड़ता है यह काफी हद तक अप्रासंगिक है।
टिम

सर्वर मानते हुए है एक वैध SSL प्रमाणपत्र है (ओ पी निर्दिष्ट नहीं करता, और मैं यहाँ एक समान config गूगल के माध्यम से आया था), यह एक बढ़िया विकल्प है - टिप्पणी यह भी पृष्ठ नियमों के माध्यम से किसी खास उप डोमेन के दायरे वाला जा सकता है।
स्कॉकजेन

यह मेरे लिए एक सुपर अच्छा जवाब है जिसके पास एक वैध एसएसएल था।
फिलिप

0

AD7six का उत्तर बहुत अच्छा है, हालांकि ऐसा प्रतीत होता है कि एक सरल समाधान है जिसे पृष्ठ नियमों की आवश्यकता नहीं है। मुझे यकीन नहीं है कि यह पिछले उत्तरों के बाद से एक नया जोड़ है, लेकिन यह निश्चित रूप से इस सवाल पर प्रलेखित किया जाना चाहिए, विशेष रूप से यह देखते हुए कि आपको लेखन के समय क्लाउडफेयर के साथ केवल 3 मुफ्त पृष्ठ नियम मिलते हैं।

जब आपने फ्लेक्सिबल एसएसएल को किसी दिए गए डोमेन के लिए चालू किया है, तो आप Cryptoटैब को नीचे स्क्रॉल कर सकते हैं और Always use HTTPSविकल्प को सक्षम कर सकते हैं । यह विकल्प मूल रूप से अनुप्रेषित लूप मुद्दे ( AD7six के उत्तर में अच्छी तरह से समझाया गया है ) को हल करेगा ।

Cloudflare का "ऑलवेज यूज़ HTTPS" विकल्प

यह विकल्प नगनेक्स के साथ काम करने की पुष्टि करता है; इसके अलावा, कोई सर्वर सेटअप नहीं होना चाहिए जहां यह विकल्प काम नहीं करता है, बशर्ते कि फ्लेक्सिबल एसएसएल पहले से ही सक्षम हो और बिना किसी समस्या के काम करता हो।


यदि क्लाउडफ्लेयर का यूआई बदल गया है (या नए विकल्प उपलब्ध कराए गए हैं) तो एक प्रतिस्पर्धी बनाने के बजाय मौजूदा उत्तर को संपादित करना बेहतर होगा।
AD7six

@ AD7six मेरा मानना ​​है कि यह पुरानी UI के अतिरिक्त है, प्रतिस्थापन नहीं है, जिसका अर्थ है कि पुराना उत्तर अभी भी मान्य होना चाहिए। इसलिए मूल को संपादित करने की तुलना में एक अलग उत्तर अधिक तार्किक होगा, क्या यह नहीं होगा?
चाड

मुझे नहीं लगता कि "आपको इसे लंबे समय तक चक्कर लगाना पड़ता था, लेकिन अब इसके लिए एक बटन है!" एक नया उत्तर है, नहीं :)।
AD7six
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.