Score:0

ทำให้ nginx เปลี่ยนเส้นทางไปยัง HTTPS แม้จะมี regex ตำแหน่งที่แข่งขันกัน

ธง cn

ฉันมีการกำหนดค่าต่อไปนี้ภายใน nginx เซิร์ฟเวอร์ {...} บล็อก:

ที่ตั้ง /someapp { 
  ถ้า ( $https != "เปิด" ) { 
    ส่งคืน 301 https://$server_name$request_uri;
  } 

  ตำแหน่ง ~ \.php$ { 
    รวมตัวอย่าง/fastcgi-php.conf;
    fastcgi_pass ยูนิกซ์:/var/run/php/php-fpm.sock;
  } 
} 

ปัญหาคือ:

  • เมื่อฉันเข้าถึง http://example.com/someapp/somefile.html (หรือแค่ /someapp) ฉันถูกเปลี่ยนเส้นทางไปที่ HTTPS
  • แต่เมื่อฉันเข้าถึง http://example.com/someapp/somefile.phpฉันไม่ได้เปลี่ยนเส้นทางไปยัง HTTPS

โดยวิธีการนี้สอดคล้องกับ เอกสารที่พูดว่า:

หากต้องการค้นหาตำแหน่งที่ตรงกับคำขอที่กำหนด ก่อนอื่น nginx จะตรวจสอบตำแหน่งที่กำหนดโดยใช้สตริงคำนำหน้า (ตำแหน่งคำนำหน้า) ในหมู่พวกเขา สถานที่ที่มีคำนำหน้าตรงกันยาวที่สุดจะถูกเลือกและจดจำไว้ จากนั้นจะตรวจสอบนิพจน์ทั่วไปตามลำดับที่ปรากฏในไฟล์การกำหนดค่า การค้นหานิพจน์ทั่วไปจะสิ้นสุดลงในการจับคู่ครั้งแรก และจะใช้การกำหนดค่าที่เกี่ยวข้อง หากไม่พบการจับคู่กับนิพจน์ทั่วไป ระบบจะใช้การกำหนดค่าของตำแหน่งคำนำหน้าที่จดจำไว้ก่อนหน้านี้

ดังนั้นเมื่อ ตำแหน่ง ~ \.php$ คือการแข่งขัน ที่ตั้ง/someapp จะถูกเพิกเฉย แม้ว่าจะเป็นคำขอก็ตาม .../someapp/somefile.php.

มี ตำแหน่ง ~ \.php$ {...} ปิดกั้นภายนอกพาเรนต์ ตำแหน่ง /someapp {...} บล็อกไม่เปลี่ยนพฤติกรรมนี้

ฉันจะเปลี่ยนเส้นทาง HTTP ทุกคำขอไปยัง HTTPS ได้อย่างไร /someapp ปราศจาก ต้องทำซ้ำ ถ้า และ กลับ บรรทัดลงในบล็อกตำแหน่ง php?

us flag
โปรดเพิ่มการกำหนดค่า nginx ที่สมบูรณ์ให้กับคำถามตามที่แสดงโดยคำสั่ง `nginx -T`
cn flag
@TeroKilkanen ฉันไม่สามารถเพิ่มข้อมูลมากมายเพื่อจุดประสงค์ในการรักษาความลับได้ ฉันได้เพิ่มส่วนย่อยของ nginx doc ซึ่งทำให้ลักษณะของปัญหาของฉันชัดเจนยิ่งขึ้น ฉันหวังว่า
djdomi avatar
za flag
totor คุณเคยคิดที่จะแทนที่โดเมนจริงหรือ ips ด้วย example.com หรือไม่
us flag
หากไม่มีบริบทที่ใหญ่กว่า ก็เป็นไปไม่ได้ที่จะเสนอแนวทางแก้ไขปัญหาที่ดี
Score:3
ธง za

ข้อเสนอแนะของฉันจะเป็น

เซิร์ฟเวอร์ {
       
        ชื่อเซิร์ฟเวอร์ example.com *.example.com;
        ฟัง 80;
        ฟัง [::]:80;
        ส่งคืน 301 https://$host$request_uri;
}

สิ่งนี้จะสร้างเซิร์ฟเวอร์พื้นฐานสำหรับพอร์ต 80 และบอกให้เบราว์เซอร์ใช้ 443 อย่างถาวร

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา