Apache, sslh, SSL-сертификаты, локальное приложение и докеризированное приложение
У меня есть сервер, который некоторое время без проблем размещал локальное приложение (Nextcloud), за Apache (2.4).
Я также размещаю сервер SSH на порту 443, для которого я использую sslh.
Мой сертификат LetsEncrypt предоставляется с использованием следующего conf:-
<VirtualHost localhost:8443>
ServerAdmin myemail@mailserver.com
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 myemail@mailserver.com
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>