我有一台服务器,它在 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>