Вопрос или проблема
Я не могу открыть документ в Nextcloud Office
Основы
Версия сервера Nextcloud (например, 29.x.x):
30.0.2
Операционная система и версия (например, Ubuntu 24.04):
Ubuntu 22.04.4 LTS
Веб-сервер и версия (например, Apache 2.4.25):
nginx/1.18.0 (Ubuntu)
Обратный прокси и версия _(например, nginx 1.27.2)
nginx/1.18.0 (Ubuntu)
Версия PHP (например, 8.3):
PHP 8.1.2-1ubuntu2.19 (cli) (собрано: 30 сентября 2024 16:25:25) (NTS)
Это первый раз, когда вы видите эту ошибку? (Да / Нет):
да
Когда эта проблема, по-вашему, возникла впервые?
После установки
Метод установки (например, AIO, NCP, Bare Metal/Archive и т.д.)
Docker, см. ниже
Вы используете Cloudflare, mod_security или подобное? (Да / Нет)
Нет
Сводка проблемы, с которой я столкнулся:
Я не могу открыть или отредактировать ни один документ с помощью Nextcloud Office. Сообщение об ошибке:
Не удалось загрузить документ Не удалось загрузить Nextcloud Office - попробуйте снова позже
Я следовал этому сообщению, и добавил WOPI 0.0.0.0/0 → не сработало
Так что я посмотрел настройки администратора → журналы. Я нашел:
Ошибка клиента: POST https://monsoon.my-site.org:4443/cool/extract-document-structure?limit=content-control` привела к ответу 403 Forbidden`
Я также следовал этому сообщению (действительно, мой collabora настроен на другой порт), но изменений не произошло.
Шаги для воспроизведения
- Установите NextCloud, используя Docker.
Файл сборки:
version: '3.9'
services:
nextcloud:
image: nextcloud:latest
container_name: nextcloud
restart: always
ports:
- 8080:80
volumes:
- /var/docker/nextcloud/data:/var/www/html
- /var/docker/nextcloud/config:/var/www/html/config
depends_on:
- db
db:
image: mariadb
container_name: nextcloud_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: секретный пароль
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: другой секретный пароль
volumes:
- /var/docker/nextcloud/db:/var/lib/mysql
- Настройте обратный прокси nginx:
Файл sites-enabled:
server {
listen 5021 ssl;
server_name monsoon.my-site.org;
ssl_certificate /etc/letsencrypt/live/monsoon.my-site.org/fullchain.pem; # управляется Certbot
ssl_certificate_key /etc/letsencrypt/live/monsoon.my-site.org/privkey.pem; # управляется Certbot
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name monsoon.my-site.org;
return 301 https://$host$request_uri;
}
Теперь я вижу установку nextcloud.
- Настройте collabora, используя docker:
Файл сборки:
version: '3.7'
services:
collabora:
image: collabora/code
container_name: collabora
restart: always
ports:
- "5022:9980"
environment:
- domain=monsoon.my-site.org
- "extra_params=--o:ssl.enable=false --o:ssl.termination=true"
volumes:
- /opt/collabora/data:/var/www/collabora/data
- /opt/collabora/loolwsd.xml:/etc/loolwsd/loolwsd.xml
- Настройте nginx снова:
Конфигурация:
server {
listen 4443 ssl;
server_name monsoon.my-site.org;
# Самоподписанные SSL-сертификаты
ssl_certificate /etc/letsencrypt/live/monsoon.my-site.org/fullchain.pem; # управляется Certbot
ssl_certificate_key /etc/letsencrypt/live/monsoon.my-site.org/privkey.pem; # управляется Certbot
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Прокси-запросы к контейнеру Collabora Docker
location / {
proxy_pass http://localhost:5022;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
#proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Forwarded "for=$remote_addr;proto=$scheme";
#proxy_buffering off;
}
client_max_body_size 0;
fastcgi_buffers 64 4K;
# Отключить буферизацию, чтобы предотвратить задержку
#proxy_request_buffering off;
}
-
Установите экземпляр collabora в настройки администратора > офис, с портом # 4443. Затем перезапустите все
-
Вернитесь на вкладку, где открыт nextcloud, и затем в разделе приложения > файлы > нажмите на любой документ odx. (или даже docx) – и появляется ошибка.
Записи журналов
Nextcloud
Используя опцию Копировать «сырые» данные из экрана Настройки администрации -> Журнал, я получаю:
{"reqId":"lywRjoeZcEGDexLp0usU","level":3,"time":"2024-11-29T10:03:00+00:00","remoteAddr":"79.117.107.52","user":"admin","app":"richdocuments","method":"GET","url":"/ocs/v2.php/apps/files/api/v1/templates","message":"Ошибка клиента: `POST https://monsoon.my-site.org:4443/cool/extract-document-structure?limit=content-control` привела к ответу `403 Forbidden`","userAgent":"Mozilla/5.0 (X11; Linux x86_64; rv:132.0) Gecko/20100101 Firefox/132.0","version":"30.0.2.2","data":{"app":"richdocuments"},"id":"674997689c36f"}
Я отредактировал журнал, чтобы скрыть свой URL.
Веб-браузер
Используя сетевой анализатор, я получаю:
Запрос:
POST /browser/3799c094da/cool.html?WOPISrc=https%3A%2F%2Fmonsoon.my-site.org%3A5021%2Findex.php%2Fapps%2Frichdocuments%2Fwopi%2Ffiles%2F567_occmiu611x0t&title=%2FNew%20document.odt&lang=en&closebutton=1&revisionhistory=1 HTTP/1.1
Host: monsoonmy-site.org
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:132.0) Gecko/20100101 Firefox/132.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br, zstd
Content-Type: application/x-www-form-urlencoded
Content-Length: 4348
Origin: null
Connection: keep-alive
Cookie: nc_sameSiteCookielax=true; nc_sameSiteCookiestrict=true; __Host-nc_sameSiteCookielax=true; __Host-nc_sameSiteCookiestrict=true; occmiu611x0t=ecebbb737a6c5aa294173b9188848427; oc_sessionPassphrase=wWDd6l8H%2Fa2tMvjGeIVIwtpg7RcQnqMSRX395vo43mnmJqurY4d8%2FCvU5GV09zzugvFoM1AtaoWOOxKnUMMJfUvEsOY1Q%2FhQXWU19GcL4AiuF6RzHF9Wqa8UasvuX%2F6j; nc_username=admin; nc_token=YPyXL7hLyYC2X8ULniIBsuK17vh0h8Yl; nc_session_id=ecebbb737a6c5aa294173b9188848427
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: iframe
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-site
Sec-Fetch-User: ?1
Priority: u=4
Ответ:
HTTP/1.1 404 Not Found
Server: nginx/1.18.0 (Ubuntu)
Date: Пт, 29 Ноя 2024 10:31:40 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Content-Encoding: gzip
Веб-сервер / Обратный прокси
Вывод моего nginx в /var/log:
[ N 2024-11-29 10:16:58.9382 153218/T1 age/Wat/WatchdogMain.cpp:1370 ]: Запуск надзирателя Passenger...
[ N 2024-11-29 10:16:58.9667 153222/T1 age/Cor/CoreMain.cpp:1341 ]: Запуск ядра Passenger...
[ N 2024-11-29 10:16:58.9683 153222/T1 age/Cor/CoreMain.cpp:257 ]: Ядро Passenger работает в режиме много-приложений.
[ N 2024-11-29 10:16:58.9861 153222/T1 age/Cor/CoreMain.cpp:1016 ]: Ядро Passenger в сети, PID 153222
[ N 2024-11-29 10:17:01.1207 153222/T6 age/Cor/SecurityUpdateChecker.h:519 ]: Проверка обновлений безопасности: обновлений не найдено (следующая проверка через 24 часа)
(redmine работает на другом порту)
Конфигурация
Nextcloud
мой файл config.php из /path/to/nextcloud:
$CONFIG = array (
'htaccess.RewriteBase' => "https://serverfault.com/",
'memcache.local' => '\\OC\\Memcache\\APCu',
'apps_paths' =>
array (
0 =>
array (
'path' => '/var/www/html/apps',
'url' => '/apps',
'writable' => false,
),
1 =>
array (
'path' => '/var/www/html/custom_apps',
'url' => '/custom_apps',
'writable' => true,
),
),
'upgrade.disable-web' => true,
'instanceid' => 'будет скрыто',
'passwordsalt' => 'будет скрыто',
'secret' => 'будет скрыто',
'trusted_domains' =>
array (
0 => 'monsoon.my-site.org',
1 => 'monsoon.my-site.org:5021',
),
'datadirectory' => '/var/www/html/data',
'dbtype' => 'sqlite3',
'version' => '30.0.2.2',
'overwrite.cli.url' => 'http://monsoon.my-site.org:5021',
'overwritehost' => 'monsoon.my-site.org:5021',
'overwriteprotocol' => 'https',
'installed' => true,
'app_install_overwrite' =>
array (
0 => 'files_mindmap',
1 => 'inventory',
2 => 'files_3d',
),
);
Пожалуйста, помогите
Спасибо.
Ответ или решение
Как устранить ошибку «Загрузка документа не удалась» в Nextcloud Office
Если вы сталкиваетесь с ошибкой «Загрузка документа не удалась» при попытке открыть документ в Nextcloud Office, это может быть вызвано несколькими факторами, связанными с конфигурацией серверов, защитой сети и настройками самого Nextcloud. Рассмотрим подробнее возможные причины и решения данной проблемы.
Основания проблемы
-
Версия программного обеспечения:
- Nextcloud Server: 30.0.2
- Операционная система: Ubuntu 22.04.4 LTS
- Веб-сервер: nginx/1.18.0 (Ubuntu)
- PHP версия: PHP 8.1.2
- Установлен Collabora с использованием Docker.
-
Клиентская ошибка:
- Логирование показывает ошибку 403 Forbidden при попытке выполнить запрос на
extract-document-structure
, что указывает на проблемы с правами доступа или неправильными URL.
- Логирование показывает ошибку 403 Forbidden при попытке выполнить запрос на
-
Настройка прокси:
- Серверное окружение настроено с использованием обратного прокси (nginx), что требует корректной настройки заголовков и маршрутизации.
Пошаговое руководство по устранению проблемы
1. Проверка конфигурации Collabora:
Убедитесь, что переменная domain
в конфигурации Collabora правильно настроена. Подтвердите, что она включает ваш домен, без дополнительных символов или пробелов:
environment:
- domain=monsoon.my-site.org
2. Обновление конфигурации Nginx:
Убедитесь, что конфигурация для Collabora корректно направляет запросы. Часто возникают проблемы с тем, что конфигурация прокси не включает все необходимые заголовки. Вам может понадобиться обновить ваше nginx.conf
, добавив:
location /loleaflet {
proxy_pass http://localhost:5022;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https; # Замените http на https
}
Также проверьте, нет ли конфликта между его настройками и настройками для основного сервиса Nextcloud.
3. Проверьте доступ к порту 4443:
Убедитесь, что сервис Collabora доступен на ожидаемом порту 4443. Используйте следующие команды для проверки:
curl -I https://monsoon.my-site.org:4443
Если ответ не получен, возможно, потребуется проверить настройки брандмауэра или сетевые правила.
4. Обратите внимание на настройки WOPI:
Проверьте, правильно ли вы настроили WOPI URL в настройках Nextcloud. Он должен указывать на рабочий ссылочный адрес Collabora:
- Если конфигурация WOPI была изменена, возможно, потребуется обновить её в админ-панели Nextcloud.
5. Логи и диагностика:
Проверьте логи как сервера Nextcloud, так и Nginx.
Для Nextcloud:
tail -f /var/www/html/data/nextcloud.log
Для Nginx:
tail -f /var/log/nginx/error.log
Логи помогут обнаружить конкретные проблемы с подключением или авторизацией.
6. Создание овощей конфигурации:
Внесите изменения в config.php
, связанные с заголовками и данными, которые могут повлиять на обработку запросов. Убедитесь, что конфигурация приложения на стороне сервера совпадает с ожиданиями клиента.
Заключение
Следуя перечисленным шагам, вы сможете диагностировать и устранить ошибку «Загрузка документа не удалась» в Nextcloud Office. Если проблема сохраняется, возможно, стоит обратиться к сообществу или официальной поддержке Nextcloud, предоставив всю собранную информацию для более эффективной помощи.
Также рекомендую регулярно обновлять программное обеспечение как Nextcloud, так и Collabora до последних стабильных версий, чтобы исключить возможные проблемы с безопасностью и совместимостью.