วิธีการปิดการใช้งานการหมดเวลาสำหรับ nginx?


46

บนเครื่องพัฒนาท้องถิ่นฉันมีพร็อกซีย้อนกลับ nginxดังนี้:

server {
  listen 80;
  server_name myvirtualhost1.local;
  location / {
    proxy_pass http://127.0.0.1:8080;
}

server {
  listen 80;
  server_name myvirtualhost2.local;
  location / {
    proxy_pass http://127.0.0.1:9090;
}

แต่ถ้าฉันดีบั๊กแอปพลิเคชันของฉันการตอบสนองอาจล่าช้าเป็นระยะเวลาไม่ จำกัด แต่หลังจาก 30 วินาทีที่ฉันได้รับ:

504 Gateway Time-out

เป็นการตอบสนอง

ฉันจะปิดการใช้งานการหมดเวลาและให้ reverse proxy รอตลอดไปเพื่อตอบกลับได้อย่างไร และฉันชอบการตั้งค่าให้เป็นโกลบอลดังนั้นฉันไม่จำเป็นต้องตั้งค่าสำหรับแต่ละพร็อกซี


1
พิจารณาเริ่มงานพื้นหลังและให้ผู้ใช้ตรวจสอบสถานะในภายหลัง
Michael Hampton

คำตอบ:


60

อาจเป็นไปไม่ได้ที่จะปิดการใช้งานเลย แต่วิธีแก้ปัญหาที่เป็นไปได้คือการเพิ่มเวลาดำเนินการ บนไซต์การสอนของ nginxมันถูกเขียนขึ้น:

หากคุณต้องการเพิ่มการ จำกัด เวลาสำหรับทุกไซต์บนเซิร์ฟเวอร์ของคุณคุณสามารถแก้ไขnginx.confไฟล์หลัก:

vim /etc/nginx/nginx.conf

เพิ่มการติดตามในส่วน http {.. }

http {
     fastcgi_read_timeout 300;
     proxy_read_timeout 300;
}

และโหลดการกำหนดค่า nginx 'ใหม่:

sudo service nginx reload

ฉันใช้ค่าที่ค่อนข้างใหญ่ซึ่งไม่น่าจะเกิดขึ้นนั่นคือ999999หรือใช้หน่วยเวลาเป็นเวลาหนึ่งวันผ่าน1dไป

ระวังว่าการตั้งค่าที่0จะทำให้เกิดข้อผิดพลาดการหมดเวลาเกตเวย์ทันที


3
เรียนผู้ลงคะแนนสุ่มความคิดเห็นเกี่ยวกับสิ่งที่ไม่ดีเกี่ยวกับการฝึกนี้จะดี
k0pernikus

7
@kb มันตลกดีที่ฉันเป็น OP และเพิ่งโพสต์วิธีแก้ปัญหาที่ใช้งานได้ดีที่สุดในขณะที่รอคำตอบจริง ๆ ^^
k0pernikus

2
ฮ่าฮ่าฉันพลาดไปเลยว่าเธอเป็นโอพี แต่คำตอบของคุณคือคำตอบที่ถูกต้องคุณสามารถทำให้ชัดเจนยิ่งขึ้น (สำหรับ googler ในอนาคตอย่างฉัน) ว่าไม่มีทางปิดการใช้งาน =)
kb

5
ขอบคุณสำหรับข้อมูลเกี่ยวกับการ0ไม่ทำงาน! โปรดทราบว่าคุณสามารถระบุหน่วยเวลาที่มีคำต่อท้ายอ่าน1dเพื่อให้คุณสามารถใช้ค่าเช่น
ชื่อจริง Redacted

3
ฉันได้เพิ่มproxy_connect_timeout 600;ทั้งนั้นและไปยังไฟล์ nginx.conf แต่การหมดเวลายังคงอยู่ใน 60 วินาที มีอะไรอีกบ้างที่ฉันควรลอง
andreszs

9

หากคุณใช้ AWS และ Load Balancer คุณควรแก้ไขการหมดเวลาใช้งาน ฉันคิดว่าค่าเริ่มต้นคือ 60 วินาที


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

@ doz87 ใช่มันเป็นเพียงบางสิ่งบางอย่างเพื่อการพิจารณา
szeljic

นี่คือการตรวจสอบที่คุ้มค่าโดยเฉพาะอย่างยิ่งในกรณีของฉันที่ทำงานกับ Magento ภายใต้ AWS Good point @szeljic
vnpnlz

ขอบคุณครับมันใช้ได้กับฉันตั้งแต่ฉันใช้ตัวโหลดบาลานซ์ AWS เพื่อแจกจ่ายให้กับอินสแตนซ์ EC2 ของฉัน
VũThànhTâm

สิ่งนี้สมควรได้รับการ
อัปโหลด

4

ฉันได้ต่อสู้กับข้อผิดพลาดการหมดเวลา nginx 502 และไม่สามารถแก้ไขปัญหาได้ อย่างไรก็ตามมันเกิดขึ้นกับ gunicorn ที่ทำให้เกิดข้อผิดพลาดการหมดเวลา ดังนั้นคุณอาจต้องตรวจสอบการตั้งค่า fastcgi ของคุณ

สำหรับ gunicorn มัน:

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