Lỗi request body DirectAdmin và cách khắc phục hiệu quả

Chào bạn, tôi là Bùi Mạnh Đức đây. Khi quản trị website trên DirectAdmin, chắc hẳn bạn đã từng gặp phải thông báo lỗi “Request body no files data length is larger“. Lỗi này thường xuất hiện khi bạn đang cố gắng tải lên một tệp tin có dung lượng lớn, chẳng hạn như một theme WordPress mới, một plugin đa tính năng, hoặc một bản sao lưu website. Cảm giác thật khó chịu khi công việc bị gián đoạn bởi một thông báo kỹ thuật khó hiểu phải không nào? Nguyên nhân cốt lõi của vấn đề này thường không quá phức tạp, chủ yếu xuất phát từ việc máy chủ của bạn được cấu hình với giới hạn kích thước dữ liệu tải lên quá thấp so với tệp tin bạn đang gửi. Trong bài viết này, chúng ta sẽ cùng nhau “mổ xẻ” nguyên nhân và tìm hiểu từng bước cách khắc phục triệt để lỗi này bằng việc điều chỉnh cấu hình PHP và các thiết lập trong DirectAdmin. Hãy cùng theo dõi nhé!

Giới thiệu lỗi ‘Request body no files data length is larger’ trên DirectAdmin

Lỗi “Request body no files data length is larger” là một trong những sự cố phổ biến nhất mà người dùng gặp phải khi làm việc với các website trên nền tảng DirectAdmin. Thông báo này xuất hiện khi bạn thực hiện một thao tác upload file (ví dụ: cài đặt theme/plugin, tải lên media) có kích thước vượt quá giới hạn cho phép được cấu hình sẵn trên máy chủ.

Nguyên nhân chính gây ra lỗi này liên quan trực tiếp đến các chỉ số giới hạn trong file cấu hình PHP (php.ini) và đôi khi là cả trong cài đặt của webserver (như Apache là gì hoặc Nginx là gì) mà DirectAdmin quản lý. Về cơ bản, máy chủ của bạn đang nói rằng: “Tệp tin bạn gửi lên quá lớn, tôi không được phép nhận nó”. Điều này là một cơ chế bảo vệ để ngăn chặn việc các tệp tin quá lớn làm quá tải tài nguyên của server.

Để khắc phục vấn đề này, chúng ta sẽ cần can thiệp và điều chỉnh một vài thông số quan trọng. Hướng giải quyết chính là tăng giới hạn kích thước cho phép của dữ liệu được gửi lên server. Trong bài viết này, tôi sẽ hướng dẫn bạn chi tiết cách xác định đúng file cấu hình cần sửa, ý nghĩa của từng thông số như post_max_sizeupload_max_filesize, cũng như cách khởi động lại các dịch vụ cần thiết để thay đổi có hiệu lực. Chúng ta sẽ đi qua từng bước, từ việc chẩn đoán nguyên nhân đến khi xác nhận lỗi đã được giải quyết hoàn toàn.

Hình minh họa

Nguyên nhân gây lỗi ‘Request body no files data length is larger’

Để có thể “chữa bệnh” một cách hiệu quả, chúng ta cần hiểu rõ “căn nguyên” của nó. Lỗi này không phải là một sự cố ngẫu nhiên, mà là kết quả của các quy tắc được thiết lập sẵn trên máy chủ của bạn. Hãy cùng tìm hiểu hai nguyên nhân chính đằng sau thông báo lỗi khó chịu này.

Giới hạn kích thước dữ liệu gửi lên server trong PHP

PHP, ngôn ngữ lập trình phổ biến nhất để xây dựng website, có những cơ chế riêng để kiểm soát dữ liệu đầu vào. Các giới hạn này được định nghĩa trong file cấu hình php.ini và đóng vai trò quyết định trong việc upload file.

Hai chỉ số quan trọng nhất bạn cần biết là post_max_sizeupload_max_filesize. Chỉ số upload_max_filesize định nghĩa kích thước tối đa cho một tệp tin được phép tải lên. Trong khi đó, post_max_size lại quy định tổng kích thước tối đa của toàn bộ dữ liệu được gửi đi trong một yêu cầu (POST request), bao gồm cả tệp tin và các dữ liệu khác. Một quy tắc quan trọng là giá trị của post_max_size phải luôn lớn hơn hoặc bằng upload_max_filesize.

