Публикация NextCloud через Nginx

Эта публикация покажет, как осуществляется публикация NextCloud через Nginx. Для того, чтобы корректно опубликовать NextCloud во внешний мир необходимо скорректировать параметры нескольких смежных систем: Nginx, Apache и непосредственно конфигурационный файл NextCloud.

Для того, чтобы правильно передать через реверс прокси исходный IP-адрес подключения есть ряд настроек, которые необходимо выполнить на всех компонентах публикации – Nginx, Apache и сервере NextCloud.

Настройка публикации на Nginx

Пример публикации на сервере Nginx выглядит следующим образом:

server {
    listen 80;
    server_name files.itproblog.ru;
    return 301 https://files.itproblog.ru$request_uri;
}

server {
    listen 443 ssl;
    server_name  files.itproblog.ru;
    client_max_body_size 1G;
    ssl_certificate         /etc/nginx/ssl/itproblog.ru.crt;
    ssl_certificate_key     /etc/nginx/ssl/itproblog.ru.key;

    location / {
        proxy_pass https://files.itproblog.ru;
        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-Host $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

# Deny WebDAV Externally
#    location = /remote.php/dav {
#        deny all;
#    }
}

Корректировка параметров Apache

На сервере Apache для NextCloud необходимо включить модуль:

sudo a2enmod remoteip
sudo systemctl restart apache2

Отредактируем конфигурационный файл модуля remoteip:

sudo nano /etc/apache2/conf-enabled/remoteip.conf

Укажем заголовок, содержащий исходный IP-адрес (X-Forwarded-For) и адрес сервера Nginx (10.10.10.37 в моем случае), который выступает в качестве доверенного прокси:

RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 10.10.10.37

Сохраняем внесенные изменения и перезапускаем сервер Apache:

sudo systemctl restart apache2

Корректировка параметров NextCloud

Также необходимо добавить соответствующие параметры в конфигурационный файл config.php:

sudo nano /data/nextcloud/config/config.php

Блок добавляемых параметров:

'trusted_domains' => 
  array (
    0 => 'files.itproblog.ru',
  ),
  'trusted_proxies' => 
  array (
    0 => '10.10.10.37',
  ),
  'overwrite.cli.url' => 'https://files.itproblog.ru',
  'overwriteprotocol' => 'https',
  'forwarded_for_headers' => ['HTTP_X_FORWARDED', 'HTTP_FORWARDED_FOR'],

10.10.10.37 – это адрес сервера nginx.

Сохраняем внесенные изменения и перезапускаем сервер Apache:

sudo systemctl restart apache2

Проверка

После внесения всех необходимых изменений давайте убедимся, что сервер NextCloud правильно идентифицируем IP-адрес внешнего запроса к серверу.

Попробуйте выполнить внешнее обращение к серверу NextCloud, а затем проверьте журнал доступа:

sudo tail /var/log/apache2/files.itproblog.ru.access_lo
31.43.195.167 - - [24/Aug/2023:16:36:55 +0000] "GET /data/.ocdata?t=1692895015421 HTTP/1.0" 404 14337
31.43.195.167 - - [24/Aug/2023:16:36:55 +0000] "PROPFIND /remote.php/dav/ HTTP/1.0" 207 1396
31.43.195.167 - - [24/Aug/2023:16:36:55 +0000] "PROPFIND /remote.php/dav/ HTTP/1.0" 207 1396
31.43.195.167 - - [24/Aug/2023:16:36:55 +0000] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/1.0" 200 1930
31.43.195.167 - - [24/Aug/2023:16:36:55 +0000] "GET /ocs/v2.php/cloud/groups/details HTTP/1.0" 200 1147
31.43.195.167 - - [24/Aug/2023:16:36:55 +0000] "GET /settings/ajax/checksetup HTTP/1.0" 200 2233
10.10.10.44 - - [24/Aug/2023:16:37:13 +0000] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/1.1" 304 1428
31.43.195.167 - - [24/Aug/2023:16:37:25 +0000] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/1.0" 304 992
10.10.10.44 - - [24/Aug/2023:16:37:43 +0000] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/1.1" 304 1428
31.43.195.167 - - [24/Aug/2023:16:37:55 +0000] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/1.0" 304 992

В случае успешной настройки в запросах, относящихся к внешнему доступу, вы должны увидеть тот внешний IP-адрес, который был использован для получения доступа к сервису.

Публикация NextCloud через Nginx завершена.

Публикация NextCloud через Nginx: 4 комментария

  1. Здравствуйте, в разделе “Корректировка параметров NextCloud”, в config.php – IP-адрес 10.10.10.37 – это адрес nginx (или я не правильно понял)?
    Сам Nginx у Вас установлен на этом же сервере с nexcloud или где-то в другом месте.?

    1. Добрый день!
      В разделе “Корректировка параметров NextCloud”, в config.php – IP-адрес 10.10.10.37 – это адрес nginx (или я не правильно понял)?
      // Вы все правильно поняли, 10.10.10.37 – это адрес сервера nginx

      Сам Nginx у Вас установлен на этом же сервере с nexcloud или где-то в другом месте.?
      // Сервер nginx – это отдельный хост

      Согласен, в разделе с корректировкой параметров NextCloud есть неявные моменты. Добавил примечание.

      1. Здравствуйте. В любом случае спасибо Вам за материал и полезный сайт! Хотел ещё узнать Ваше мнение – есть варианты установки на nginx, есть на apache. В оф. документации написано, что официально поддерживается только apache. Я, для эксперимента, развернул VM и с nginx, и с apache. Особо разницы в скорости/базовой работе – не заметил.. Может конечно дело в мелочах. Как Вы считаете, какой веб-сервер лучше для nextcloud-a?

        1. Как Вы считаете, какой веб-сервер лучше для nextcloud-a?
          // Те экземпляры NextCloud, с которыми я работал были на веб сервере Apache. Официально поддержка nginx не заявлена. Думаю, что из-за этого его не часто встретишь в связке с NC. При небольшой нагрузке особой разницы, думаю, вы не увидите. Нужно тестировать под нагрузкой. Потому что под нагрузкой, скажем в 500-1000 пользователей (а особенно при активном использовании сторонних клиентов WebDAV) Community редакция NextCloud может довольно сильно проседать по производительности.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *