一、直接上传或同步文件到服务器后,更新文件索引
#扫描所有用户的所有文件,并更新索引。
sudo -u www php occ files:scan --all
注意 PHP 和 OCC 文件路径,也可以直接写绝对路径:
sudo -u www /usr/local/php8.0/bin/php /home/wwwroot/www.example.com/occ files:scan --all
#只扫描指定用户或者指定文件夹,并更新索引。
列出所有用户:
sudo -u www php occ user:list
只扫描 test 用户的文件:
sudo -u www php occ files:scan test
扫描用户的指定目录:
sudo -u www php occ files:scan --path="/test/files/download"
二、Nextcloud 伪静态规则
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
# HTTP response headers borrowed from Nextcloud `.htaccess`
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;
#原有的基础上添加 /index.php$request_uri;
index index.php index.html /index.php$request_uri;
# Rule borrowed from `.htaccess` to handle Microsoft DAV clients
location = / {
if ( $http_user_agent ~ ^DavClnt ) {
return 302 /remote.php/webdav/$is_args$args;
}
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ^~ /.well-known {
# The rules in this block are an adaptation of the rules
# in `.htaccess` that concern `/.well-known`.
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location /.well-known/acme-challenge { try_files $uri $uri/ =404; }
location /.well-known/pki-validation { try_files $uri $uri/ =404; }
# Let Nextcloud's API for `/.well-known` URIs handle all other
# requests by passing them to the front-end controller.
return 301 /index.php$request_uri;
}
# Rules borrowed from `.htaccess` to hide certain paths from clients
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { return 404; }
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; }
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; # Avoid sending the security headers twice
fastcgi_param front_controller_active true; # Enable pretty urls
fastcgi_pass unix:/tmp/php-cgi.sock; #自行修改为对应路径
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ \.(?:css|js|svg|gif|png|jpg|ico)$ {
try_files $uri /index.php$request_uri;
expires 6M; # Cache-Control policy borrowed from `.htaccess`
access_log off; # Optional: Don't log access to assets
}
location ~ \.woff2?$ {
try_files $uri /index.php$request_uri;
expires 7d; # Cache-Control policy borrowed from `.htaccess`
access_log off; # Optional: Don't log access to assets
}
# Rule borrowed from `.htaccess`
location /remote {
return 301 /remote.php$request_uri;
}
location / {
try_files $uri $uri/ /index.php$request_uri;
}
三:解决423 locked
#临时解决方法
进入维护模式:
sudo -u www php occ maintenance:mode --on
清空 oc_file_locks 表:
delete * from oc_file_locks;
或者
truncate table oc_file_locks;
退出维护模式:
sudo -u www php occ maintenance:mode --off
#彻底解决方法
为 Nextcloud 配置 Redis 缓存,在 config/config.php 文件中添加以下配置:
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'user' => 'Redis用户名',
'password' => 'Redis密码',
'dbindex' => 0,
'timeout' => 1.5,
'read_timeout' => 1.5,
]
四:性能优化
#内存缓存优化
APCu(官方推荐):
安装PHP的APCu扩展,在 config/config.php 文件中添加以下配置:
'memcache.local' => '\OC\Memcache\APCu',
Redis(官方说多服务器可能导致问题,单机速度不如APCu):
'memcache.local' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'user' => 'Redis用户名',
'password' => 'Redis密码',
'dbindex' => 0,
'timeout' => 1.5,
'read_timeout' => 1.5,
]
#PHP优化
upload_max_filesize 5G
post_max_size 5G
max_input_time 3600
max_execution_time 3600
memory_limit = 512M
output_buffering = 0
upload_tmp_dir = /dev/shm/client_body_temp
#NGINX优化
client_max_body_size 5G
fastcgi_read_timeout 3600
client_body_temp_path /dev/shm/client_body_temp
临时文件目录设置为内存时,推荐大内存服务器,务必配置 SWAP。
#如果 Nextcloud 位于 CDN 或者负载均衡后
有前端权限:建议关闭proxy_buffering或增加proxy_max_temp_file_size的值。
无前端权限:add_header X-Accel-Buffering no;
#高上传带宽环境中提高上传性能,调整 Nextcloud 端的块大小(默认为10M)
sudo -u www php occ config:app:set files max_chunk_size --value 20971520