Yêu cầu 413 Thực thể yêu cầu quá lớn trên Nginx với khách hàng_max_body_size


54

Tôi đang tải lên tệp 26Gb, nhưng tôi đang nhận được:

413 Request Entity Too Large

Tôi biết, điều này có liên quan đến client_max_body_size, vì vậy tôi có thông số này được đặt thành 30000M.

  location /supercap {
    root  /media/ss/synology_office/server_Seq-Cap/;
    index index.html;
    proxy_pass  http://api/supercap;
  }

  location /supercap/pipe {
    client_max_body_size 30000M;
    client_body_buffer_size 200000k;
    proxy_pass  http://api/supercap/pipe;
    client_body_temp_path /media/ss/synology_office/server_Seq-Cap/tmp_nginx;
  }

Nhưng tôi vẫn gặp lỗi này khi toàn bộ tập tin đã được tải lên.

Câu trả lời:


70

Sửa đổi tệp cấu hình NGINX

sudo nano /etc/nginx/nginx.conf

Tìm kiếm biến này : client_max_body_size. Nếu bạn tìm thấy nó, chỉ cần tăng kích thước của nó lên 100M, ví dụ. Nếu nó không tồn tại, thì bạn có thể thêm nó vào bên trong và ở cuối http

client_max_body_size 100M;

Khởi động lại nginx để áp dụng các thay đổi.

sudo service nginx restart

Sửa đổi tệp PHP.ini cho giới hạn tải lên

Không cần thiết cho tất cả các cấu hình, nhưng bạn cũng có thể phải sửa đổi cài đặt tải lên PHP để đảm bảo rằng không có gì vượt quá giới hạn bởi các cấu hình php.

Nếu bạn đang sử dụng PHP5-FPM, hãy sử dụng lệnh sau,

sudo nano /etc/php5/fpm/php.ini

Nếu bạn đang sử dụng PHP7.0-FPM, hãy sử dụng lệnh sau,

sudo nano /etc/php/7.0/fpm/php.ini

Bây giờ hãy tìm chỉ thị từng cái một

upload_max_filesize
post_max_size

và tăng giới hạn của nó lên 100M, theo mặc định chúng là 8M và 2M.

upload_max_filesize = 100M
post_max_size = 100M

Cuối cùng lưu nó và khởi động lại PHP.

Người dùng PHP5-FPM sử dụng điều này,

sudo service php5-fpm restart

Người dùng PHP7.0-FPM sử dụng điều này,

sudo service php7.0-fpm restart

Nó sẽ hoạt động tốt !!!


1
tại sao 100Mb cho client_max_body_size trong nginx.conf?
dùng2979409

bạn có thể đặt bất kỳ giá trị nào theo yêu cầu của mình nhưng 100 mb là đủ
Sukhjinder Singh

nhưng tôi đang tải lên tới 30Gb tệp.
dùng2979409

tìm một tệp có kích thước tối đa và cho phép nhiều hơn tệp đó
Sukhjinder Singh

vậy tại sao client_max_body_size không hoạt động bên trong / location của tôi?
dùng2979409

9

Nếu bạn đang tải lên các tệp có kích thước đó, có lẽ bạn chỉ nên vô hiệu hóa kiểm tra kích thước cơ thể hoàn toàn với:

client_max_body_size 0;

3

Với sự tôn trọng, tôi không chắc tại sao bạn lại sử dụng http để truyền nhiều dữ liệu đó. Tôi có xu hướng thực hiện chuyển khoản lớn của tôi qua ssh

//such as:
tar cjf - /path/to/stuff | ssh user@remote-host "cd /path/to/remote/stuff;tar xjf -"

... cung cấp cho tôi một giao dịch nén bzip. Nhưng nếu tôi cần thực hiện chuyển khoản có thể tiếp tục, tôi có thể sử dụng sftp, lftp, thậm chí rsync. Bất kỳ ai trong số họ (hoặc dẫn xuất hoặc anh chị em của họ) đều có khả năng

  1. sử dụng một kênh được mã hóa nếu muốn
  2. nối lại chuyển khoản bị gián đoạn và
  3. nén chuyển

Chỉ một trong số đó sẽ là một tùy chọn cho bạn khi cố gắng tải lên qua http (cụ thể là, số 1 nếu bạn ở trên https).

Tôi hy vọng bạn sẽ xem xét bất kỳ điều nào ở trên hoặc một vài lựa chọn thay thế khác.


Điều này giống như không có gì để làm với câu hỏi.
Zenklys

1
Nó chỉ ở đó bởi vì anh chàng đang chuyển các tập tin quy mô Blueray qua http. Không có thêm chi tiết về lý do tại sao một người nào đó muốn làm điều này, tôi đánh giá rằng anh chàng hỏi câu hỏi sẽ được phục vụ tốt nhất bằng cách không trả lời thành công câu hỏi. Tôi thừa nhận rằng sự thiếu hiểu biết của tôi về những chi tiết đó là một vấn đề.
Matt Murphy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.