Не удалось загрузить документ в Nextcloud Office.

Вопрос или проблема

Я не могу открыть документ в 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 настроен на другой порт), но изменений не произошло.

Шаги для воспроизведения

  1. Установите 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
  1. Настройте обратный прокси 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.

  1. Настройте 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
  1. Настройте 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;

}
  1. Установите экземпляр collabora в настройки администратора > офис, с портом # 4443. Затем перезапустите все

  2. Вернитесь на вкладку, где открыт 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. Рассмотрим подробнее возможные причины и решения данной проблемы.

Основания проблемы

  1. Версия программного обеспечения:

    • Nextcloud Server: 30.0.2
    • Операционная система: Ubuntu 22.04.4 LTS
    • Веб-сервер: nginx/1.18.0 (Ubuntu)
    • PHP версия: PHP 8.1.2
    • Установлен Collabora с использованием Docker.
  2. Клиентская ошибка:

    • Логирование показывает ошибку 403 Forbidden при попытке выполнить запрос на extract-document-structure, что указывает на проблемы с правами доступа или неправильными URL.
  3. Настройка прокси:

    • Серверное окружение настроено с использованием обратного прокси (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 до последних стабильных версий, чтобы исключить возможные проблемы с безопасностью и совместимостью.

Оцените материал
Добавить комментарий

Капча загружается...