Ngoài ra, còn có một yếu tố khác là thời gian xử lý. Thông số max_input_time giới hạn thời gian tối đa (tính bằng giây) mà máy chủ được phép dùng để nhận dữ liệu từ yêu cầu. Nếu việc tải lên một tệp lớn kéo dài quá thời gian này, quá trình cũng sẽ bị hủy và gây ra lỗi, ngay cả khi kích thước tệp vẫn nằm trong giới hạn cho phép.

Hình minh họa

Cấu hình mặc định của DirectAdmin và ảnh hưởng tới giới hạn tải dữ liệu

Bản thân DirectAdmin là một bảng điều khiển mạnh mẽ, nhưng cấu hình mặc định của nó và của webserver là gì đi kèm (thường là Apache là gì hoặc Nginx là gì) cũng có những giới hạn riêng để đảm bảo sự ổn định cho toàn bộ hệ thống. Các giới hạn này hoạt động ở một lớp cao hơn so với PHP.

Webserver có thể đặt ra một giới hạn tổng thể cho kích thước của một “request body”, tức là toàn bộ phần thân của một yêu cầu HTTP. Ví dụ, Nginx sử dụng chỉ số client_max_body_size. Nếu kích thước yêu cầu của bạn (bao gồm cả file upload) vượt qua ngưỡng này, webserver sẽ từ chối ngay lập tức trước cả khi PHP kịp xử lý. Đây chính là lúc thông báo lỗi “Request body no files data length is larger” thường xuất hiện.

Các biểu hiện của lỗi rất rõ ràng: quá trình upload có thể bị dừng đột ngột ở một phần trăm nhất định, hoặc bạn sẽ nhận được thông báo lỗi ngay sau khi chọn file và nhấn nút tải lên. Việc hiểu rõ cả hai tầng giới hạn từ PHP và webserver sẽ giúp bạn chẩn đoán và khắc phục vấn đề một cách chính xác hơn.

Hướng dẫn điều chỉnh thông số trong file php.ini để khắc phục lỗi

Sau khi đã hiểu rõ nguyên nhân, bây giờ là lúc chúng ta bắt tay vào hành động. Việc đầu tiên và thường mang lại hiệu quả cao nhất chính là điều chỉnh lại các giới hạn trong file cấu hình php.ini. Đây là nơi kiểm soát trực tiếp hành vi của PHP khi xử lý các yêu cầu tải file lên.

Các bước chỉnh sửa post_max_size và upload_max_filesize

Đây là hai thông số “ngôi sao” mà chúng ta cần quan tâm. Việc tăng giá trị của chúng thường sẽ giải quyết được vấn đề ngay lập tức.

Đầu tiên, bạn cần xác định vị trí file php.ini. Trên DirectAdmin, cách dễ nhất là truy cập vào bảng điều khiển, tìm đến mục “Account Manager” và chọn “PHP Settings” hoặc “Multi-PHP INI Editor”. Giao diện này cho phép bạn chỉnh sửa các giá trị một cách trực quan mà không cần dùng đến dòng lệnh. Nếu bạn có quyền truy cập SSH, bạn có thể tìm đường dẫn file php.ini đang được sử dụng bằng cách tạo một file phpinfo.php với nội dung <?php phpinfo(); ?> và truy cập nó qua trình duyệt.

Khi đã mở được file hoặc giao diện chỉnh sửa, hãy tìm đến hai dòng sau:

  • upload_max_filesize
  • post_max_size

Giả sử bạn muốn tải lên các tệp có dung lượng tối đa 64MB, hãy thay đổi giá trị của chúng. Bạn nên đặt upload_max_filesize = 64Mpost_max_size = 65M (hoặc một giá trị lớn hơn một chút). Việc đặt post_max_size lớn hơn là rất quan trọng vì nó cần chứa cả file và các dữ liệu đi kèm khác. Sau khi chỉnh sửa, hãy lưu lại thay đổi.

