Lỗi upload file trong WordPress khi sử dụng Nginx là một trong những vấn đề phổ biến nhất mà người quản trị website gặp phải. Khi bạn cố gắng tải lên hình ảnh, plugin hoặc theme, trình duyệt có thể hiển thị thông báo lỗi mơ hồ như “HTTP error”, “413 Request Entity Too Large”, hoặc “504 Gateway Time-out”. Đối với những người mới chuyển từ Apache sang Nginx, đây thường là rào cản lớn vì cấu hình Nginx khác biệt hoàn toàn so với Apache. Bài viết này sẽ giúp bạn hiểu rõ bản chất của lỗi WordPress upload Nginx error, phân tích từng nguyên nhân và cung cấp giải pháp chi tiết để khôi phục khả năng upload.
WordPress Upload Nginx Error Là Gì?

WordPress upload Nginx error là thuật ngữ chỉ nhóm lỗi xảy ra trong quá trình tải file lên website WordPress được chạy trên máy chủ sử dụng Nginx làm web server. Khác với Apache xử lý file.htaccess linh hoạt, Nginx dựa vào file cấu hình chính (thường là nginx.conf hoặc file trong thư mục sites-available) và không hỗ trợ.htaccess. Sự khác biệt này khiến nhiều cấu hình mặc định của WordPress không tương thích ngay lập tức với Nginx, dẫn đến các lỗi upload.
Lỗi xảy ra ở nhiều cấp độ: từ giới hạn kích thước file, quyền thư mục, đến cấu hình PHP-FPM và thời gian xử lý. Khoảng 70% lỗi upload trên Nginx đến từ cài đặt giới hạn kích thước file quá nhỏ ở Nginx hoặc PHP. Phần còn lại liên quan đến quyền ownership, thư mục wp-content/uploads, hoặc xung đột plugin bảo mật.
Nguyên Nhân Chính Gây Ra WordPress Upload Nginx Error

Có nhiều yếu tố có thể gây ra lỗi này.
Giới hạn kích thước file trong Nginx (client_max_body_size)
Tham số client_max_body_size trong Nginx xác định kích thước tối đa cho phép của body request. Nếu bạn cố gắng upload file lớn hơn giá trị này, Nginx sẽ trả về lỗi 413 Request Entity Too Large. Giá trị mặc định thường là 1MB, quá nhỏ so với nhu cầu upload ảnh chất lượng cao hoặc file PDF.
Giải pháp: Mở file cấu hình Nginx cho site của bạn (thường nằm ở /etc/nginx/sites-available/your-site.conf hoặc /etc/nginx/nginx.conf) và thêm hoặc sửa dòng sau trong block server hoặc location:
| Tham số | Giá trị khuyến nghị | Ghi chú |
|---|---|---|
| client_max_body_size | 64M | Phù hợp với hầu hết website WordPress, có thể tăng lên 128M hoặc 256M nếu cần upload file lớn. |
Sau khi thay đổi, reload Nginx bằng lệnh: sudo systemctl reload nginx.
Giới hạn kích thước file trong PHP (upload_max_filesize và post_max_size)
PHP có hai tham số quan trọng: upload_max_filesize và post_max_size. Nếu bạn upload file lớn hơn upload_max_filesize, WordPress sẽ báo lỗi “The uploaded file exceeds the upload_max_filesize directive”. Nếu post_max_size nhỏ hơn kích thước file, lỗi cũng xuất hiện.
Cách kiểm tra: Tạo một file PHP với nội dung và truy cập vào trình duyệt. Tìm hai giá trị này trong bảng PHP Configuration. Nếu chúng nhỏ hơn nhu cầu, hãy chỉnh sửa file php.ini (thường ở /etc/php/8.x/fpm/php.ini hoặc /etc/php.ini).
Giá trị khuyến nghị:
- upload_max_filesize = 64M
- post_max_size = 64M
- memory_limit = 128M (để đảm bảo đủ bộ nhớ xử lý file)
- max_execution_time = 300 (giây)
- Trong PHP: tăng max_execution_time lên 300.
- Trong Nginx: thêm proxy_read_timeout 300; và fastcgi_read_timeout 300; trong block location ~ .php$.
Sau đó restart PHP-FPM: sudo systemctl restart php8.x-fpm (thay 8.x bằng phiên bản PHP bạn dùng).
Thời gian xử lý không đủ (max_execution_time và proxy_read_timeout)
Khi upload file lớn hoặc nhiều file cùng lúc, PHP và Nginx có thể timeout nếu thời gian xử lý quá ngắn. Mặc định, max_execution_time trong PHP là 30 giây. Đối với file ảnh lớn hoặc video, con số này thường không đủ.
Quyền sở hữu thư mục wp-content/uploads
Nginx thường chạy dưới user www-data, trong khi file WordPress có thể thuộc về user khác. Nếu thư mục wp-content/uploads không có quyền ghi cho user www-data, upload sẽ thất bại. Lỗi thường hiển thị là “Unable to create directory” hoặc “Could not write file”.
Giải pháp: Đặt ownership đúng cho toàn bộ thư mục WordPress, đặc biệt là wp-content:
sudo chown -R www-data:www-data /path/to/wordpress/ sudo chmod -R 755 /path/to/wordpress/ sudo chmod -R 775 /path/to/wordpress/wp-content/uploads/
Lưu ý: Không nên đặt 777 vì có thể gây nguy cơ bảo mật. Thư mục uploads cần quyền ghi cho nhóm www-data, và 775 là an toàn.
Cấu hình SSL và HTTPS
Một số lỗi upload khi dùng HTTPS đến từ việc Nginx không forward đúng header hoặc chứng chỉ SSL có vấn đề. Kiểm tra cấu hình SSL trong Nginx có bao gồm các tham số proxy_set_header đầy đủ hay không. Thiếu header X-Forwarded-Proto có thể làm WordPress nhận sai URL dẫn đến lỗi upload.
Thêm vào block server hoặc location cần thiết:
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
Hướng Dẫn Chi Tiết Khắc Phục WordPress Upload Nginx Error

