Apache、sslh、SSL 证书、本地应用程序和 dockerised 应用程序

Apache、sslh、SSL 证书、本地应用程序和 dockerised 应用程序

我有一台服务器,它在 apache(2.4)之后托管本地应用程序(Nextcloud)有一段时间了,没有任何问题。

我还在端口 443 上托管一个 SSH 服务器,为其使用 sslh。

我的 LetsEncrypt 证书使用以下配置提供:-

<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。这个主意很糟糕,我发现这会让我头疼,但没关系,我可以更改我的免费 noip,吸取教训。

我现在正尝试添加另一个“文件夹”(这样我就可以执行 my.domain.name.noip.me/app),该文件夹在 docker 容器(如果重要的话,是 bitwarden)中运行。我的 docker 命令基本上是(减去所有不重要的配置):-

docker run -d --name bitwarden -p 54321:80 bitwardenrs/server:latest

这意味着我现在可以使用 my.domain.name.noip.me:54321 访问 bitwarden

我一直尝试使用 ProxyPass 通过 /app 子文件夹访问 bitwarden,如下所示:-

<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。没有人会在端口 443 上查找 HTTP。

如果要将所有 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>

相关内容