EDITAȚI | ×
Nextcloud își construiește propria implementare Webdav, Sabredav.
Ar putea fi următoarele module nginx să interfereze? --with-http_dav_module --add-module=/var/tmp/nginx-dav-ext-module
Știe cineva cum ar trebui să le compilez dinamic? Deci, pot să încarc/descărc pe timpul de execuție per configurație de gazdă virtuală?
Mersi :)
EDITARE SFÂRȘIT
Alerg Server Ubuntu 20.04
pe un server personal unde am implementat o instalare manuală a Nextcloud
care funcționează corect cu excepția webdav
.
Toată treaba merge sub nginx 1.19.3
, php-8.0
și FPM
.
Încercarea de a monta directorul privat nextcloud prin davfs:
# mount -t davfs https://drive.example.com/remote.php/dav/files/myuser/ /mnt
Vă rugăm să introduceți numele de utilizator pentru a vă autentifica la server
https://drive.example.com/remote.php/dav/files/myuser/ sau apăsați Enter pentru niciunul.
Nume utilizator: myuser
Vă rugăm să introduceți parola pentru a autentifica utilizatorul myuser cu serverul
https://drive.example.com/remote.php/dav/files/myuser/ sau apăsați Enter pentru niciunul.
Parola:
/sbin/mount.davfs: Montarea a eșuat.
Nu s-a putut autentifica pe server: a fost respinsă Provocarea de bază
Jurnalele Nextcloud legate de cele precedente montură
comanda:
# cat /home/nginx/Tools/nextcloud_data/nextcloud.log
{"reqId":"gf8ZgEQVDV7AoHp667YG","level":2,"time":"2022-04-05T17:50:58+00:00","remoteAddr":"x.y.z.w","user":"-- ","app":"core","method":"OPȚIUNI","url":"/remote.php/dav/files/myuser/","message":"Conectarea a eșuat: 'myuser' (IP la distanță : 'x.y.z.w')","userAgent":"davfs2/1.5.5 neon/0.30.2","version":"23.0.3.2"}
Jurnalele Nginx legate de cele precedente montură
comanda:
# cat /var/log/nginx/nextcloud.log
x.y.z.w drive.example.com - [05/Apr/2022:13:53:31 -0400] „OPȚIUNI /remote.php/dav/files/myuser/ HTTP/1.1” 401 569 „-” „davfs2/1.5.5 neon/0.30.2" "-" "-"
x.y.z.w drive.example.com utilizatorul meu [05/Apr/2022:13:53:57 -0400] „OPȚIUNI /remote.php/dav/files/myuser/ HTTP/1.1” 401 427 „-” „davfs2/1.5.5 neon/0.30.2" "-" "PAROLA CRYPTED_PASSWORD de bază"
Câteva informații irelevante Ubuntu:
# lsb_release -a
Nu sunt disponibile module LSB.
ID distribuitor: Ubuntu
Descriere: Ubuntu 20.04.4 LTS
Lansare: 20.04
Nume de cod: focal
# uname -a
Linux host.example.com 5.4.0-107-generic #121-Ubuntu SMP Joi 24 mar 16:04:27 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Nginx a fost descărcat și compilat din formularul sursă depozit oficial nginx și prin apt:
# apt source nginx
# cd nginx-0.8.54
# editați debian/rules
# dpkg-buildpackage -b nginx
Nginx
versiune, caracteristici și parametri de compilare:
# nginx -vV
Versiunea nginx: nginx/1.19.3
construit de gcc 9.3.0 (Ubuntu 9.3.0-10ubuntu2)
construit cu OpenSSL 1.1.1g 21 aprilie 2020
Suportul TLS SNI activat
configurați argumente: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx. conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx. pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/ nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/ var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module - -cu-http_flv_module --cu-http_gunzip_module --cu-http_gzip_static_module --cu-http_mp4_module --cu-http_random_index_module --cu-http_realip_module --cu-http_secure_link_module --cu-http_slice_link_module --cu-http_slice_module -http_slice_module -http_slice_module-http_module- -cu-http_sub_modul --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fdebug -prefix-map=/var/tmp/nginx-1.19.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl, -z,now -Wl,--as-needed -pie' --add-dynamic-module=/var/tmp/ngx_http_geoip2_module --with-http_geoip_module --with-http_dav_module --add-module=/var/tmp/ nginx-dav-ext-module --without-mail_imap_module --without-mail_pop3_module --without-mail_smtp_module --without-http_limit_conn_module --add-module=/var/tmp/incubator-pagespeed-ngx-1.13-stable/35. --add-module=/home/nginx/Tools/openproject/.rbenv/versions/2.6.1//lib/ruby/gems/2.6.0//gems/passenger-6.0.6/src/nginx_module/
PHP
info:
# php8.0 --versiune
PHP 8.0.15 (cli) (construit: 29 ianuarie 2022 07:24:52) ( NTS )
Drepturi de autor (c) Grupul PHP
Zend Engine v4.0.15, Copyright (c) Zend Technologies
cu Zend OPcache v8.0.15, Copyright (c), de Zend Technologies
# php8.0 -m
[Module PHP]
apcu
bcmath
bz2
calendar
Miez
ctip
răsuci
Data
dom
exif
FFI
informații despre fișier
filtru
ftp
gd
gettext
gmp
hash
iconv
igbinar
imagick
intl
json
libxml
mbstring
memcache
mongodb
mysqli
mysqlnd
openssl
pcntl
pcre
DOP
pdo_mysql
pdo_sqlite
Phar
posix
pspell
Citeste linia
redis
Reflecţie
sesiune
shmop
SimpleXML
săpun
prize
sodiu
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
xsl
Zend OPcache
fermoar
zlib
[Module Zend]
Zend OPcache
Nextcloud
info:
# sudo -u nginx php8.0 /home/nginx/Tools/nextcloud/occ status
- instalat: adevărat
- versiunea: 23.0.3.2
- șirul de versiuni: 23.0.3
- ediție:
- întreţinere: fals
- needDbUpgrade: false
- numele produsului: Nextcloud
- extinsSupport: fals
Fișierul gazdă virtuală Nginx:
# cat /etc/nginx/sites-enabled/nextcloud.conf
cat /etc/nginx/sites-enabled/nextcloud.conf
php-handler în amonte {
server unix:/var/run/php/php8.0-fpm.sock;
}
# Setați opțiunile de control al memoriei cache „imuabile” numai pentru activele cu un argument „v”
harta $arg_v $asset_immutable {
"" "";
implicit „imuabil”;
}
Server {
asculta 80;
asculta [::]:80;
nume_server drive.foobar.es drive.foobar.com cloud.foobar.es cloud.foobar.com cloud.example.es cloud.example.com cloud.example.net cloud.example.org cloud.example.info drive.example. es drive.example.com drive.example.org drive.example.net drive.example.info drive.example.cat cloud.example.cat;
access_log /var/log/nginx/nextcloud.access.log principal;
error_log /var/log/nginx/nextcloud.error.log crit;
returnează 301 https://$host$request_uri;
# return 302 https://$host$request_uri;
}
Server {
asculta 443 ssl http2;
asculta [::]:443 ssl http2;
nume_server drive.foobar.es drive.foobar.com cloud.foobar.es cloud.foobar.com cloud.example.es cloud.example.com cloud.example.net cloud.example.org cloud.example.info drive.example. es drive.example.com drive.example.org drive.example.net drive.example.info drive.example.cat cloud.example.cat;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
includ /etc/nginx/conf.d-enabled/ssl-security.conf;
ssl_trusted_certificate /etc/letsencrypt/live/example.es/cert.pem;
access_log /var/log/nginx/nextcloud_ssl.access.log principal;
error_log /var/log/nginx/nextcloud_ssl.error.log crit;
# Codi per habilitar renovación dels certificats Letsencrypt
includ /etc/nginx/snippets/letsencrypt-cert-renewal-dir.conf;
dacă ($http_host != "drive.example.com" ) {
rescrie ^ https://drive.example.com$request_uri permanent;
pauză;
}
# Setări HSTS
# AVERTISMENT: adăugați opțiunea de preîncărcare numai după ce ați citit despre
# consecințele în hstspreload.org. Această opțiune
# va adăuga domeniul la o listă hardcoded care este expediată
# în toate browserele majore și a fost eliminat din această listă
# ar putea dura câteva luni.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" mereu;
locație = /robots.txt {
permite tuturor;
log_not_found off;
access_log off;
}
# Faceți o excepție regex pentru `/.well-known`, astfel încât clienții să poată încă
# accesați-l în ciuda existenței regulii regex
# `location ~ /(\.|autotest|...)` care altfel ar gestiona cererile
# pentru `/.cunoscut`.
locație ^~ /.cunoscut {
# Regulile din acest bloc sunt o adaptare a regulilor
# în `.htaccess` care se referă la `/.well-cunoscut`.
locație = /.well-cunoscut/carddav { return 301 /remote.php/dav/; }
locație = /.well-cunoscut/caldav { return 301 /remote.php/dav/; }
locație /.well-known/acme-challenge { try_files $uri $uri/ =404; }
locație /.well-cunoscut/pki-validation { try_files $uri $uri/ =404; }
# Lăsați API-ul Nextcloud pentru URI `/.well-known` să se ocupe de toate celelalte
# solicitări prin transmiterea acestora către controlerul front-end.
return 301 /index.php$request_uri;
}
#locație ^~ / {
# setați dimensiunea maximă de încărcare și creșteți timpul de expirare a încărcării:
client_max_body_size 50G;
client_body_timeout 300s;
fastcgi_buffers 64 4K;
client_body_temp_path /home/nginx/Tools/nextcloud_data/tmp/;
fastcgi_param PHP_VALUE "upload_tmp_dir=/home/nginx/Tools/nextcloud_data/tmp/;";
fastcgi_param PHP_VALUE "output_buffering=0;";
add_header X-Accel-Buffering nr;
# Deoarece php-fpm nu poate citi setările PHP în .htaccess aceste setări
# trebuie setat în nextcloud/.user.ini
# fastcgi_param PHP_VALUE "upload_max_filesize=5M;\n error_reporting=E_ALL;";
fastcgi_param PHP_VALUE "upload_max_filesize=50G;";
fastcgi_param PHP_VALUE "post_max_size=50G;";
fastcgi_param PHP_VALUE "max_input_time=4600;";
fastcgi_param PHP_VALUE "max_execution_time=3600;";
fastcgi_param PHP_VALUE "request_terminate_timeout=3600;";
fastcgi_read_timeout 3600;
# Activați gzip, dar nu eliminați anteturile ETag
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expirat 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/wasm 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;
# Pagespeed nu este acceptat de Nextcloud, deci dacă serverul dvs. este construit
# cu modulul `ngx_pagespeed`, decomentați această linie pentru a o dezactiva.
viteza paginii oprită;
# Antete de răspuns HTTP împrumutate de la Nextcloud `.htaccess`
add_header Referrer-Policy „no-referrer” întotdeauna;
add_header X-Content-Type-Options „nosniff” întotdeauna;
add_header X-Download-Options „noopen” întotdeauna;
add_header X-Frame-Options „SAMEORIGIN” întotdeauna;
add_header X-Permitted-Cross-Domain-Policies „niciunul” întotdeauna;
add_header X-Robots-Tag „none” întotdeauna;
add_header X-XSS-Protection „1; mod=bloc” întotdeauna;
# Eliminați X-Powered-By, care este o scurgere de informații
fastcgi_hide_header X-Powered-By;
# Calea către rădăcina instalării dvs
root /home/nginx/Tools/nextcloud/;
# Specificați cum să gestionați directoarele -- specificând `/index.php$request_uri`
# aici ca alternativă înseamnă că Nginx prezintă întotdeauna comportamentul dorit
# când un client solicită o cale care corespunde unui director care există
# pe server. În special, dacă acel director conține un fișier index.php,
# acel fișier este servit corect; dacă nu, atunci cererea este transmisă către
# controlerul front-end. Acest comportament consistent înseamnă că nu avem nevoie
# pentru a specifica reguli personalizate pentru anumite căi (de exemplu, imagini și alte materiale,
# `/updater`, `/ocm-provider`, `/ocs-provider`), și astfel
# `try_files $uri $uri/ /index.php$request_uri`
# oferă întotdeauna comportamentul dorit.
index index.php index.html /index.php$request_uri;
# Regulă împrumutată de la `.htaccess` pentru a gestiona clienții Microsoft DAV
locație = / {
if ( $http_user_agent ~ ^DavClnt ) {
returnează 302 /remote.php/webdav/$is_args$args;
}
}
# Reguli împrumutate de la `.htaccess` pentru a ascunde anumite căi de la clienți
locație ~ ^/(?:build|tests|config|lib|3rdparty|şabloane|date)(?:$|/) { return 404; }
locație ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; }
# Asigurați-vă că acest bloc, care transmite fișiere PHP către procesul PHP, este deasupra blocurilor
# care se ocupă de active statice (după cum se vede mai jos). Dacă acest bloc nu este declarat mai întâi,
# atunci Nginx va întâlni o buclă de rescriere infinită când va adăuga `/index.php`
# la URI, rezultând un răspuns de eroare HTTP 500.
locație ~ \.php(?:$|/) {
# Necesar pentru suportul vechi
rescrie ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|. +\/richdocumentscode\/proxy) /index.php$request_uri;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
setați $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 activat;
fastcgi_param modHeadersAvailable true; # Evitați trimiterea antetelor de securitate de două ori
fastcgi_param front_controller_active true; # Activați URL-uri frumoase
fastcgi_pass php-handler;
fastcgi_intercept_errors activat;
fastcgi_request_buffering dezactivat;
fastcgi_max_temp_file_size 0;
}
locație ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|hartă)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463, $asset_immutable";
access_log off; # Opțional: nu înregistrați accesul la active
locație ~ \.wasm$ {
aplicație de tip_implicit/wasm;
}
}
locație ~ \.woff2?$ {
try_files $uri /index.php$request_uri;
expiră 7d; # Politica Cache-Control împrumutată de la `.htaccess`
access_log off; # Opțional: nu înregistrați accesul la active
}
# Suprimarea mesajelor de jurnal…
# Dacă vedeți mesaje fără sens în fișierul dvs. de jurnal, de exemplu client refuzat de configurația serverului: /var/www/data/htaccesstest.txt, adăugați această secțiune la configurația dvs. nginx pentru a le suprima:
locație = /data/htaccesstest.txt {
permite tuturor;
log_not_found off;
access_log off;
}
# Regulă împrumutată de la `.htaccess`
locație /la distanță {
return 301 /remote.php$request_uri;
}
Locație / {
try_files $uri $uri/ /index.php$request_uri;
}
#}
}
Fișierul de configurare Nginx SSL inclus în fișierul de configurare a gazdei virtuale nginx
:
# cat /etc/nginx/conf.d-enabled/ssl-security.conf
# activați reluarea sesiunii pentru a îmbunătăți performanța https
# vincent.bernat.im/en/blog/2011-ssl-session-reuse-rfc5077.html
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# Parametru Diffie-Hellman pentru suitele de criptare DHE, 2048 de biți recomandat
#ssl_dhparam /etc/ssl/certs/dhparam.pem;
# openssl dhparam -dsaparam -out /etc/ssl/private/dhparam.pem 4096
ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
# permite protecția serverului împotriva atacurilor BEAST
# blog.ivanristic.com/2013/09/is-beast-still-a-threat.html
ssl_prefer_server_ciphers activat;
# dezactivați SSLv3 (activat implicit din nginx 0.8.19), deoarece este mai puțin sigur decât TLS en.wikipedia.org/wiki/Secure_Sockets_Layer#SSL_3.0
# Protocoale dezactivate: TLSv1 TLSv1.1
ssl_protocols SSLv3 TLSv1.2 TLSv1.3;
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# cifre alese pentru secretul direct și compatibilitate
# blog.ivanristic.com/2013/08/configuring-apache-nginx-and-openssl-for-forward-secrecy.html
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256-SHA256-ECDSA-CMHE256-ECDSA-CEDHE256-ECDSA-CED4-ECDHE RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHAES-SHA256:ECDHE-ECDSA-SHA256: SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA256:-SHA DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES- CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
# activați capsarea ocsp (mecanism prin care un site poate transmite vizitatorilor informații despre revocarea certificatului într-o manieră scalabilă, care păstrează confidențialitatea)
# blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox/
resolver 8.8.8.8 8.8.4.4;
ssl_capsare activată;
ssl_stapling_verify on;
# ssl_trusted_certificate /etc/nginx/ssl/star_forgott_com.crt;
# config pentru a activa HSTS(HTTP Strict Transport Security) developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security
# pentru a evita eliminarea ssl en.wikipedia.org/wiki/SSL_stripping#SSL_stripping
# și hstspreload.org/
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
# cat /etc/nginx/fastcgi
fastcgi.conf fastcgi_params fastcgi_params.dpkg-dist
root@we:~# cat /etc/nginx/fastcgi_params
fastcgi_param QUERY_STRING $șir_interogare;
fastcgi_param REQUEST_METHOD $cerere_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param HTTPS $https dacă_nu_vide;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $adresă_la distanță;
fastcgi_param REMOTE_PORT $port_la distanță;
fastcgi_param SERVER_ADDR $adresa_server;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# Numai PHP, necesar dacă PHP a fost construit cu --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
### SETARE variabile GEOIP ###
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3;
fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;
fastcgi_param GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;
fastcgi_param GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3;
fastcgi_param GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name;
fastcgi_param GEOIP_REGION $geoip_region;
fastcgi_param GEOIP_CITY $geoip_city;
fastcgi_param GEOIP_POSTAL_CODE $geoip_postal_code;
fastcgi_param GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;
fastcgi_param GEOIP_LATITUDE $geoip_latitude;
fastcgi_param GEOIP_LONGITUDE $geoip_longitude;
Multumesc mult anticipat.
Sper sa te ajute cineva :)