Эта публикация покажет, как осуществляется публикация 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, который выступает в качестве доверенного прокси:
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'],

Сохраняем внесенные изменения и перезапускаем сервер 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 завершена.