Эта публикация покажет, как осуществляется публикация 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 комментария
Здравствуйте, в разделе “Корректировка параметров NextCloud”, в config.php – IP-адрес 10.10.10.37 – это адрес nginx (или я не правильно понял)?
Сам Nginx у Вас установлен на этом же сервере с nexcloud или где-то в другом месте.?
Добрый день!
В разделе “Корректировка параметров NextCloud”, в config.php – IP-адрес 10.10.10.37 – это адрес nginx (или я не правильно понял)?
// Вы все правильно поняли, 10.10.10.37 – это адрес сервера nginx
Сам Nginx у Вас установлен на этом же сервере с nexcloud или где-то в другом месте.?
// Сервер nginx – это отдельный хост
Согласен, в разделе с корректировкой параметров NextCloud есть неявные моменты. Добавил примечание.
Здравствуйте. В любом случае спасибо Вам за материал и полезный сайт! Хотел ещё узнать Ваше мнение – есть варианты установки на nginx, есть на apache. В оф. документации написано, что официально поддерживается только apache. Я, для эксперимента, развернул VM и с nginx, и с apache. Особо разницы в скорости/базовой работе – не заметил.. Может конечно дело в мелочах. Как Вы считаете, какой веб-сервер лучше для nextcloud-a?
Как Вы считаете, какой веб-сервер лучше для nextcloud-a?
// Те экземпляры NextCloud, с которыми я работал были на веб сервере Apache. Официально поддержка nginx не заявлена. Думаю, что из-за этого его не часто встретишь в связке с NC. При небольшой нагрузке особой разницы, думаю, вы не увидите. Нужно тестировать под нагрузкой. Потому что под нагрузкой, скажем в 500-1000 пользователей (а особенно при активном использовании сторонних клиентов WebDAV) Community редакция NextCloud может довольно сильно проседать по производительности.