前言
如果你在 Nextcloud 上傳很大的檔案時,在他 assembling 一段時間後有可能會發生上傳失敗的問題。這是因為 Nextcloud 上傳的時候會將檔案分塊,所有碎塊都傳完之後才會將它組裝起來。他會需要這麼做的原因,是因為某些 CDN 會限制單檔上傳上限只有 100MB,所以他這個操作就能繞過這個限制,但可能會產生額外的問題。
太大的檔案會造成組裝合併的時候花更長的時間,而 php-fpm 預設的執行時間又只有 60 秒,所以超過就會超時,而導致上傳失敗。這時候你打開 F12 應該會看到 HTTP 504 Gateway Timeout 類似的文字。因此這邊文章就是來說說如何設定加大執行時間。
操作方式
你有兩種方式可以增大執行時間,一個是直接在 Nginx 定義,另一個是改 php-fpm 的設定檔,當然你兩個都設定是最好。
Nginx 設定檔
前往 /etc/nginx/sites-enabled 並編輯 nextcloud 設定檔。
cd /etc/nginx/sites-enabled && sudo vim nextcloud
找到 location ~ \.php 的段落,並增加一些 fastcgi 的設定值如下方這樣:
location ~ \.php(?:$|/) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
fastcgi_connect_timeout 3600s;
fastcgi_max_temp_file_size 0;
}
主要就是定義那幾行 timeout 時間,把他拖長一點。接著就檢查並重啟 Nginx 就可以囉。
sudo nginx -t && sudo systemctl restart nginx
php-fpm 設定檔
進到 php-fpm 的資料夾,根據不同版本路徑有可能不同,例如說我這裡的版本是 8.4,並編輯 php.ini。
cd /etc/php/8.4/fpm && sudo vim php.ini
這個文件很長,但主要我們就是更新數值而已,如下:
max_execution_time = 3600
max_input_time = 3600
request_terminate_timeout = 600
default_socket_timeout = 600
接著重啟 php-fpm 就好囉。(重啟命令一樣有版本之分)
sudo systemctl restart php8.4-fpm