На сервере Ubuntu 16.04 у меня есть установка Nextcloud (SNAP) и Collabora для управления документами (Docker). Его внутренний IP-адрес - 192.1368.1.30.
NextCloud-Snap слушать на 443 Collabora-Docker слушать на 9980
На этом сервере также есть Apache2 со следующей конфигурацией, чтобы приложение Collabora могло взаимодействовать с NextCloud:
<VirtualHost *:80>
ServerName docs.mydomain.com
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:9081>
ServerName docs.mydomain.com
# Encoded slashes need to be allowed
AllowEncodedSlashes NoDecode
# keep the host
ProxyPreserveHost On
# static html, js, images, etc. served from loolwsd
# loleaflet is the client part of LibreOffice Online
ProxyPass /loleaflet https://127.0.0.1:9980/loleaflet retry=0
ProxyPassReverse /loleaflet https://127.0.0.1::9980/loleaflet
# WOPI discovery URL
ProxyPass /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0
ProxyPassReverse /hosting/discovery https://127.0.0.1:9980/hosting/discovery
# Main websocket
ProxyPassMatch "/lool/(.*)/ws$" wss://127.0.0.1:9980/lool/$1/ws nocanon
# Admin Console websocket
ProxyPass /lool/adminws wss://127.0.0.1:9980/lool/adminws
# Download as, Fullscreen presentation and Image upload operations
ProxyPass /lool https://127.0.0.1:9980/lool
ProxyPassReverse /lool https://127.0.0.1:9980/lool
# ServerAlias docs.mydomain.com
SSLProxyEngine on
SSLProxyVerify None
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off
# Let's Encrypt Certificate
SSLCertificateFile /etc/letsencrypt/live/docs.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/docs.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
Раньше перед этой машиной был обратный прокси-сервер для управления всеми перенаправлениями.
Файл конфигурации для Apache2 на прокси-сервере был:
<VirtualHost *:80>
ServerName docs.mydomain.com
ProxyPreserveHost On
ProxyPass / http://192.168.1.30:80/
ProxyPassReverse / http://192.168.1.30:80/
</VirtualHost>
<VirtualHost *:443>
ServerName cloud.mydomain.com
ProxyPreserveHost On
ProxyPass / https://192.168.1.30/
ProxyPassReverse / https://192.168.1.30/
SSLProxyEngine on
SSLCertificateFile /etc/letsencrypt/live/cloud.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/cloud.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
</VirtualHost>
<VirtualHost *:443>
ServerName docs.mydomain.com:443
# Encoded slashes need to be allowed
AllowEncodedSlashes NoDecode
# keep the host
ProxyPreserveHost On
# static html, js, images, etc. served from loolwsd
# loleaflet is the client part of LibreOffice Online
ProxyPass /loleaflet https://192.168.1.30:9081/loleaflet retry=0
ProxyPassReverse /loleaflet https://192.168.1.30:9081/loleaflet
# WOPI discovery URL
ProxyPass /hosting/discovery
https://192.168.1.30:9081/hosting/discovery retry=0
ProxyPassReverse /hosting/discovery
https://192.168.1.30:9081/hosting/discovery
# Main websocket
ProxyPassMatch "/lool/(.*)/ws$" wss://192.168.1.30:9081/lool/$1/ws nocanon
# Admin Console websocket
ProxyPass /lool/adminws wss://192.168.1.30:9081/lool/adminws
# Download as, Fullscreen presentation and Image upload operations
ProxyPass /lool https://192.168.1.30:9081/lool
ProxyPassReverse /lool https://192.168.1.30:9081/lool
# ServerAlias docs.brains.engineering
SSLProxyEngine on
SSLProxyVerify None
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off
# Let's Encrypt Certificate
SSLCertificateFile /etc/letsencrypt/live/docs.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/docs.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
LogLevel debug
ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>
Теперь прокси-сервер был удален, и я хочу открыть доступ к серверу Ubuntu напрямую для внешних пользователей. Если я настрою NAT в маршрутизаторе на направление трафика 80 и 443 на 192.168.1.30, все будет работать нормально, но сертификат SSL недействителен.
Я попытался (пере) установить в соответствии с инструкциями для NextCloud Snap с помощью
sudo nextcloud.enable-https lets-encrypt
Но я получаю 404, так как Let's Encrypt не может загрузить проверочный файл на порт 80.
Как я могу настроить новую конфигурацию без обратного прокси, но установить сертификат SSL для NextCloud Snap?