พร็อกซีย้อนกลับ nginx - ไม่ปิดการเชื่อมต่ออัปสตรีมเมื่อไคลเอ็นต์ HTTPS ยกเลิกการเชื่อมต่อ


0

ฉันมีเซิร์ฟเวอร์ที่ต้องรู้เมื่อลูกค้าปิดการเชื่อมต่อ เซิร์ฟเวอร์อยู่หลังพร็อกซีย้อนกลับ nginx ทุกอย่างทำงานได้ดีผ่าน HTTP แต่ทันทีที่ฉันเปิด SSL ดูเหมือนว่า nginx จะปิดการเชื่อมต่ออัปสตรีมไว้หนึ่งนาทีเต็มหลังจากไคลเอนต์ HTTPS ถูกตัดการเชื่อมต่อ

ฉันจะรับ nginx เพื่อปิดการเชื่อมต่ออัพสตรีมเมื่อไคลเอ็นต์ยกเลิกการเชื่อมต่อได้อย่างไร

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

ssl_session_cache off;
server {
  listen 443;
  ssl on;
  ssl_certificate server.crt;
  ssl_certificate_key server.key;
  location /find {
    proxy_pass http://my_upstream;
    proxy_ignore_client_abort off;
    proxy_buffering off;
  }
}

ลองproxy_ignore_client_abort onดู ป้องกันการยกเลิกการร้องขอไปยังพร็อกซีในกรณีที่ลูกค้ายกเลิกการร้องขอ
ooshro

นั่นเป็นพฤติกรรมที่ฉันไม่ต้องการ ฉันต้องการให้พร็อกซียกเลิกการเชื่อมต่ออัปสตรีมทันทีที่ไคลเอนต์ปิดการเชื่อมต่อ
nornagon

คำตอบ:


2

ค่อนข้างช้า แต่อาจมีประโยชน์สำหรับผู้อื่น ฉันมีปัญหาเดียวกันและกลายเป็นปัญหากับ nginx (ดูhttps://www.ruby-forum.com/topic/4412004 ):

ดังนั้นปัญหาพื้นฐานคือสิ่งที่เป็นนามธรรมของเลเยอร์ nginx stream นั้นไม่สะอาดพอที่จะรองรับเหตุการณ์ OS ระดับต่ำจากนั้นจึงทำการแมปผ่านเลเยอร์ SSL เพื่ออ่าน / เขียน / eof เหตุการณ์เชิงแนวคิดตามต้องการ แต่คุณต้องมีเหตุการณ์ "eof" ระดับ OS ซึ่งคุณจะใช้แผนที่ผ่านเลเยอร์ abstraction SSL กับเหตุการณ์ SSL stream eof

ตกลงดังนั้นฉันได้ดูการจัดการ kqueue eof และสิ่งที่จำเป็นสำหรับการจัดการ epoll eof และสร้างแพทช์ด่วนที่ดูเหมือนว่าจะทำงาน

ฉันใช้โปรแกรมแก้ไขใน 1.4.2 และใช้งานได้! ไม่มีปัญหาจนถึงตอนนี้ หวังว่ามันจะได้รับการแก้ไขในหนึ่งในรุ่นถัดไป

แก้ไข

ดูเหมือนว่าปัญหานี้จะได้รับการแก้ไขด้วยรุ่น nginx> = 1.5.5 :

คุณสมบัติ: ตอนนี้ nginx ใช้เหตุการณ์ EPOLLRDHUP เพื่อตรวจสอบการเชื่อมต่อก่อนวัยอันควรปิดโดยลูกค้าหากใช้วิธี "epoll"

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