Apache, sslh, SSL-сертификаты, локальное приложение и докеризированное приложение
У меня есть сервер, который некоторое время без проблем размещал локальное приложение (Nextcloud), за Apache (2.4).
Я также размещаю сервер SSH на порту 443, для которого я использую sslh.
Мой сертификат LetsEncrypt предоставляется с использованием следующего conf:-
<VirtualHost localhost:8443>
ServerAdmin [email protected]
ServerName my.domain.name.noip.me
SSLCertificateFile /path/to/my/fullchain.pem
SSLCertificateKeyFile /path/to/my/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
Моя установка nextcloud связана с использованием следующего: -
Alias /nextcloud /usr/share/webapps/nextcloud/
<Directory /usr/share/webapps/nextcloud/>
Options FollowSymlinks
AllowOverride all
Require all granted
php_admin_value open_basedir "/srv/http/:/dev/urandom:/tmp/:/usr/share/pear/:/usr/share/webapps/nextcloud/:/etc/weapps/nextcloud:/var/nextcloud/"
</Directory>
Мой sslh.cfg выглядит следующим образом:
listen:
(
{ host: "0.0.0.0"; port: "443"; }
)
protocols:
(
{ name: "ssh"; service: "ssh"; host: "localhost"; port: '12345"; probe: "builtin"; },
{ name: "http"; host: "localhost"; port: "80"; probe: "builtin"; },
{ name: "ssl"; host: "localhost"; port: "8443"; probe: "builtin"; },
)
Пока это работает так, как мне бы хотелось. Nextcloud работает с использованием my.domain.name.noip.me/nextcloud
Заметьте, я даже могу заставить https использовать постоянное перенаправление. Плохая идея, я поняла, что это вызывает у меня головную боль, но хорошо, я могу просто поменять бесплатную ноу, извлеченный урок.
Сейчас я пытаюсь добавить еще одну "папку" (чтобы я мог сделать my.domain.name.noip.me/app), которая работает в контейнере Docker (bitwarden, если это имеет значение). Моя команда docker в основном (за исключением всей неважной конфигурации):-
docker run -d --name bitwarden -p 54321:80 bitwardenrs/server:latest
Это означает, что теперь я могу получить доступ к bitwarden, используя my.domain.name.noip.me:54321
Я пытался получить доступ к bitwarden, используя подпапку / app с помощью ProxyPass, следующим образом: -
<VirtualHost *:80>
ProxyPass /app http://127.0.0.1:54321/
ProxyPassReverse /app http://127.0.0.1:54321/
</VirtualHost>
Кажется, это работает, но перенаправление не распознает мой сертификат SSL (очевидно), что означает, что мое приложение (bitwarden) не будет проходить аутентификацию (когда это будет происходить нормально при доступе через my.domain.name.noip.me:54321
На данный момент я немного растерялся, и даже не уверен, что спросить. Я хотел бы перенаправить все http на https и заставить ProxyPass работать так, чтобы my.domain.name.noip.me/app работал как https (сейчас я могу получить к нему доступ только как http).
1 ответ
Использование sslh
По моему мнению, это скорее хитрость, чем реальная функциональность. Однако, если вы используете его, вам, вероятно, следует отключить протокол http
, Никто никогда не будет искать HTTP на порту 443.
Если вы хотите перенаправить весь HTTP-трафик на HTTPS, измените ваш виртуальный хост на порту 80 на:
<VirtualHost *:80>
ServerName my.domain.name.noip.me
Redirect "/" "https://my.domain.name.noip.me/"
</VirtualHost>
Упакуйте все остальное в виртуальный хост на порт 8443, доступ к которому осуществляется через sslh
:
<VirtualHost localhost:8443>
ServerAdmin [email protected]
ServerName my.domain.name.noip.me
SSLCertificateFile /path/to/my/fullchain.pem
SSLCertificateKeyFile /path/to/my/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
# Specifies what to do when we request https://my.domain.name.noip.me/nextcloud
Alias /nextcloud /usr/share/webapps/nextcloud/
<Directory /usr/share/webapps/nextcloud/>
Options FollowSymlinks
AllowOverride all
Require all granted
php_admin_value open_basedir "/srv/http/:/dev/urandom:/tmp/:/usr/share/pear/:/usr/share/webapps/nextcloud/:/etc/weapps/nextcloud:/var/nextcloud/"
</Directory>
# Specifies what to do when we request https://my.domain.name.noip.me/app
ProxyPass /app http://localhost:54321/
ProxyPassReverse /app http://localhost:54321/
</VirtualHost>