Cloudflare'ın Esnek SSL'sini kullanarak döngüyü yeniden yönlendir


11

Siteme CloudFlare tarafından sağlanan Esnek SSL'yi uygulamaya çalışıyorum.

İşte benim nginx yapılandırma:

# 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...)

Ancak, web sitesine bağlanmaya çalıştığımda (Wordpress), bir yönlendirme döngüsü alıyorum (chrome: ERR_TOO_MANY_REDIRECTS). Bunu önlemek için nginx'i nasıl yapılandırabilirim?

Yanıtlar:


31

Cloudflare'ın esnek SSL'si , cloudflare ile sunucunuz arasındaki bağlantının her zaman http:

bağlantı her zaman http

Bu göz önüne alındığında - alaka düzeyi sorusundaki tek sunucu bloğu şudur:

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

Bunun neden bir yönlendirme döngüsüyle sonuçlandığı açıktır, esnek ssl çözümlerini kullanarak https bağlantılarını zorlamak için 2 çözüm vardır.

Cloudflare sayfa kurallarını kullanma

Eğer sunucuya erişim CloudFlare üzerinden münhasıran size CloudFlare'nın kendi kullanabilirsiniz sayfa kurallarını bir alana, alt alana, ya da herhangi bir URL modeli için yanıtları değiştirmek için:

Cloudflare sayfa kurallarını kullanma

Seçeneklerden biri https'yi zorlamaktır:

Her zaman HTTPS kullan

Ölçek $http_x_forwarded_proto

Sayfa kurallarını kullanmaktan kaçınmak isteyebileceğiniz zamanlar olabilir (yalnızca nadir veya geçişli olmalıdır), bu senaryolar için iletilen protokolü test etmek ve buna göre yeniden yönlendirmek mümkündür:

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
}

Ve https bağlantılarımda bu durumda her şey http üzerinden iletilmiyor gibi hatalar olacak mı?
Deqq

Cloudflare / nginx'in kurulumunun nasıl bir etkisi olmadığını, html içeriği rapor edilen bu tür hataların olup olmadığını belirler.
AD7six

Bu cevabın ilk satırı yanlış: tarayıcı ile CloudFlare arasındaki bağlantı TLS şifreli, CloudFlare ile kaynak sunucu arasındaki bağlantı http. Yönlendirme döngülerine, sayfa kurallarından veya şifreleme türünü yanlış belirten üst düzey ayarlardan kaynaklanabilir - örneğin, gerçekten esnekliğe ihtiyacınız olduğunda dolu.
Tim

Buna yardımcı olan bir eklenti de var: en-nz.wordpress.org/plugins/cloudflare-f Flexible
Tim

6

Bu, bilgisayarınızda geçerli bir SSL sertifikası varsa sorunu çözebilir. [Crypto] kutusunu seçin Full (strict)ve resimdeki gibi seçin . resim açıklamasını buraya girin

Nginx için web sunucusu yapılandırma dosyasını güncellemeye gerek yok.


Tam (katı), yalnızca kaynak web sunucusunun geçerli bir sertifika zincirine sahip geçerli bir SSL sertifikası varsa çalışır. Kendinden imzalı olanlar dahil tüm SSL sertifikalarıyla tam çalışır. Bu soruya iyi bir cevap değil.
Tim

Evet, şimdi görüyorum, soru Esnek sertifikayı belirtti. Geri bildiriminiz sayesinde cevabımı geliştireceğim ve daha spesifik olacağım. Burada bilgi tabanını geliştiriyoruz. SEO perspektifini göz önünde bulundurursak, geçerli bir SSL sertifikası Google için en iyi değere sahiptir. Bunu gönderdikten sonra pişman değilim.
prosti

Esnek / tam / katı SEO için hiçbir fark yaratmaz, bu ayar kaynak sunucuya bağlantı içindir. Cloudflare, sayfayı isteyen herkese paylaşılan bir https sertifikası sunar, kaynağa nasıl bağlandığı büyük ölçüde önemsizdir.
Tim

Sunucuyu varsayarsak gelmez aynı zamanda Sayfa Kurallar yoluyla belirli bir alt alan kapsamına alınabilir notu - geçerli bir SSL sertifika var, bu büyük bir seçenektir (OP belirtmez, ve bir benzeri yapılandırma google ile buraya geldi).
skoczen

Bu, geçerli bir SSL'ye sahip olan benim için çok iyi bir cevap.
Philip

0

AD7six'in yanıtı çok iyi, ancak sayfa kuralları gerektirmeyen daha basit bir çözüm var gibi görünüyor. Bunun önceki yanıtlardan bu yana yeni bir ek olup olmadığından emin değilim, ancak özellikle bu yazıda kesinlikle 3 ücretsiz sayfa kuralı aldığınız göz önüne alındığında, bu soruda mutlaka belgelenmelidir.

Belirli bir alan adı için Esnek SSL etkinse, Cryptosekmeyi aşağı kaydırabilir ve Always use HTTPSseçeneği etkinleştirebilirsiniz . Bu seçenek, yönlendirme döngüsü sorununu sorunsuz bir şekilde çözecektir ( AD7six'in cevabında ayrıntılı olarak açıklanmıştır ).

Cloudflare'ın "Her Zaman HTTPS Kullan" seçeneği

Bu seçeneğin nginx ile çalıştığı onaylanmıştır; ayrıca, Esnek SSL zaten etkinleştirilmiş ve sorunsuz çalışıyorsa, bu seçeneğin çalışmadığı herhangi bir sunucu kurulumu olmamalıdır.


Cloudflare kullanıcı arayüzü değiştiyse (veya yeni seçenekler sunulduysa), rakip bir yanıt oluşturmak yerine mevcut yanıtı düzenlemek daha iyi olur.
AD7six

@ AD7six Bunun eski kullanıcı arayüzüne bir ekleme değil, bunun eski bir yanıtın geçerli olması gerektiği anlamına geldiğine inanıyorum. Bu nedenle, ayrı bir cevap orijinali düzenlemekten daha mantıklı olurdu, değil mi?
Çad

"Bunu uzun zamandır yapmak zorundaydın, ama şimdi bunun için bir düğme var!" yeni bir cevap, hayır :).
AD7six
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.