Hình minh họa

Tăng max_input_time và max_execution_time để tránh timeout

Việc tải lên một tệp tin lớn không chỉ phụ thuộc vào kích thước mà còn cả thời gian. Nếu kết nối mạng của bạn không quá nhanh, quá trình upload có thể mất vài phút. Nếu thời gian này vượt quá giới hạn cho phép của máy chủ, lỗi timeout sẽ xảy ra.

Để ngăn chặn điều này, chúng ta cần điều chỉnh hai thông số về thời gian. max_execution_time là tổng thời gian tối đa một kịch bản PHP được phép chạy. Trong khi đó, max_input_time là thời gian tối đa để kịch bản đó nhận dữ liệu đầu vào. Cả hai đều quan trọng trong quá trình upload.

Trong cùng file php.ini hoặc giao diện chỉnh sửa, hãy tìm đến hai dòng sau:

  • max_execution_time
  • max_input_time

Một giá trị an toàn cho cả hai thông số này thường là 300 (tương đương 5 phút). Điều này cho phép máy chủ có đủ thời gian để nhận và xử lý các tệp tin lớn mà không bị ngắt quãng. Sau khi đã điều chỉnh tất cả các giá trị cần thiết, đừng quên lưu lại file php.ini và chuyển sang bước tiếp theo là khởi động lại dịch vụ để áp dụng các thay đổi này.

Hình minh họa

Cách cấu hình DirectAdmin để xử lý lỗi hiệu quả

Trong một số trường hợp, chỉ chỉnh sửa file php.ini là chưa đủ. Lỗi vẫn có thể tồn tại nếu giới hạn của webserver (do DirectAdmin quản lý) thấp hơn giới hạn bạn vừa thiết lập trong PHP. Vì vậy, chúng ta cần đảm bảo rằng cấu hình ở tầng DirectAdmin và webserver cũng được điều chỉnh cho phù hợp.

Thiết lập các thông số giới hạn trong DirectAdmin

DirectAdmin quản lý cấu hình của các dịch vụ web như Apache hoặc Nginx. Nếu webserver có giới hạn kích thước request body riêng, nó sẽ ghi đè lên cài đặt của PHP. Việc này đòi hỏi bạn phải can thiệp sâu hơn một chút, thường là qua quyền admin hoặc SSH.

Đối với Nginx, thông số quan trọng là client_max_body_size. Bạn cần tìm file cấu hình Nginx của domain hoặc file cấu hình chung (thường ở /etc/nginx/nginx.conf hoặc trong các file .conf của từng domain). Bạn cần thêm hoặc chỉnh sửa dòng client_max_body_size 65M; (giá trị này nên khớp với post_max_size của bạn) vào trong khối http, server hoặc location.

Đối với Apache, thông số tương ứng là LimitRequestBody. Bạn có thể cần phải chỉnh sửa nó trong file httpd.conf hoặc file .htaccess. Giá trị được tính bằng byte, vì vậy để đặt giới hạn là 65MB, bạn sẽ cần đặt là LimitRequestBody 68157440. Tuy nhiên, việc chỉnh sửa cài đặt PHP thường là đủ cho hầu hết các trường hợp sử dụng Apache.

Nếu bạn không quen với việc chỉnh sửa file cấu hình qua dòng lệnh, giao diện “Custom HTTPD Configurations” trong DirectAdmin (dành cho cấp độ Reseller/Admin) có thể là một lựa chọn an toàn hơn để thêm các quy tắc tùy chỉnh này.

Hình minh họa

Khởi động lại dịch vụ để áp dụng thay đổi cấu hình

Bất kỳ thay đổi nào trong các file cấu hình máy chủ sẽ không có hiệu lực cho đến khi bạn khởi động lại các dịch vụ liên quan. Đây là một bước cực kỳ quan trọng mà nhiều người thường bỏ qua, dẫn đến việc loay hoay không hiểu tại sao lỗi vẫn còn.

