2013-02-26 28 views
13

mô tả Issue - Apache đăngUndestanding “408 Request Timeout” trên Apache với PHP

tôi tìm thấy mặt hàng tương tự với trang này trong file log của Apache:

166.147.68.243 [24/Feb/2013:06:06:25 -0500] 19 web-site.com "-" 408 - "-" 

Tôi đã có định dạng nhật ký tùy chỉnh và 408 ở đây là viết tắt của trạng thái. Định dạng ghi là:

LogFormat "%h %t %D %V \"%r\" %>s %b \"%{User-agent}i\"" detailed 

Và thường các dòng trong file log trông giống như

184.73.232.108 [26/Feb/2013:08:38:16 -0500] 30677 www.site.com "GET /api/search... HTTP/1.1" 200 205 "Zend_Http_Client" 

Đây là lý do tại sao 408 dòng lỗi trông xa lạ với tôi. Không yêu cầu được ghi lại và tôi không có ý tưởng về những gì cần được tối ưu hóa.

Câu hỏi

Làm thế nào để giải quyết vấn đề này? Tôi nên thu thập thông tin hoặc nhật ký bổ sung nào? Điều gì có thể gây ra sự cố? Đây có phải là một cái gì đó sai trên máy chủ? Hoặc đây có phải là vấn đề kết nối mạng hoàn toàn không?

Tôi đang giải quyết vấn đề này bởi vì khách hàng của chúng tôi phàn nàn rằng anh ta có lỗi 408 trên điện thoại di động của mình. Tôi đã tìm thấy nhiều bản ghi trong tệp nhật ký nhưng tôi phải thừa nhận rằng tôi không biết phải làm gì với điều này.


nghiên cứu riêng của tôi

Có một số câu hỏi về chủ đề này đã ở đây. Nhưng mọi người thì cụ thể hơn nhiều. Giống như họ discus vấn đề với một số phần mềm khách hàng cụ thể và các kịch bản. Ở đây tôi vừa gặp lỗi khi mở một số trang trên iPhone.

Ví dụ: HTTP, 408 Request timeout, bạn nên thực hiện yêu cầu GET trước POST. Nếu tôi có khách hàng tùy chỉnh, tôi có thể làm điều này. Nhưng tôi không thể kiểm soát hành vi của trình duyệt của người dùng.

Guess # 1

Khi tìm kiếm trên Internet và suy nghĩ về vấn đề tôi thấy https://serverfault.com/questions/383290/too-many-408-error-codes-in-access-log

Các gợi ý là để cập nhật các tham số cấu hình Timeout trở về giá trị mặc định của nó.

# 
# Timeout: The number of seconds before receives and sends time out. 
# 
Timeout 300 

Tôi đã thử giá trị 30 trước tiên vì tôi nghĩ là 30 giây là đủ. Nhưng ngay cả với giá trị mặc định 300 giây, tôi vẫn tiếp tục gặp lỗi trong nhật ký. Tôi đã làm tail -f khi tôi đang viết văn bản này và nhận được nhiều hơn rồi 10 dòng trong vài phút.

Đối với tôi, đây không phải là giải pháp hoàn chỉnh.

+0

Tôi vừa tìm thấy câu hỏi http://serverfault.com/questions/383290/too-many-408-error-codes-in-access-log –

+0

Thời gian chờ của chúng tôi được đặt thành 5 thay vì mặc định là 30. Tôi đã thay đổi nó trở lại giá trị mặc định 30. Tôi sẽ đặt bản cập nhật ngay nếu tôi vẫn nhận được các lỗi này trong tệp nhật ký. –

+1

Vì vậy, đưa ra một câu trả lời, bằng cách giải thích lý do tại sao các câu hỏi khác trên serverfault là như nhau, và chấp nhận rằng sau này. – mliebelt

Trả lời

10

Sau một số nghiên cứu về chủ đề tôi đã đưa ra câu trả lời sau đây. Nó được cung cấp bởi nhà phát triển chính của chúng tôi và tôi nghĩ rằng nó cung cấp cho giải thích tốt về chủ đề này.

Các lỗi này hoàn toàn bình thường.Họ không phải là một dấu hiệu của một vấn đề lớn hơn, nhưng các kết nối bình thường đang giữ Apache mở lâu hơn cho phép.

Ví dụ, truy vấn của khách hàng chạy chúng liên tiếp giữ Apache mở. Apache phản ứng bằng cách tắt anh ta một cách thích hợp.

Nếu không, hơn một số ít người có thể tiếp quản máy chủ của chúng tôi và không cho phép bất kỳ ai khác kết nối.

Thông thường, các lỗi này đến từ các hệ thống tìm kiếm khai thác và bạn có thể tạo lại bằng cách mở phiên telnet và để nó mở.

Đồng thời, hãy truy cập nhật ký truy cập và trong thời gian X (KeepAliveTimeout), bạn sẽ thấy cửa sổ bật lên IP của mình có cùng mã lỗi.

Quay lại những ngày Apache 1.3, lỗi này là phổ biến, nhưng sau đó 2.2 xuất hiện và chúng bị xóa cho đến khi đủ chúng tôi yêu cầu trả lại vì nó cho chúng ta ý tưởng về số lượng người đang mở cổng và không yêu cầu tài nguyên thực tế, v.v.

Tôi nghĩ không có gì khác được thực hiện ở đây ngoại trừ để đảm bảo đặt Timeout thành một số giá trị hợp lý như tôi đã mô tả trong câu hỏi ban đầu.

+0

Tôi không nghĩ rằng 'KeepAliveTimeout' có liên quan ở đây - cài đặt đó được sử dụng để kiểm soát chức năng để các kết nối mở sau khi một phản hồi đã được gửi đi. Các thiết lập quan trọng ở đây (như bạn tìm thấy) là 'Timeout' (yêu cầu tổng thể/thời gian phản hồi), nhưng bạn có thể thấy rằng' mod_reqtimeout' được kích hoạt và cấu hình để yêu cầu thời gian chờ rỗng sớm hơn (thông qua 'RequestReadTimeout'). – simpleigh

+0

Thực ra KeepAliveTimeout có liên quan. Nếu KeepAlive là On và yêu cầu HTTP không được hoàn thành trong thời gian KeepAliveTimeout, nó sẽ gây ra lỗi 408. Nếu KeepAlive bị Tắt, thì chỉ thị Thời gian chờ sẽ được ưu tiên. Tôi đã thử nghiệm điều này với các thiết bị nhúng chậm với các máy chủ Apache. –