❓ Vấn Đề

Khi sử dụng WordPress trên máy chủ Nginx + PHP-FPM, bạn có thể gặp lỗi khi upload ảnh lớn (ví dụ 900x800 trở lên). Một số lỗi phổ biến:

  • 413 Request Entity Too Large
  • upstream sent too big header while reading response header from upstream
  • Trang trắng hoặc lỗi không rõ khi upload qua /wp-admin/async-upload.php

🔍 Nguyên Nhân

Lỗi này xảy ra khi cấu hình Nginx hoặc PHP không đủ bộ nhớ/buffer để xử lý các request lớn. Cụ thể:

  • client_max_body_size trong Nginx quá nhỏ → chặn file upload
  • fastcgi_buffer_size, fastcgi_buffers quá thấp → không đủ bộ đệm để xử lý phản hồi từ PHP-FPM
  • large_client_header_buffers quá nhỏ → lỗi với các header lớn

✅ Cách Khắc Phục

Mở file cấu hình chính của Nginx, thường là:

/etc/nginx/nginx.conf

Thêm đoạn sau vào cuối block http {} (nhưng vẫn nằm trong {}):

http {
    # ... các cấu hình khác phía trên

    # === Cấu hình hỗ trợ upload và buffer response lớn ===

    client_max_body_size 64M;  # Giới hạn tối đa request body (nên khớp với post_max_size của PHP)
    client_body_buffer_size 512k;  # Buffer lưu trữ body trước khi ghi ra file tạm

    # Cấu hình buffer cho header từ client lớn (tránh lỗi "request header too large")
    large_client_header_buffers 4 32k;

    # Cấu hình FastCGI để xử lý phản hồi PHP lớn
    fastcgi_buffer_size 128k;
    fastcgi_buffers 8 128k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_read_timeout 300;

    # === Kết thúc cấu hình bổ sung ===
}

Sau đó kiểm tra và reload Nginx:

sudo nginx -t && sudo systemctl reload nginx

🧠 Ghi chú thêm

  • Bạn không cần phải đặt lại ini_set() trong PHP nếu cấu hình PHP (upload_max_filesize, post_max_size,...) đã phù hợp.
  • Cấu hình này áp dụng cho tất cả các website/domain trên VPS (vì đặt ở http block).
  • Với hệ thống sử dụng Cloudflare, lỗi có thể bị ẩn → kiểm tra thêm log Nginx: /var/log/nginx/error.log