เปลี่ยนเส้นทางการวนซ้ำโดยใช้ ssl ยืดหยุ่นของ cloudflare


11

ฉันกำลังพยายามติดตั้ง SSL แบบยืดหยุ่นที่ CloudFlare จัดเตรียมให้กับเว็บไซต์ของฉัน

นี่คือการกำหนดค่า nginx ของฉัน:

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

อย่างไรก็ตามเมื่อฉันพยายามเชื่อมต่อกับเว็บไซต์ (Wordpress) ฉันจะได้รับการวนรอบการเปลี่ยนเส้นทาง (chrome: 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;
}

มันควรจะชัดเจนว่าทำไมผลลัพธ์ในการวนรอบการเปลี่ยนเส้นทางมี 2 โซลูชันเพื่อบังคับให้เชื่อมต่อ https โดยใช้โซลูชัน ssl ที่ยืดหยุ่นของพวกเขา

ใช้กฎหน้าของ Cloudflare

หากการเข้าถึงเซิร์ฟเวอร์นั้นผ่าน cloudflare โดยเฉพาะคุณสามารถใช้กฎหน้าของ cloudflare เพื่อแก้ไขการตอบกลับสำหรับโดเมนโดเมนย่อยหรือรูปแบบ URL ใด ๆ :

การใช้กฎหน้าของ 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 ในกรณีนี้
Deqq

วิธีที่คุณติดตั้ง cloudflare / nginx ไม่มีผลกระทบต่อเนื้อหา html จะพิจารณาว่ามีรายงานข้อผิดพลาดดังกล่าวหรือไม่
AD7six

บรรทัดแรกของคำตอบนี้ไม่ถูกต้อง: การเชื่อมต่อระหว่างเบราว์เซอร์และ CloudFlare เป็น TLS เข้ารหัสการเชื่อมต่อจาก CloudFlare ไปยังเซิร์ฟเวอร์ต้นทางคือ http ลูปการเปลี่ยนเส้นทางอาจเกิดจากกฎของเพจหรือการตั้งค่าระดับสูงที่ระบุประเภทการเข้ารหัสไม่ถูกต้อง - เช่นเต็มเมื่อคุณต้องการความยืดหยุ่น
ทิม

นอกจากนี้ยังมีปลั๊กอินที่ช่วยในเรื่องนี้: en-nz.wordpress.org/plugins/cloudflare-flexible-ssl
Tim

6

วิธีนี้สามารถแก้ไขปัญหาได้หากคุณมีใบรับรอง SSL ที่ถูกต้อง [Crypto] กล่องและเลือกFull (strict)ดังภาพ ป้อนคำอธิบายรูปภาพที่นี่

ไม่จำเป็นต้องอัพเดทไฟล์กำหนดค่าเว็บเซิร์ฟเวอร์สำหรับ Nginx


เต็ม (เข้มงวด) ใช้ได้เฉพาะเมื่อเว็บเซิร์ฟเวอร์ต้นทางมีใบรับรอง SSL ที่ถูกต้องพร้อมสายใบรับรองที่ถูกต้อง ทำงานได้อย่างสมบูรณ์กับใบรับรอง SSL ใด ๆ รวมถึงลงชื่อด้วยตนเอง นี่ไม่ใช่คำตอบที่ดีสำหรับคำถาม
ทิม

ใช่ฉันเห็นแล้วคำถามพูดถึงใบรับรองที่ยืดหยุ่น ฉันจะปรับปรุงคำตอบของฉันด้วยคำติชมของคุณและจะเจาะจงมากขึ้น เรากำลังปรับปรุงฐานความรู้ที่นี่ ใบรับรอง SSL ที่ถูกต้องมีค่าที่ดีที่สุดสำหรับ Google ถ้าเราพิจารณามุมมองของ SEO ฉันไม่เสียใจหลังจากโพสต์ข้อความนี้
prosti

ยืดหยุ่น / เต็ม / เข้มงวดทำให้ SEO แตกต่างกันไปการตั้งค่านั้นใช้สำหรับการเชื่อมต่อกับเซิร์ฟเวอร์ต้นทาง Cloudflare แสดงใบรับรอง https ที่แชร์ให้กับใครก็ตามที่ร้องขอหน้าเว็บการเชื่อมต่อไปยังจุดเริ่มต้นนั้นไม่เกี่ยวข้องมาก
ทิม

สมมติว่าเซิร์ฟเวอร์ไม่มีใบรับรอง SSL ที่ถูกต้อง (OP ไม่ได้ระบุและผมมาที่นี่ผ่านทาง Google การตั้งค่าที่คล้ายกัน) นี้เป็นตัวเลือกที่ดี - โน้ตก็ยังสามารถกำหนดขอบเขตการย่อยโดยเฉพาะอย่างยิ่งผ่านทางหน้ากฎ
skoczen

นี่เป็นคำตอบที่ดีมากสำหรับฉันที่มี SSL ที่ถูกต้อง
ฟิลิป

0

คำตอบของ AD7six นั้นดีมากแม้ว่ามันจะมีวิธีแก้ปัญหาที่ง่ายกว่าซึ่งไม่จำเป็นต้องมีกฎของหน้า ฉันไม่แน่ใจว่านี่เป็นส่วนเพิ่มเติมใหม่ตั้งแต่คำตอบก่อนหน้า แต่แน่นอนควรมีการบันทึกไว้ในคำถามนี้โดยเฉพาะอย่างยิ่งเนื่องจากคุณจะได้รับ 3 หน้าฟรีกฎกับ Cloudflare ในขณะที่เขียน

เมื่อคุณเปิด SSL ยืดหยุ่นสำหรับโดเมนที่กำหนดคุณสามารถเลื่อนลงบนCryptoแท็บและเปิดใช้งานAlways use HTTPSตัวเลือก ตัวเลือกนี้จะแก้ปัญหาการวนรอบการเปลี่ยนเส้นทางได้อย่างราบรื่น (อธิบายอย่างละเอียดในคำตอบของ AD7six )

ตัวเลือก "ใช้ HTTPS" ของ Cloudflare เสมอ

ตัวเลือกนี้ได้รับการยืนยันการทำงานกับ nginx; นอกจากนี้ไม่ควรมีการตั้งค่าเซิร์ฟเวอร์ใด ๆ ที่ตัวเลือกนี้ใช้งานไม่ได้โดยที่ SSL แบบยืดหยุ่นนั้นเปิดใช้งานแล้วและทำงานได้โดยไม่มีปัญหา


หาก UI ของ Cloudflare มีการเปลี่ยนแปลง (หรือมีตัวเลือกใหม่ให้) มันจะเป็นการดีกว่าที่จะแก้ไขคำตอบที่มีอยู่แทนที่จะสร้างคำตอบที่แข่งขันกัน
AD7six

@ AD7six ฉันเชื่อว่านี่เป็นส่วนเพิ่มเติมของ UI เก่าไม่ใช่การแทนที่ซึ่งหมายความว่าคำตอบเดิมยังคงใช้ได้ ดังนั้นคำตอบที่แยกต่างหากจะมีเหตุผลมากกว่าการแก้ไขต้นฉบับมันจะไม่ใช่หรือ?
ชาด

ฉันไม่คิดว่า "คุณเคยต้องทำแบบนี้มานาน แต่ตอนนี้มีปุ่มสำหรับมัน!" เป็นคำตอบใหม่ไม่ใช่ :)
AD7six
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.