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>
Другие вопросы по тегам