Sau khi đã chỉnh sửa file php.ini và/hoặc file cấu hình webserver, bạn cần truy cập vào máy chủ qua SSH và thực hiện các lệnh sau (lệnh cụ thể có thể thay đổi tùy theo hệ điều hành của bạn, ví dụ dưới đây dành cho CentOS/AlmaLinux):

  • Khởi động lại Apache: systemctl restart httpd
  • Khởi động lại Nginx: systemctl restart nginx
  • Khởi động lại PHP-FPM: Bạn cần xác định đúng phiên bản PHP đang chạy, ví dụ: systemctl restart php-fpm74 hoặc systemctl restart php-fpm81. Đây là bước bắt buộc để các thay đổi trong php.ini được áp dụng.

Sau khi các dịch vụ đã được khởi động lại thành công, các cấu hình mới sẽ được tải và áp dụng cho tất cả các yêu cầu sau đó. Bây giờ là lúc để chúng ta kiểm tra xem công sức của mình đã mang lại kết quả hay chưa.

Hình minh họa

Kiểm tra và xác nhận lỗi đã được khắc phục

Sau khi đã thực hiện các thay đổi cấu hình và khởi động lại dịch vụ, bước cuối cùng là xác nhận xem lỗi đã thực sự biến mất hay chưa. Việc kiểm tra cẩn thận sẽ giúp bạn chắc chắn rằng vấn đề đã được giải quyết triệt để và hệ thống đang hoạt động đúng như mong đợi.

Cách kiểm tra khi upload file lớn không còn lỗi

Phương pháp đơn giản và trực tiếp nhất là thử lại chính thao tác đã gây ra lỗi trước đó. Hãy chuẩn bị một tệp tin có dung lượng lớn hơn giới hạn cũ nhưng nhỏ hơn giới hạn mới mà bạn vừa thiết lập.

Ví dụ, nếu trước đây bạn không thể tải lên tệp 10MB và bây giờ bạn đã đặt giới hạn là 64MB, hãy thử tải lên một tệp có dung lượng khoảng 20-30MB. Truy cập vào khu vực quản trị website của bạn (ví dụ: trang thêm theme/plugin mới của WordPress) và tiến hành upload. Nếu quá trình upload diễn ra suôn sẻ và hoàn tất mà không có bất kỳ thông báo lỗi nào, xin chúc mừng, bạn đã khắc phục thành công!

Để chắc chắn hơn nữa, bạn có thể theo dõi file log lỗi của webserver trong quá trình upload (ví dụ: dùng lệnh tail -f /var/log/httpd/error_log). Nếu không có dòng lỗi mới nào liên quan đến “request body” xuất hiện, điều đó khẳng định rằng vấn đề đã được giải quyết ở cấp độ máy chủ.

Hình minh họa

Sử dụng công cụ và lệnh kiểm tra cấu hình hiện tại

Đôi khi, việc upload thử vẫn thất bại và bạn không chắc liệu các thay đổi của mình đã được áp dụng đúng hay chưa. Đây là lúc các công cụ chẩn đoán phát huy tác dụng.

Công cụ hữu hiệu nhất là sử dụng hàm phpinfo(). Hãy tạo một file mới trên website của bạn, ví dụ tên là info.php, với nội dung duy nhất như sau: <?php phpinfo(); ?>. Sau đó, truy cập vào file này qua trình duyệt (ví dụ: yourdomain.com/info.php). Trang kết quả sẽ hiển thị toàn bộ thông tin cấu hình PHP hiện tại của máy chủ.

Trên trang này, hãy dùng chức năng tìm kiếm của trình duyệt (Ctrl + F hoặc Cmd + F) và tìm các từ khóa như post_max_size, upload_max_filesize, và max_execution_time. Kiểm tra xem các giá trị hiển thị ở cột “Local Value” có đúng với những gì bạn đã thiết lập trong file php.ini hay không. Nếu các giá trị này đã được cập nhật, điều đó có nghĩa là bạn đã chỉnh sửa đúng file và khởi động lại dịch vụ thành công. Nếu giá trị vẫn là số cũ, có thể bạn đã sửa sai file php.ini hoặc quá trình restart dịch vụ đã gặp lỗi.

Hình minh họa

Một số vấn đề thường gặp và cách xử lý

