Score:1

nginx - วิธีการบรรลุ "การเปลี่ยนเส้นทางภายใน 307"

ธง in

ฉันไม่แน่ใจว่าจะอธิบายฟังก์ชันการทำงานที่ฉันพยายามทำด้วยวิธีอื่นที่ไม่ใช่ "การเปลี่ยนเส้นทาง 307 ภายใน" ได้อย่างไร

ใช้ nginx's error_page คำสั่งทำให้ nginx เปลี่ยนคำขอ POST เป็นคำขอ GET ในการกำหนดค่าของฉัน พร็อกซี Nginx จะร้องขอไปยังเซิร์ฟเวอร์อัปสตรีมด้วย เปิด proxy_intercept_errors เพื่อให้ฉันสามารถให้บริการหน้าแสดงข้อผิดพลาดจาก nginx

ตัวอย่าง:

error_page 500 502 503 =500 /50x.html;
ตำแหน่ง = /50x.html {
    รูท / บาง / เอกสาร / รูท /;
}

ที่ตั้ง / {
    เปิด proxy_intercept_errors;
    proxy_pass https://ที่ไหนสักแห่ง;
}

ด้วยการกำหนดค่านั้น คำขอ POST ที่ส่งผลให้เกิด 500, 502 หรือ 503 บนพร็อกซีจะ "แอบ" กลายเป็นคำขอ GET ไปยัง URI ดั้งเดิม (/someurl) นี่คือบรรทัดในบันทึก nginx ที่แสดงพฤติกรรมนี้ (ฉันได้เปลี่ยนรูปแบบบันทึกเพื่อแสดง $request_method):

1.2.3.4 - - [27/Sep/2021:10:04:50 -0400] request_method=GET "POST /someurl HTTP/1.1 500 123 "https://domain.tld/someurl"...

คุณจะเห็นว่า nginx เปลี่ยนคำขอ POST เป็นคำขอ GET (อัปเดต: เห็นได้ชัดว่าเป็นเอกสาร nginx สำหรับ error_page บอกตามตรงว่า...)

หลังจากการค้นคว้าบางอย่าง ดูเหมือนว่านี่เป็นพฤติกรรมโดยเจตนาและเป็นผลจากการเปลี่ยนเส้นทางภายใน เห็นได้ชัดว่ารหัสตอบกลับ 307 และ 308 ถูกสร้างขึ้นเนื่องจากลักษณะการทำงานที่คล้ายกัน (แม้ว่าจะอยู่บนไคลเอนต์ ไม่ใช่เซิร์ฟเวอร์)

มีอะไรที่ฉันสามารถทำได้ที่จะมีฟังก์ชันของ "การเปลี่ยนเส้นทาง 307 ภายใน" หรือไม่ เช่น แสดงหน้าแสดงข้อผิดพลาดแต่รักษาวิธีการและเนื้อความคำขอไว้หรือไม่ ตัวอย่างเพื่อความชัดเจน:

ไคลเอนต์โพสต์ไปที่ /someurl เซิร์ฟเวอร์อัปสตรีมตอบสนองด้วย 500 nginx กลืนมันและให้บริการ "/mygreat500errorpage.html" ในขณะที่รักษาวิธีการร้องขอดั้งเดิม (POST) URI คำขอดั้งเดิม (/someurl) และเนื้อหาคำขอดั้งเดิม

อัปเดตในขณะที่ยังเขียนสิ่งนี้: ฉันพบ นี้ คำตอบที่แนะนำให้ใช้บล็อกตำแหน่งที่มีชื่อเพื่อหลีกเลี่ยงการเปลี่ยนวิธีการร้องขอ ดูเหมือนว่าจะใช้งานได้โดยมีข้อยกเว้นว่าฉันไม่สามารถให้บริการ "/mygreat500errorpage.html" จากภายในตำแหน่งที่มีชื่อได้ ฉันไม่แน่ใจว่านี่เป็นวิธีที่ถูกต้องในการแก้ปัญหาหรือไม่ ดังนั้นฉันจะโพสต์คำถามนี้ต่อไป

Michael Hampton avatar
cz flag
ใช่ นั่นคือวิธีการทำ คำตอบที่ฉันจะเขียนจะเหมือนกัน แน่นอนคุณควรระบุ 307 และ URL ของคุณเอง
Brosilio avatar
in flag
@MichaelHampton คำถามนี้ไม่ซ้ำกันเพราะคำตอบของคำถามนั้นใช้งานไม่ได้ หรืออย่างน้อยฉันก็ไม่รู้วิธีนำไปใช้อย่างถูกต้อง
Michael Hampton avatar
cz flag
ไม่มีอะไรในคำถามของคุณเกี่ยวกับปัญหาใด ๆ ที่คุณดำเนินการ โปรดแก้ไขคำถามของคุณเพื่อให้รายละเอียดที่เกี่ยวข้อง
Brosilio avatar
in flag
ปรากฎว่าสิ่งที่ฉันต้องการทำคืออนุญาตคำขอ POST ไปยังไฟล์สแตติกซึ่งไม่ได้รับอนุญาต (เข้าใจได้) อย่างมีประสิทธิภาพ - ลงเอยด้วยการเขียนเว็บเซิร์ฟเวอร์เพื่อยอมรับคำขอ POST ไปยังไฟล์สแตติกและเพียงแค่พร็อกซี error_pages ไปยังผู้ที่ใช้ตำแหน่งที่มีชื่อเหมือนที่คุณแนะนำ .

โพสต์คำตอบ

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