2010-02-05 26 views
5

Tôi có một hệ thống có trang download.php. Trang mất và id và tải một tập tin dựa trên từ bản ghi DB và sau đó phục vụ nó lên. Tôi đã nhận thấy một vài trường hợp mà các tập tin được yêu cầu nhiều lần trong khoảng thời gian ngắn (20ms). Thời gian quá nhanh cho đầu vào của con người. Có rất nhiều trường hợp mà trình tải xuống hoạt động tốt. Tuy nhiên, khi xem xét kỹ hơn cách sử dụng của người tải xuống, tôi đã thấy một số hành vi thú vị.Tệp phục vụ Apache/PHP nhiều lần

Ví dụ: địa chỉ IP xxx.xxx.xxx.xxx (là một trong phạm vi thuộc sở hữu của xxxxxx.de ở Đức) đã đến trang web thông qua Google. Họ duyệt xung quanh và sau đó đến trang http://site.com/xxxx/press+125.php Ở đó họ đã đưa ra yêu cầu cho /download.php?id=/ZZ/n+aH55Y= (PDF) lúc 9:04:23 SA. Điều đó một mình không phải là một việc lớn. Tuy nhiên, điều thú vị là máy chủ có vẻ khá bận tâm với việc phục vụ yêu cầu đó. Trong nhật ký, yêu cầu đầu tiên hoàn thành trong khoảng thời gian từ 9:09:48 đến 9:10:00. Có vẻ như người dùng phải mệt mỏi vì phải chờ đợi trong thời gian đó và yêu cầu tài liệu thêm hai lần nữa. Giữa 09:14:47 và 09:15:00 cùng một yêu cầu xuất hiện một lần nữa, ngoại trừ nó là từ 9:04:43 AM, 20ms muộn hơn yêu cầu đầu tiên. Sau đó, nó bật lên một lần thứ ba, với một yêu cầu bắt đầu lúc 09:05:06 hoàn thành giữa 09:19:55 và 09:19:58!

Tôi nghi ngờ tài liệu đó. Trong tìm kiếm thông qua các bản ghi tôi thấy các trường hợp khác, nơi nó có máy chủ một chút để xử lý tập tin cụ thể. Kiểm tra danh sách yêu cầu này từ zzz.zzz.zzz.zzz [khác với ở trên] cho tệp /download.php?id=/ZZ/n+aH55Y= (cùng tài liệu như trước):

Thời gian yêu cầu Toàn bộ thời gian 04:32:43 04:33:36 04:32:50 04:33:36 04:32:51 04:33:38 04:33:05 04:33:38 04:33 : 34 04:33:42 04:33:05 04:33:42

Vì vậy, điều gì đó chắc chắn đang diễn ra. Cho dù nó có liên quan đến tài liệu cụ thể này hay không, hãy truy cập máy chủ, mã của trang download.php hoặc nếu chúng tôi chỉ thấy bằng chứng về một số tình trạng quá tải ở cấp máy chủ khi nó phát ra trong thời gian thực, tôi vẫn chưa chắc chắn.

Trong sự công bằng, có những trường hợp khác của những người tải xuống /download.php?id=/ZZ/n+aH55Y= (cùng một tệp PDF) mà không có lỗi. Tuy nhiên, điều thú vị là nhiều quá trình chỉ dường như xảy ra với một tệp này, và sau đó chỉ khi nó được truy cập thông qua trang http://site.com/press+125.php. Nó sẽ tiếp tục điều tra nếu có điều gì đó không ổn trong mã khiến hệ thống kích hoạt nhiều yêu cầu tải xuống chiếm máy chủ.

Tôi không biết liệu báo chí này + 125.php có phải là lỗ thỏ hay không, nhưng có sự kỳ quặc kỳ lạ.

Bất kỳ ý tưởng nào? Tôi hoàn toàn không có ý tưởng. Apache maxed ra? Những thứ như thế.

///DOWNLOAD.php 
$file = new files(); 
$file->comparison_filter("id", "=", $id); //sql to load 
if ($file->load()) { 
    $file->serve(); 
} 


//FILES 
function serve() { 
     if ($this->is_loaded) { 
      if (file_exists($this->get_value("filename"))) { 
       if ($this->get_value("content_type") != "") { 
        header("Content-Type: " . $this->get_value("content_type")); 
       }  
       header("Content-Length: " . filesize($this->get_value("filename"))); 
       if ($this->get_value("flag_image") == 0 || $this->get_value("flag_image") == false) { 
        header("Cache-Control: private"); 
        header("Content-Disposition: attachment; filename=" . urlencode($this->get_value("original_filename"))); 
       } 

       set_time_limit(0); 
       @readfile($this->get_value("filename")); 

       exit; 
      } 
     } 
} 
+0

Bạn đã xem đĩa để xem PDF này thực sự lớn đến mức nào? Nó có lớn hơn đáng kể so với bất kỳ tệp nào khác không? Ngoài ra, bạn có trên một máy chủ chuyên dụng hoặc chia sẻ lưu trữ? – Paolo

+0

nó giống nhau. Đó là một hộp chuyên dụng. – easement

Trả lời

0

Sử dụng mạng CDN để tải xuống tệp. Họ sẽ xử lý điều này cho bạn, và cộng với cung cấp cho bạn băng thông và khả năng mở rộng. Không có thêm khóa up trên máy chủ của bạn. http://www.reelseo.com/free-cdn-velocix/

+0

CDN không phải là một tùy chọn. Một số mục là độc quyền và bảo mật. Tôi đã loại bỏ một số mã phát hiện xác thực. Ngoài ra, có một quản trị viên tại chỗ để tải lên các tệp. – easement

0
  1. Bạn đã phân tích User-Agent và Tiêu đề người giới thiệu trong yêu cầu HTTP chưa?
  2. Tại sao không phân phối tất cả các tệp tĩnh từ apache hoặc bất kỳ thứ gì bạn có? Nếu bạn muốn theo dõi số liệu thống kê tải xuống , bạn có thể thực hiện chuyển hướng từ tập lệnh đến tệp tĩnh.
+0

Có một số theo dõi xác thực. Có một hit cho DB tìm kiếm quốc gia và khu vực và sau đó ghi nó vào một tập tin đăng nhập. Chúng ta cũng cần phải nắm bắt ai đang tải xuống các tệp. – easement

0

Thêm '% D% X' vào cấu hình ghi nhật ký của bạn - tôi hy vọng sẽ trả lời nhiều câu hỏi của bạn.

C.

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