Ngay cả khi đã làm theo các hướng dẫn, đôi khi bạn vẫn có thể gặp phải một vài trở ngại. Dưới đây là những vấn đề phổ biến nhất và cách để bạn xử lý chúng một cách bình tĩnh và hiệu quả.

Lỗi vẫn xuất hiện sau khi chỉnh sửa php.ini

Đây là tình huống gây bối rối nhất: bạn đã chắc chắn mình đã tăng các giới hạn trong php.ini và khởi động lại dịch vụ, nhưng lỗi vẫn không biến mất. Nguyên nhân thường nằm ở một trong hai khả năng sau.

Thứ nhất, bạn có thể đã chỉnh sửa nhầm file php.ini. Một máy chủ có thể có nhiều phiên bản PHP được cài đặt, và mỗi phiên bản lại có file cấu hình riêng. Hơn nữa, PHP chạy ở chế độ dòng lệnh (CLI) và chế độ web (FPM/CGI) cũng có thể sử dụng các file php.ini khác nhau. Cách tốt nhất để xác định đúng file cần sửa là sử dụng trang phpinfo() như đã đề cập ở phần trước. Hãy tìm đến mục “Loaded Configuration File” trên trang phpinfo(), đó chính là đường dẫn tuyệt đối đến file php.ini đang được webserver của bạn sử dụng.

Thứ hai, giới hạn có thể đến từ tầng webserver. Như đã nói, Nginx với client_max_body_size hay các module bảo mật như ModSecurity trên Apache có thể chặn yêu cầu trước cả khi nó đến được với PHP. Hãy kiểm tra lại cấu hình của webserver và các log lỗi liên quan để đảm bảo không có quy tắc nào khác đang cản trở bạn.

Hình minh họa

Server báo lỗi timeout hoặc gián đoạn

Một vấn đề khác là quá trình upload bắt đầu nhưng bị ngắt giữa chừng và trình duyệt báo lỗi kết nối hoặc “timeout”. Lỗi này thường liên quan đến thời gian xử lý chứ không phải kích thước file.

Hãy kiểm tra lại các giá trị của max_execution_timemax_input_time trong file php.ini của bạn. Có thể bạn đã tăng giới hạn kích thước nhưng quên tăng giới hạn thời gian. Đối với các file rất lớn hoặc kết nối internet chậm, việc upload có thể mất nhiều hơn 5 phút (giá trị 300 giây). Bạn có thể thử tăng các giá trị này lên 600 (10 phút) để xem có cải thiện được tình hình không.

Ngoài ra, lỗi timeout cũng có thể do giới hạn tài nguyên của máy chủ. Quá trình xử lý một tệp tin lớn có thể tiêu tốn đáng kể CPU và RAM. Nếu gói hosting hoặc VPS của bạn có tài nguyên hạn hẹp, máy chủ có thể bị quá tải và tự động hủy bỏ tiến trình. Trong trường hợp này, hãy kiểm tra bảng điều khiển tài nguyên của server. Nếu thấy CPU hoặc RAM luôn ở mức 100% khi upload, bạn có thể cần xem xét nâng cấp gói dịch vụ của mình như Vps tốt nhất hoặc các lựa chọn VPS linh hoạt như Thuê VPS theo giờ.

Các best practices khi cấu hình upload trên DirectAdmin

Việc khắc phục được lỗi là rất tốt, nhưng việc cấu hình hệ thống một cách thông minh và an toàn để hạn chế các vấn đề trong tương lai còn quan trọng hơn. Dưới đây là những kinh nghiệm tốt nhất mà bạn nên áp dụng khi làm việc với các thiết lập upload trên DirectAdmin.

1. Luôn sao lưu file cấu hình trước khi thay đổi: Đây là quy tắc vàng trong quản trị hệ thống. Trước khi chỉnh sửa bất kỳ file quan trọng nào như php.ini hay httpd.conf, hãy tạo một bản sao của nó. Một lệnh đơn giản như cp php.ini php.ini.bak có thể cứu bạn khỏi nhiều giờ khắc phục sự cố nếu có sai sót xảy ra.