Thực hiện lần lượt và kiểm tra sau mỗi bước.
Bước 1: Xác định loại lỗi cụ thể
Khi gặp lỗi upload, hãy kiểm tra log của Nginx và PHP để biết chính xác mã lỗi và thông báo. Các file log thường nằm ở:
- Nginx access log: /var/log/nginx/access.log
- Nginx error log: /var/log/nginx/error.log
- PHP-FPM error log: /var/log/php8.x-fpm.log hoặc /var/log/php-fpm/error.log
Dùng lệnh tail để xem log thời gian thực: tail -f /var/log/nginx/error.log
Bước 2: Tăng giới hạn kích thước file trong Nginx
Mở file cấu hình site của bạn:
sudo nano /etc/nginx/sites-available/your-site.conf
Tìm block server và thêm dòng:
client_max_body_size 64M;
Nếu site dùng reverse proxy, hãy thêm vào block location chính. Lưu file và reload Nginx.
Bước 3: Điều chỉnh cấu hình PHP
Mở file php.ini:
sudo nano /etc/php/8.1/fpm/php.ini
Tìm và sửa các dòng sau:
upload_max_filesize = 64M post_max_size = 64M max_execution_time = 300 memory_limit = 256M
Restart PHP-FPM:
sudo systemctl restart php8.1-fpm
Bước 4: Kiểm tra và sửa quyền thư mục
Đảm bảo thư mục wp-content/uploads tồn tại và có quyền ghi:
sudo mkdir -p /path/to/wordpress/wp-content/uploads sudo chown -R www-data:www-data /path/to/wordpress/wp-content/uploads sudo chmod -R 775 /path/to/wordpress/wp-content/uploads
Nếu bạn dùng FTP để upload file, hãy chắc chắn rằng user FTP có quyền ghi vào thư mục này.
Bước 5: Tối ưu cấu hình Nginx cho WordPress
Thêm các block location phù hợp cho file PHP và static file:
location / { try_files $uri $uri/ /index.php?$args;
} location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; fastcgi_read_timeout 300;
} location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; add_header Cache-Control "public, immutable";
}
Bước 6: Kiểm tra plugin bảo mật và cache
Một số plugin bảo mật như Wordfence, Sucuri hoặc plugin cache như W3 Total Cache, WP Super Cache có thể chặn upload nếu cấu hình sai. Tạm thời vô hiệu hóa tất cả plugin, thử upload lại. Nếu thành công, kích hoạt từng plugin để tìm ra plugin gây lỗi.
Bước 7: Kiểm tra file.htaccess (nếu có chuyển từ Apache)
Nếu bạn chuyển từ Apache sang Nginx, file.htaccess không có tác dụng. Hãy xóa hoặc đổi tên file.htaccess trong thư mục WordPress để tránh xung đột. Nginx không đọc file này, nhưng nếu có redirect rule sai, nó có thể gây lỗi.
Các Lỗi Cụ Thể Thường Gặp Và Cách Xử Lý
Lỗi 413 Request Entity Too Large
Nguyên nhân: client_max_body_size quá nhỏ. Giải pháp tăng giá trị lên 64M hoặc 128M. Kiểm tra cả trong Nginx và PHP.
Lỗi 504 Gateway Time-out
Nguyên nhân: thời gian xử lý của PHP hoặc proxy quá ngắn. Tăng max_execution_time, fastcgi_read_timeout và proxy_read_timeout.
Lỗi “The uploaded file could not be moved to wp-content/uploads”
Nguyên nhân: quyền ghi thư mục uploads. Sửa owner thành www-data và phân quyền 775.
Lỗi “HTTP error” không rõ ràng
Nguyên nhân: có thể do plugin hoặc theme xung đột, hoặc giới hạn memory của PHP. Kiểm tra memory_limit và tăng lên 256M. Vô hiệu hóa tất cả plugin để thử.
Phân Biệt Lỗi WordPress Upload Trên Nginx Và Apache

