2013-04-22 45 views
30

Tôi có Nginx + uWSGI cho ứng dụng Python Django.Nginx hết giờ khi uWSGI mất nhiều thời gian để xử lý yêu cầu

Tôi có sau đây trong tôi nginx.conf:

location/{ 
    include uwsgi_params; 
    uwsgi_pass 127.0.0.1:9001; 
    uwsgi_read_timeout 1800; 
    uwsgi_send_timeout 300; 
    client_header_timeout 300; 
    proxy_read_timeout 300; 
    index index.html index.htm; 
} 

nhưng đối với yêu cầu chạy dài trên uWSGI mất khoảng 1 phút để hoàn thành tôi nhận được một lỗi thời gian chờ trong Nginx log lỗi như sau:

2013/04/22 12:35:56 [lỗi] 2709 # 0: * 1 ngược dòng hết thời gian chờ (110: Kết nối hết giờ) trong khi đọc tiêu đề phản hồi từ phía trên, máy khách: xx.xx.xx.xx, máy chủ:, yêu cầu: "GET/entity/datasenders/HTTP/1.1", upstream: "uwsgi: //127.0.0.1: 9001", host: "xxx.xx.xx.x"

Tôi đã đặt thời gian tiêu đề và uWSGI gửi/đọc hết thời gian chờ 5 phút, ai đó có thể cho tôi biết tôi có thể làm gì để khắc phục điều này không?

Trả lời

49

Cấu hình mà giải quyết vấn đề là:

location/{ 
    include uwsgi_params; 
    uwsgi_pass 127.0.0.1:9001; 
    uwsgi_read_timeout 300; 
    index index.html index.htm; 
} 

Lý do cấu hình ở trên trong câu hỏi không làm việc cho chúng tôi bởi vì không may trong máy nhiều đường chúng tôi đã nginx.conf tập tin. Chúng tôi đã làm việc với conf ở con đường sai.

Để tìm chính xác ra đường nginx của bạn được chọn lên các cấu hình từ chạy:

nginx -V # V is caps 

này sẽ có một --conf-path=[] mà sẽ cho bạn biết chính xác từ nơi nó được chọn lên các cấu hình từ.

Gần đây tôi đã tìm thấy ở trên nginx -V để không cung cấp thông tin phù hợp. Tôi sẽ để lại ở trên chỉ trong trường hợp những người khác thấy nó hữu ích.

+1

những gì con số đó đại diện? giây? và nó sẽ là một vấn đề nếu chúng ta có nó đặt trên một số lượng lớn như năm 2000? – senaps

0

Ngoài câu trả lời "uwsgi_read_timeout", bạn cũng nên kiểm tra xem quyền sở hữu có đúng với thư mục bộ nhớ cache nginx uwsgi của bạn hay không. Quyền sở hữu phải được đặt cho cùng một người dùng như quy trình nginx đang chạy ... Trong trường hợp của tôi, tôi phải làm điều này

grep '^user' /etc/nginx/nginx.conf 
ls -lah /var/cache/nginx/uwsgi_temp 
for f in $(find /var/cache/nginx/uwsgi_temp); do ls -lah $f; done 

Những tệp này có thuộc cùng một người dùng không? Nếu không, bạn có thể tắt nginx và xóa tất cả các tệp bộ nhớ cache, đảm bảo rằng chủ sở hữu thích hợp là trên/var/cache/nginx/uwsgi_temp và khởi động lại. Có lẽ bạn cũng có thể chỉ làm một chown đệ quy, tôi đã không thử nghiệm phương pháp này.

# store the user 
THEUSER=$(grep '^user' /etc/nginx/nginx.conf | sed 's/.* //; s/;.*//') 

Remove bộ nhớ cache và khởi động lại cách tiếp cận

/etc/init.d/nginx stop 
rm -rf /var/cache/nginx/uwsgi_temp/* 
chown $THEUSER:$THEUSER /var/cache/nginx/uwsgi_temp 
/etc/init.d/nginx start 

Recursive cách tiếp cận chown

chown -R $THEUSER:$THEGROUP /var/cache/nginx/uwsgi_temp/ 
# not sure if you have to restart nginx here... 
Các vấn đề liên quan