2. Điều chỉnh thông số phù hợp với dung lượng file phổ biến: Đừng đặt giới hạn quá cao một cách không cần thiết. Nếu bạn chỉ thường xuyên làm việc với các file dưới 50MB, việc đặt giới hạn upload lên 1GB là không hợp lý. Giới hạn upload quá cao có thể tạo ra rủi ro về bảo mật, cho phép kẻ xấu cố gắng tải lên các tệp tin cực lớn để làm cạn kiệt tài nguyên hoặc tấn công từ chối dịch vụ (DoS) máy chủ của bạn. Hãy phân tích nhu cầu thực tế và đặt một con số vừa đủ.

3. Không đặt giới hạn quá cao gây ảnh hưởng đến hoạt động chung của server: Việc cho phép upload file lớn và thời gian thực thi dài sẽ chiếm dụng tài nguyên máy chủ (RAM, CPU) trong một khoảng thời gian dài. Nếu nhiều người dùng cùng lúc thực hiện các thao tác này trên một máy chủ chia sẻ, nó có thể làm chậm hiệu suất của tất cả các website khác. Hãy cân bằng giữa sự tiện lợi và sự ổn định chung của hệ thống.

4. Thường xuyên kiểm tra log để phát hiện sớm lỗi: Tập thói quen kiểm tra các file log lỗi của webserver và PHP. Chúng là những “người bạn” tốt nhất của quản trị viên, cung cấp những thông tin chi tiết về các vấn đề đang xảy ra trên hệ thống của bạn, ngay cả khi chúng chưa biểu hiện ra bên ngoài. Việc phát hiện sớm các cảnh báo sẽ giúp bạn ngăn chặn các lỗi lớn hơn.

5. Thực hiện restart dịch vụ đúng cách sau khi chỉnh sửa: Luôn nhớ rằng các thay đổi cấu hình chỉ có hiệu lực sau khi dịch vụ liên quan được khởi động lại. Hãy chắc chắn rằng bạn đã restart đúng dịch vụ (Nginx/Apache, PHP-FPM) để tránh mất thời gian tìm kiếm một lỗi “ma” không tồn tại.

Hình minh họa

Kết luận

Qua bài viết chi tiết này, chúng ta đã cùng nhau tìm hiểu sâu về nguyên nhân và các bước cụ thể để khắc phục lỗi “Request body no files data length is larger” trên DirectAdmin. Tóm lại, vấn đề này chủ yếu xuất phát từ việc cấu hình giới hạn kích thước và thời gian upload trên máy chủ của bạn chưa phù hợp với nhu cầu. Giải pháp chính là can thiệp vào file php.ini để tăng các giá trị upload_max_filesize, post_max_size, và các thông số thời gian, sau đó đảm bảo rằng các giới hạn của webserver không gây cản trở.

Tôi hy vọng rằng với những hướng dẫn từng bước này, bạn đã có thể tự tin hơn trong việc quản lý và tối ưu hóa môi trường hosting của mình. Việc tự tay điều chỉnh cấu hình không chỉ giúp bạn giải quyết được vấn đề trước mắt mà còn mang lại kiến thức sâu sắc hơn về cách server là gì và hoạt động của máy chủ web. Đừng ngần ngại thử nghiệm và tinh chỉnh để tìm ra những thông số phù hợp nhất cho hiệu suất upload của website bạn.

Để đảm bảo hệ thống luôn hoạt động ổn định, hãy tạo thói quen kiểm tra định kỳ các cấu hình và cập nhật các phiên bản phần mềm như DirectAdmin, PHP lên phiên bản mới nhất để vá các lỗi bảo mật và cải thiện hiệu suất. Cuối cùng, nếu bạn đã thử mọi cách mà vẫn gặp khó khăn, đừng ngần ngại liên hệ với đội ngũ hỗ trợ kỹ thuật của nhà cung cấp hosting. Họ là những chuyên gia có đầy đủ công cụ và kinh nghiệm để giúp bạn giải quyết những vấn đề phức tạp nhất.

Đánh giá
Tác giả

Mạnh Đức

Có cao nhân từng nói rằng: "Kiến thức trên thế giới này đầy rẫy trên internet. Tôi chỉ là người lao công cần mẫn đem nó tới cho người cần mà thôi !"

Chia sẻ
Bài viết liên quan