| Tiêu chí | Nginx | Apache |
|---|---|---|
| Cấu hình giới hạn kích thước | client_max_body_size trong file.conf | LimitRequestBody trong.htaccess hoặc httpd.conf |
| File cấu hình động | Không hỗ trợ.htaccess, cần reload server | Có thể thay đổi cấu hình qua.htaccess, không cần restart |
| Hiệu suất với file tĩnh | Cao hơn, xử lý đồng thời tốt | Thấp hơn, dùng thread hoặc process |
| Cách xử lý PHP | Thường dùng PHP-FPM qua socket | Có thể dùng mod_php hoặc CGI |
| Lỗi phổ biến khi upload | 413, 504, permission | 403, 500, permission |
Hiểu rõ sự khác biệt giúp bạn tránh mất thời gian tìm kiếm giải pháp không phù hợp. Nginx yêu cầu bạn can thiệp trực tiếp vào file cấu hình và reload server mỗi khi thay đổi, trong khi Apache có thể linh hoạt hơn với.htaccess.
Sai Lầm Thường Gặp Khi Xử Lý WordPress Upload Nginx Error
- Chỉ sửa một bên: Nhiều người chỉ tăng client_max_body_size mà quên điều chỉnh PHP, dẫn đến lỗi vẫn còn.
- Đặt quyền 777 cho toàn bộ thư mục: Gây nguy cơ bảo mật nghiêm trọng, chỉ nên dùng 775 cho uploads và 755 cho phần còn lại.
- Không kiểm tra log: Chỉ dựa vào thông báo lỗi trên màn hình mà không xem log server, dẫn đến chẩn đoán sai.
- Sửa sai file cấu hình: Ví dụ sửa file nginx.conf thay vì file cấu hình site cụ thể, khiến thay đổi không có hiệu lực.
- Quên restart service: Sau khi sửa cấu hình Nginx và PHP, cần reload/restart để áp dụng thay đổi.
Lưu Ý Quan Trọng Khi Cấu Hình Upload Trên Nginx

