РЕДАКТИРОВАТЬ
Nextcloud создает собственную реализацию Webdav, Sabredav.
Могут ли мешать следующие модули nginx? --with-http_dav_module --add-module=/var/tmp/nginx-dav-ext-module
Кто-то знает, как мне их скомпилировать динамически? Итак, я могу загружать/выгружать во время выполнения конфигурацию виртуального хоста?
Спасибо :)
РЕДАКТИРОВАТЬ КОНЕЦ
я бегу Сервер Ubuntu 20.04
на личном сервере, где я развернул ручную установку Nextcloud
который запущен и работает правильно, за исключением вебдав
.
Все работает под нгинкс 1.19.3
, PHP-8.0
и ФПМ
.
Попытка смонтировать частный каталог nextcloud через davfs:
# mount -t davfs https://drive.example.com/remote.php/dav/files/myuser/ /mnt
Пожалуйста, введите имя пользователя для аутентификации на сервере
https://drive.example.com/remote.php/dav/files/myuser/ или нажмите Enter, если нет.
Имя пользователя: myuser
Пожалуйста, введите пароль для аутентификации пользователя myuser с сервером
https://drive.example.com/remote.php/dav/files/myuser/ или нажмите Enter, если нет.
Пароль:
/sbin/mount.davfs: Ошибка монтирования.
Не удалось пройти аутентификацию на сервере: отклонен базовый вызов
Журналы Nextcloud, связанные с предыдущим устанавливать
команда:
# кошка /home/nginx/Инструменты/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":"OPTIONS","url":"/remote.php/dav/files/myuser/","message":"Ошибка входа: 'myuser' (удаленный IP : 'x.y.z.w')", "userAgent": "davfs2/1.5.5 neon/0.30.2", "версия": "23.0.3.2"}
Журналы Nginx, связанные с предыдущим устанавливать
команда:
# кошка /var/log/nginx/nextcloud.log
x.y.z.w drive.example.com - [05/Apr/2022:13:53:31 -0400] "ОПЦИИ /remote.php/dav/files/myuser/ HTTP/1.1" 401 569 "-" "davfs2/1.5.5 неон/0,30,2" "-" "-"
xyzw drive.example.com myuser [05/Apr/2022:13:53:57 -0400] "ОПЦИИ /remote.php/dav/files/myuser/ HTTP/1.1" 401 427 "-" "davfs2/1.5.5 neon/0.30.2" "-" "Основной CRYPTED_PASSWORD"
Некоторая нерелевантная информация об Ubuntu:
# lsb_release -a
Нет доступных модулей LSB.
Идентификатор дистрибьютора: Ubuntu
Описание: Ubuntu 20.04.4 LTS
Релиз: 20.04
Кодовое название: фокальный
# имя-а
Linux host.example.com 5.4.0-107-generic #121-Ubuntu SMP Чт, 24 марта, 16:04:27 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Nginx был загружен и скомпилирован из исходников из официального репозитория nginx и через apt:
# подходящий источник nginx
# cd nginx-0.8.54
# редактировать дебиан/правила
# dpkg-buildpackage -b nginx
Nginx
версия, особенности и параметры компиляции:
# nginx -vV
Версия nginx: nginx/1.19.3
построен gcc 9.3.0 (Ubuntu 9.3.0-10ubuntu2)
построено с использованием OpenSSL 1.1.1g 21 апреля 2020 г.
Поддержка TLS SNI включена
настроить аргументы: --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 - -with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module - -с-http_sub_module --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, теперь -Wl, --по мере необходимости -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 --без mail_imap_module --без mail_pop3_module --без mail_smtp_module --без http_limit_conn_module --add-module=/var/tmp/incubator-pagespeed-ngx-1.13.35.2-stable/ --add-module=/home/nginx/Инструменты/openproject/.rbenv/versions/2.6.1//lib/ruby/gems/2.6.0//gems/passenger-6.0.6/src/nginx_module/
PHP
Информация:
# php8.0 --версия
PHP 8.0.15 (cli) (построено: 29 января 2022 г., 07:24:52) ( NTS )
Авторское право (c) Группа PHP
Zend Engine v4.0.15, авторское право (c) Zend Technologies
с Zend OPcache v8.0.15, Copyright (c), Zend Technologies
# php8.0 -м
[Модули PHP]
апку
bcm математика
бз2
календарь
Основной
ctype
завиток
датировать
дом
exif
FFI
информация о файле
фильтр
фтп
гд
получить текст
гмп
хэш
значокv
многозначный
воображение
международный
json
libxml
mbstring
кэш памяти
монгодб
mysqli
mysqlnd
openssl
pcntl
пкре
ЗОП
pdo_mysql
pdo_sqlite
Фар
posix
заклинание
строка чтения
редис
Отражение
сеанс
швабра
ПростойXML
мыло
Розетки
натрий
уровень звукового давления
sqlite3
стандартный
sysvmsg
sysvsem
sysvshm
токенизатор
XML
xmlreader
xmlrpc
xmlwriter
xsl
Zend OPcache
молния
zlib
[Зенд-модули]
Zend OPcache
Nextcloud
Информация:
# sudo -u nginx php8.0 /home/nginx/Tools/nextcloud/occ статус
- установлено: правда
- версия: 23.0.3.2
- строка версии: 23.0.3
- версия:
- техническое обслуживание: ложь
- NeedDbUpgrade: ложь
- Название продукта: Nextcloud
- расширенная поддержка: ложь
Файл виртуального хоста Nginx:
# кот /etc/nginx/sites-enabled/nextcloud.conf
кошка /etc/nginx/sites-enabled/nextcloud.conf
восходящий php-обработчик {
сервер unix:/var/run/php/php8.0-fpm.sock;
}
# Установите параметры управления `неизменяемым` кешем только для активов с аргументом `v` для очистки кеша
карта $arg_v $asset_immutable {
"""";
по умолчанию «неизменный»;
}
сервер {
слушать 80;
слушать [::]:80;
имя_сервера 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 основной;
error_log /var/log/nginx/nextcloud.error.log крит;
вернуть 301 https://$host$request_uri;
# вернуть 302 https://$host$request_uri;
}
сервер {
слушать 443 ssl http2;
слушать [::]:443 ssl http2;
server_name 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;
включить /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 основной;
error_log /var/log/nginx/nextcloud_ssl.error.log крит;
# Код для обновления сертификатов Letsencrypt
включить /etc/nginx/snippets/letsencrypt-cert-renewal-dir.conf;
если ($http_host != "drive.example.com" ) {
переписать ^ https://drive.example.com$request_uri постоянный;
сломать;
}
# Настройки HSTS
# ПРЕДУПРЕЖДЕНИЕ: добавляйте опцию предварительной загрузки только после того, как прочтете о
# последствия в hstspreload.org. Этот вариант
# добавит домен в жестко заданный список, который поставляется
# во всех основных браузерах и удаление из этого списка
# может занять несколько месяцев.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" всегда;
местоположение = /robots.txt {
позволять все;
log_not_found выключен;
доступ_лог выключен;
}
# Сделать исключение из регулярного выражения для `/.well-known`, чтобы клиенты могли по-прежнему
# доступ к нему, несмотря на наличие правила регулярного выражения
# `location ~ /(\.|autotest|...)`, который в противном случае обрабатывал бы запросы
# для `/.хорошо известный`.
расположение ^~ /.известный {
# Правила в этом блоке являются адаптацией правил
# в `.htaccess`, которые касаются `/.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; }
# Пусть API Nextcloud для `/.well-known` URI обрабатывает все остальные
# запросы, передавая их внешнему контроллеру.
вернуть 301 /index.php$request_uri;
}
#местоположение ^~ / {
# установить максимальный размер загрузки и увеличить время ожидания загрузки:
client_max_body_size 50G;
client_body_timeout 300 с;
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-Буферизация нет;
# Поскольку php-fpm не может читать настройки PHP в .htaccess, эти настройки
# должен быть установлен в файле 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;
# Включить gzip, но не удалять заголовки ETag
gzip включен;
gzip_vary включен;
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/wasm application/x-font- Приложение ttf/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 не поддерживается Nextcloud, поэтому, если ваш сервер построен
# с модулем `ngx_pagespeed`, раскомментируйте эту строку, чтобы отключить его.
скорость страницы отключена;
# Заголовки ответов HTTP, заимствованные из Nextcloud `.htaccess`
add_header Referrer-Policy «без реферера» всегда;
add_header X-Content-Type-Options «нюхать» всегда;
add_header X-Download-Options «noopen» всегда;
add_header X-Frame-Options «SAMEORIGIN» всегда;
add_header X-Permitted-Cross-Domain-Policies «нет» всегда;
add_header X-Robots-Tag «none» всегда;
add_header X-XSS-Защита "1; режим = блок" всегда;
# Удалить X-Powered-By, который является утечкой информации
fastcgi_hide_header X-Powered-By;
# Путь к корню вашей установки
root /home/nginx/Инструменты/nextcloud/;
# Укажите, как обрабатывать каталоги -- указав `/index.php$request_uri`
# здесь в качестве запасного варианта означает, что Nginx всегда демонстрирует желаемое поведение
# когда клиент запрашивает путь, соответствующий существующему каталогу
# на сервере. В частности, если этот каталог содержит файл index.php,
# этот файл правильно обслуживается; если нет, то запрос передается
# интерфейсный контроллер. Это последовательное поведение означает, что нам не нужно
# чтобы указать пользовательские правила для определенных путей (например, изображений и других ресурсов,
# `/updater`, `/ocm-provider`, `/ocs-provider`), и таким образом
# `try_files $uri $uri/ /index.php$request_uri`
# всегда обеспечивает желаемое поведение.
индекс index.php index.html /index.php$request_uri;
# Правило, заимствованное из `.htaccess`, для работы с клиентами Microsoft DAV
местоположение = / {
если ($http_user_agent ~ ^DavClnt) {
вернуть 302 /remote.php/webdav/$is_args$args;
}
}
# Правила, заимствованные из `.htaccess`, чтобы скрыть определенные пути от клиентов
location ~ ^/(?:build|тесты|config|lib|3rdparty|templates|data)(?:$|/) { return 404; }
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; }
# Убедитесь, что этот блок, который передает файлы PHP в процесс PHP, находится над блоками
# которые обрабатывают статические активы (как показано ниже). Если этот блок не объявлен первым,
# тогда Nginx столкнется с бесконечным циклом перезаписи, когда он добавляет `/index.php`
# в URI, что приводит к ответу с ошибкой HTTP 500.
расположение ~ \.php(?:$|/) {
# Требуется для устаревшей поддержки
переписать ^/(?!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)(/.*)$;
установить $path_info $fastcgi_path_info;
try_files $fastcgi_script_name = 404;
включить fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS включен;
fastcgi_param modHeadersAvailable true; # Избегайте двойной отправки заголовков безопасности
fastcgi_param front_controller_active true; # Включить красивые URL
php-обработчик fastcgi_pass;
fastcgi_intercept_errors включен;
fastcgi_request_buffering выключен;
fastcgi_max_temp_file_size 0;
}
расположение ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|карта)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463, $asset_immutable";
доступ_лог выключен; # Необязательно: не регистрировать доступ к ресурсам
расположение ~ \.wasm$ {
приложение по умолчанию_тип/wasm;
}
}
расположение ~ \.woff2?$ {
try_files $uri /index.php$request_uri;
истекает 7 дней; # Политика Cache-Control заимствована из `.htaccess`
доступ_лог выключен; # Необязательно: не регистрировать доступ к ресурсам
}
# Подавление сообщений журнала.
# Если вы видите бессмысленные сообщения в своем лог-файле, например, клиент запрещен конфигурацией сервера: /var/www/data/htaccesstest.txt, добавьте этот раздел в конфигурацию nginx, чтобы подавить их:
местоположение = /данные/htaccesstest.txt {
позволять все;
log_not_found выключен;
доступ_лог выключен;
}
# Правило заимствовано из `.htaccess`
местоположение / удаленный {
вернуть 301 /remote.php$request_uri;
}
место расположения / {
try_files $uri $uri/ /index.php$request_uri;
}
#}
}
Конфигурационный файл Nginx SSL включен в Конфигурационный файл виртуального хоста nginx
:
# кот /etc/nginx/conf.d-enabled/ssl-security.conf
# включить возобновление сеанса для повышения производительности https
# vincent.bernat.im/en/blog/2011-ssl-session-reuse-rfc5077.html
ssl_session_cache общий: SSL: 50 м;
ssl_session_timeout 1 д;
ssl_session_tickets выключен;
# Параметр Диффи-Хеллмана для наборов шифров DHE, рекомендуемые 2048 бит
#ssl_dhparam /etc/ssl/certs/dhparam.pem;
# openssl dhparam -dsaparam -out /etc/ssl/private/dhparam.pem 4096
ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
# включает защиту на стороне сервера от атак BEAST
# blog.ivanristic.com/2013/09/is-beast-still-a-threat.html
ssl_prefer_server_ciphers включен;
# отключить SSLv3 (включен по умолчанию, начиная с nginx 0.8.19), так как он менее безопасен, чем TLS en.wikipedia.org/wiki/Secure_Sockets_Layer#SSL_3.0
# Отключенные протоколы: TLSv1 TLSv1.1
ssl_protocols SSLv3 TLSv1.2 TLSv1.3;
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# шифры выбраны для прямой секретности и совместимости
# 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:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE- RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128- SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256: 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';
# включить сшивание ocsp (механизм, с помощью которого сайт может передавать посетителям информацию об отзыве сертификата масштабируемым способом с сохранением конфиденциальности)
# blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox/
резольвер 8.8.8.8 8.8.4.4;
ssl_stapling включен;
ssl_stapling_verify включен;
# ssl_trusted_certificate /etc/nginx/ssl/star_forgott_com.crt;
# конфигурация для включения HSTS (HTTP Strict Transport Security) developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security
# чтобы избежать удаления SSL en.wikipedia.org/wiki/SSL_stripping#SSL_stripping
# также hstspreload.org/
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; предварительная загрузка";
# кошка /etc/nginx/fastcgi
fastcgi.conf fastcgi_params fastcgi_params.dpkg-dist
root@we:~# cat /etc/nginx/fastcgi_params
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_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 if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param ИМЯ_СЕРВЕРА $server_name;
# Только PHP, требуется, если PHP был собран с --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
### УСТАНОВИТЬ переменные 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;
Большое вам спасибо заранее.
Надеюсь, кто-то может помочь :)