2011-01-26 41 views
24

Tôi có lỗi trong nginx error.log:khách hàng đóng sớm kết nối khi gửi cho khách hàng, trong nginx

2010/12/05 17:11:49 [info] 7736#0: *1108 client closed prematurely connection while sending to client, 
client: 188.72.80.201, server:***.biz, request: "GET /forum/ HTTP/1.1", 
upstream:"http://***:3000/forum/", host: "***.biz" 

Tôi có 500 mã phản hồi trên trang web mọi lúc. Làm thế nào tôi có thể sửa lỗi này?

Cảm ơn bạn.

+0

Bạn có thể tìm giải pháp cho vấn đề này không? – jithujose

+0

Có lẽ sự trợ giúp này: Không có câu trả lời nào phù hợp với tôi. Tôi đã chuyển sang một máy tính khác và cố truy cập địa chỉ HTTPS và nó hoạt động. Vấn đề là phía máy khách hoặc một cái gì đó được lưu trữ trên máy chủ. – arsenik

Trả lời

6

Tôi thấy rằng nếu bạn tắt bộ đệm Proxy giúp

http { 
    proxy_buffering off; 
... 
} 

Có lẽ bộ đệm quá nhỏ hoặc ít hơn. Sau khi thay đổi kích thước bộ đệm nó hoạt động thoải mái

proxy_buffering on; 
proxy_buffer_size 8k; 
proxy_buffers 2048 8k; 
8

Thiết proxy_ignore_client_abort on; thể giúp bạn.

+2

điều này đã làm cho tôi – WuTheFWasThat

+0

điều này cũng phù hợp với tôi. Thumbs Up. Hãy nhớ đặt nó bên trong khối http dưới /etc/nginx/nginx.conf. Không thể làm cho nó hoạt động khi đặt nó dưới khối máy chủ –

+2

Bất cứ ai quan tâm để giải thích lý do tại sao điều này sẽ sửa chữa nó? – cdmckay

2

Tôi đã có cùng một vấn đề và nghiên cứu về nó. Trong trường hợp của tôi, điều này chỉ xảy ra với trình duyệt Webkit (Chrome). Họ mở các kết nối một cách lạc quan hơn các kết nối mà họ yêu cầu nếu bạn chỉ tải một tài nguyên duy nhất. Trong trường hợp này, kết nối dư thừa được đóng không đúng lúc hoặc ít nhất là không gửi bất kỳ động từ HTTP nào lên nó. Điều này dẫn đến lỗi được đề cập trong nginx.

Về câu trả lời số 1: Không có giải pháp được đề xuất nào giúp hợp lý vì điều này không liên quan gì đến proxy.

Về câu trả lời số 2: proxy_ignore_client_abort bật; Có không trợ giúp trong thử nghiệm của tôi không.

Rất tiếc, tôi không tìm thấy giải pháp nào khác ngoài việc sử dụng

error_log off;

-17

Tôi đã bắt đầu thấy thông báo này khi đã thay đổi error_log từ warn thành debug. Hoàn nguyên đã giải quyết được sự cố.

+21

Điều đó không chỉ che giấu vấn đề? – mr2ert

+31

câu trả lời đồi mồi –

+6

xóa nginx cũng đã là một giải pháp. – w00t

1

Tôi gặp sự cố tương tự, thấy rằng nginx đóng kết nối vì cài đặt send_timeout. Tôi tăng lên và nó được cố định.

http 
{ 
send_timeout 20; 
... 
} 
+4

... nhưng mặc định thực sự là 60 giây: http://nginx.org/en/docs/http/ngx_http_core_module.html#send_timeout – Kzqai

-2

chắc chắn sẽ giải quyết được vấn đề.

+1

giải thích ngắn gọn câu trả lời của bạn. nơi OP cần thiết lập vv, để nó cũng hữu ích cho người khác. – Ravimallya

+0

Có một lời giải thích sẽ hữu ích. – fraxture

8

tôi giải quyết vấn đề này bản thân mình trong nhiều giờ dài hôm nay và tìm ra giải pháp:
Xin lưu ý rằng sửa chữa này chỉ ảnh hưởng đến bạn khi sử dụng cân bằng tải (s)

Kiểm tra thời gian chờ nhàn rỗi cân bằng tải của bạn. Tôi đã tắt thời gian chờ của ELB được đặt thành 60 giây (mặc định) và khi yêu cầu bị treo, nó sẽ đóng kết nối sau thời gian đã cho. Nhưng vì ELB trước nginx, nginx đang ghi nhật ký "client" (trong trường hợp này là ELB), đang đóng kết nối.

Vì vậy, nếu bạn đang sử dụng ELB, hãy vào:
EC2 -> Load cân bằng -> Chọn đúng một -> di chuyển xuống trong mô tả và thay đổi Nhàn rỗi Timeout nếu bạn đang sử dụng cân bằng tải khác, kiểm tra cấu hình của họ và hết giờ.

Cũng xin lưu ý rằng bạn vẫn có thể cần thay đổi thời gian chờ của proxy, v.v.

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