ฉันมีแบ็กเอนด์ที่อยู่เบื้องหลัง haproxy ที่สตรีมไฟล์ไปยังไคลเอนต์โดยใช้สคริปต์ CGI ฉันกำลังพยายามตั้งค่าการหมดเวลาสำหรับเซิร์ฟเวอร์ส่วนหลังของฉัน ทุกอย่างทำงานได้ดียกเว้นการหมดเวลานี้
เมื่อฉันตั้งค่าตัวเลือก "timeout server" ใน haproxy config เป็น 1 วินาที (เพียงเพื่อทดสอบ - แบ็กเอนด์ใช้เวลาอย่างน้อย 2-3 วินาที) และทำการร้องขอ หลังจาก 1 วินาที มันจะใส่รายการลงในไฟล์บันทึกสำหรับ คำขอแบ็กเอนด์ (ก่อนที่คำขอจะเสร็จสมบูรณ์) และจากนั้น คำขอจะหยุดทำงานตลอดไป ลูกค้าไม่ได้รับการตอบกลับ ไม่มีข้อผิดพลาด ไม่มีอะไร
ฉันได้ตรวจสอบเอกสารทั้งหมดสำหรับการกำหนดค่า haproxy แล้วและไม่พบตัวเลือกการหมดเวลาที่เหมาะสมที่นี่ แต่ดูเหมือนว่าเป็นพฤติกรรมเริ่มต้นที่แปลกมากที่จะหยุดทำงานตลอดไปหากหมดเวลาโดยไม่มีการตอบสนองอย่างสมบูรณ์ (ตั้งแต่ฉันรู้ว่าการตั้งค่าควรเป็นการหมดเวลาสำหรับส่วนหัวเท่านั้น - แต่ฉันไม่สามารถหาการตั้งค่าการหมดเวลาอื่นได้ สำหรับแบ็กเอนด์)
haproxy ไม่รองรับการตอบสนอง HTTP แบบสตรีมใด ๆ หรือไม่ ฉันเข้าใจว่าเราไม่สามารถส่งส่วนหัวได้ แต่ฉันสามารถตั้งค่าให้ส่งข้อมูลที่มีเพื่อให้ไคลเอ็นต์จับได้ว่ามีรูปแบบไม่ถูกต้องได้หรือไม่
นี่คือบรรทัดบันทึกสำหรับหนึ่งในคำขอเหล่านี้ที่ "หมดเวลา":
28 เม.ย. 09:32:51 น. พิมพ์ haproxy[29896]: 127.0.0.1:37662 [28/Apr/2022:09:32:47.317] http_front http_back/SERVERNAME 2/3007/23/46/4080 200 150 - - sD- - 1/1/0/0/+3 0/0 "โพสต์ / HTTP/1.1"
การกำหนดค่า haproxy แบบเต็ม:
ทั่วโลก
บันทึก /dev/log local0.log
บันทึก /dev/log local1 ประกาศ
chroot /var/lib/haproxy
ซ็อกเก็ตสถิติ /run/haproxy/admin.sock โหมด 660 ระดับผู้ดูแลระบบ expose-fd ผู้ฟัง
หมดเวลาสถิติ 30 วินาที
ผู้ใช้แฮพร็อกซี
กลุ่ม haproxy
ภูต
# ตำแหน่งวัสดุ SSL เริ่มต้น
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# ดู: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA -CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
ค่าเริ่มต้น
เข้าสู่ระบบทั่วโลก
โหมด http
ตัวเลือก httplog
ตัวเลือก dontlognull
ตัวเลือกการจัดส่งซ้ำ
ลองใหม่ 3
หมดเวลาคิว 15m # ลูกค้าควรรอนานแค่ไหนเพื่อให้เซิร์ฟเวอร์พร้อมใช้งาน
#แม็กซ์คอน10000
หมดเวลาลูกค้า 15m
หมดเวลาเชื่อมต่อ 1 วินาที
เซิร์ฟเวอร์หมดเวลา 10 วินาที
เซสชันจำกัดอัตรา 10,000
ไฟล์ข้อผิดพลาด 400 /etc/haproxy/errors/400.http
ไฟล์ข้อผิดพลาด 403 /etc/haproxy/errors/403.http
ไฟล์ข้อผิดพลาด 408 /etc/haproxy/errors/408.http
ไฟล์ข้อผิดพลาด 500 /etc/haproxy/errors/500.http
ไฟล์ข้อผิดพลาด 502 /etc/haproxy/errors/502.http
ไฟล์ข้อผิดพลาด 503 /etc/haproxy/errors/503.http
ไฟล์ข้อผิดพลาด 504 /etc/haproxy/errors/504.http
ส่วนหน้า http_front
ผูก *:88
สถิติ uri /haproxy?stats
default_backend http_back
#แม็กซ์คอน10000
แบ็กเอนด์ http_back
ยอดคงเหลือน้อยที่สุด
ลองใหม่ทั้งหมดลองใหม่ข้อผิดพลาด
เซิร์ฟเวอร์เริ่มต้น maxconn 1 สังเกตข้อผิดพลาด layer7-limit 1 on-error-mark-down
เซิร์ฟเวอร์ NAME IP:PORT