Luôn kiểm tra phiên bản PHP và Nginx bạn đang dùng. Các phiên bản cũ có thể có hành vi khác nhau. Sử dụng lệnh nginx -v và php -v để xác định.
Nếu bạn dùng WordPress Multisite, mỗi site con có thư mục uploads riêng. Hãy đảm bảo tất cả các thư mục đều có quyền ghi chính xác.
Hãy kiểm tra thêm upload_max_filesize và post_max_size trong php.ini. Cả ba giá trị phải đồng bộ. Nếu vẫn lỗi, kiểm tra xem có dòng client_max_body_size nào khác trong block location phủ lên không. Đôi khi có nhiều cấp độ cấu hình (http, server, location) và giá trị nhỏ hơn sẽ được ưu tiên.
Lỗi “Unable to create directory” xuất hiện khi upload ảnh, khắc phục thế nào?
Lỗi này thường do thư mục uploads không có quyền ghi cho Nginx. Chạy lệnh sudo chown -R www-data:www-data /path/to/wp-content/uploads và sudo chmod -R 775 /path/to/wp-content/uploads. Nếu vẫn lỗi, kiểm tra xem có plugin bảo mật nào chặn tạo thư mục không.
Sau khi sửa cấu hình, website báo lỗi 502 Bad Gateway. Làm sao?
Lỗi 502 thường do PHP-FPM không chạy hoặc socket sai. Kiểm tra trạng thái PHP-FPM: sudo systemctl status php8.1-fpm. Nếu không chạy, khởi động lại. Kiểm tra đường dẫn socket trong file cấu hình Nginx (thường là unix:/var/run/php/php8.1-fpm.sock). Đảm bảo đường dẫn đúng và file socket tồn tại.
Tôi có thể upload file nhỏ nhưng file lớn thì báo lỗi HTTP error, nguyên nhân?
Đây là dấu hiệu của giới hạn kích thước file. Nếu file nhỏ dưới 1MB upload được, nhưng file 5MB thì lỗi, chắc chắn client_max_body_size hoặc upload_max_filesize đang quá thấp. Ngoài ra, memory_limit cũng có thể là nguyên nhân nếu file yêu cầu xử lý ảnh lớn.
Có cần plugin nào hỗ trợ upload lớn trên Nginx không?
Không bắt buộc. Bạn hoàn toàn có thể cấu hình thủ công. Tuy nhiên, một số plugin như “Increase Maximum Upload File Size” hoặc “WP Maximum Upload File Size” có thể giúp thay đổi giới hạn PHP thông qua giao diện admin nếu host cho phép. Tuy nhiên, phương pháp thủ công vẫn đáng tin cậy hơn.
Kết Luận
WordPress upload Nginx error không phải là vấn đề phức tạp nếu bạn hiểu rõ cơ chế hoạt động của Nginx và PHP-FPM. Nguyên nhân chủ yếu đến từ ba nhóm: giới hạn kích thước file, quyền thư mục và thời gian xử lý. Bằng cách tăng client_max_body_size, upload_max_filesize, post_max_size, sửa quyền sở hữu thư mục uploads và tăng timeout, bạn có thể giải quyết hầu hết các lỗi upload.
Luôn kiểm tra log server để xác định chính xác mã lỗi, thay vì đoán mò. Thực hiện các thay đổi một cách có hệ thống và test từng bước. Với hướng dẫn chi tiết trong bài viết này, bạn đã có đầy đủ kiến thức và công cụ để khắc phục triệt để mọi lỗi upload trên Nginx. Hãy áp dụng ngay để website WordPress của bạn hoạt động ổn định và mượt mà hơn.
- WordPress Email Automation Lỗi: Nguyên Nhân, Cách Khắc Phục Từ A-Z (2025)
- WordPress Editor Role Là Gì? Hướng Dẫn Chi Tiết Từ A-Z Cho Người Mới
- Khắc phục lỗi Elementor Undefined Function: Nguyên nhân và giải pháp chi tiết từ A đến Z
- Cách Xử Lý Plugin WordPress Conflict Với Elementor Hiệu Quả Nhất
- WordPress Login Security Error: Nguyên Nhân, Cách Khắc Phục và Phòng Ngừa Toàn Diện
















