2009-02-18 29 views
188

Tôi đang chạy Django, FastCGI và Nginx. Tôi đang tạo ra một api của các loại mà một người nào đó có thể gửi một số dữ liệu thông qua XML mà tôi sẽ xử lý và sau đó trả lại một số mã trạng thái cho mỗi nút đã được gửi qua.Làm cách nào để ngăn Thời gian chờ Cổng với FastCGI trên Nginx

Vấn đề là Nginx sẽ hủy bỏ thời gian chờ của Cổng 504 nếu tôi mất quá nhiều thời gian để xử lý XML - tôi nghĩ lâu hơn 60 giây.

Vì vậy, tôi muốn thiết lập Nginx để nếu có bất kỳ yêu cầu nào phù hợp với vị trí/api sẽ không hết thời gian trong 120 giây. Cài đặt nào sẽ thực hiện điều đó.

Những gì tôi có cho đến nay là:

# Handles all api calls 
    location ^~ /api/ { 
     proxy_read_timeout 120; 
     proxy_connect_timeout 120; 
     fastcgi_pass 127.0.0.1:8080; 
    } 

Edit: Những gì tôi có là không làm việc :)

+7

Bạn có thể đặt giá trị thời gian chờ thành "2m" thay vì "120". –

+1

Dường như dữ liệu không được truyền trực tuyến ... tức là đối với máy chủ để bắt đầu phản hồi lại sau 60 giây trở lên có vẻ không được chấp nhận. –

Trả lời

235

timeouts Proxy được tốt, cho proxy, không cho FastCGI ...

Các chỉ thị ảnh hưởng đến thời gian chờ của FastCGI là client_header_timeout, client_body_timeoutsend_timeout.

Chỉnh sửa: Xem xét những gì được tìm thấy trên wiki nginx, send_timeout directive chịu trách nhiệm đặt thời gian chờ phản hồi chung (có chút sai lệch). Đối với FastCGI có fastcgi_read_timeout đang ảnh hưởng đến fastcgi process response timeout.

HTH.

+44

Câu trả lời là fastcgi_read_timeout - cảm ơn! – sheats

+7

Đối với bất kỳ ai sử dụng uwsgi và gặp lỗi này, uwsgi_read_timeout 600; cố định vấn đề của tôi. – Homer6

+2

Câu hỏi của tôi ở đây sẽ là (với tư cách là quản trị viên máy chủ nghiệp dư), tôi sẽ thay đổi điều này ở đâu? tệp httpd.conf? – jeffkee

21

Đối với những người sử dụng nginx với lân và đường ray, nhiều khả năng thời gian chờ là trong tập tin unicorn.rb bạn

đặt một thời gian chờ lớn trong unicorn.rb

timeout 500 

nếu bạn vẫn đang phải đối mặt với các vấn đề, hãy thử có fail_timeout = 0 ở thượng nguồn của bạn trong nginx và xem điều này có khắc phục được sự cố của bạn hay không. Đây là mục đích gỡ lỗi và có thể gây nguy hiểm trong môi trường sản xuất.

upstream foo_server { 
     server 127.0.0.1:3000 fail_timeout=0; 
} 
+5

Nếu bạn đang downvoting những gì có vẻ là một câu trả lời hợp pháp, bạn có thể xin vui lòng bình luận tại sao. Câu trả lời này có vẻ ổn với tôi. –

+3

Tôi nghĩ rằng mọi người downvoted nó bởi vì đây là về Django, tuy nhiên câu trả lời của bạn cố định vấn đề thời gian chờ gateway của tôi với Rails + Unicorn :) – ZiggyTheHamster

1

Nếu bạn sử dụng lân.

Nhìn vào top trên máy chủ của bạn. Unicorn có khả năng đang sử dụng 100% CPU ngay bây giờ. Có một số lý do của sự cố này.

  • Bạn nên kiểm tra yêu cầu HTTP của mình, một số yêu cầu có thể rất khó.

  • Kiểm tra phiên bản của kỳ lân. Có thể bạn đã cập nhật nó gần đây, và một cái gì đó đã bị hỏng.

0

Trong http phần nginx (/etc/nginx/nginx.conf) thêm hoặc sửa đổi:

keepalive_timeout 300s 

Trong server phần nginx (/ etc/nginx/sites-available/bạn -tập tin cấu hình.com) thêm những dòng này:

client_max_body_size 50M; 
fastcgi_buffers 8 1600k; 
fastcgi_buffer_size 3200k; 
fastcgi_connect_timeout 300s; 
fastcgi_send_timeout 300s; 
fastcgi_read_timeout 300s; 

Trong php tập tin trong trường hợp 127.0.0.1:9000 (/etc/php/7.X/fpm/pool.d/www.conf) sửa đổi:

request_terminate_timeout = 300 

Tôi hy vọng sẽ giúp bạn.

+0

Có bất cứ điều gì "xấu" xảy ra nếu tôi thay đổi thời gian đến 10000 giây? – utdev

+0

Không xảy ra không có gì xấu, nhưng dịch vụ của bạn chờ đợi nhiều thời gian hơn. Bạn có thể thay đổi giá trị theo ý muốn. –

Các vấn đề liên quan