在非标准 HTTP 端口下为运行其自己的 Web 服务器的应用程序添加 HTTPS 支持

bol*_*ino 5 ssl http https apache-2.4

我有一台运行 Debian 10 的服务器。它运行 Apache 2.4 以提供可在 下访问的 Web 服务https://example.com,这要归功于 LetsEncrypt 证书。

但它也运行一个应用程序 (Subsonic),它在端口 4040 上提供 Web UI,在它自己的 Web 服务器下,因为我没有它的 vhost,并且当 Apache 停止时它仍然可以访问。因此,目前该应用程序可通过 HTTP 访问http://example.com:4040

我知道如何为 Apache 虚拟主机添加 SSL 支持,但如何为该应用程序添加 HTTPS 支持,以便可以在https://example.com:4040或上访问它https://example.com:1234

另外,我是否应该使用与该域已有的 SSL 证书不同的 SSL 证书?

gar*_*Red 11

在应用前添加反向代理,并在此代理上配置 HTTPS。方便的是,您可以运行 Apache,它可以为您愉快地进行反向代理。

就目前而言,您不能使用应用程序已经占用的端口 4040,因此除非您可以更改应用程序的端口或让它绑定到本地主机(127.0.0.1 等),否则您必须运行这个应用程序在不同的端口上。在这一点上,如果您想通过 HTTPS 运行此应用程序,那么让不安全的 HTTP 仍然可以访问它是没有意义的,因此最好将此应用程序配置为绑定到本地主机并使其只能通过反向代理访问。

您需要ProxyPass一系列配置选项来创建反向代理。这是一个不完整的例子:

Listen <Public IP address of server>:4040

<VirtualHost *:4040>

  Protocols h2 h2c http/1.1
  ServerName example.com

  SSLEngine On

  # LetsEncrypt certificates (if not configured in another file)
  #  SSLCertificateFile    /etc/letsencrypt/live/example.com/fullchain.pem
  #  SSLCertificateKeyFile /etc/letsencrypt/live/eample.com/privkey.pem
  #  Include               /etc/letsencrypt/options-ssl-apache.conf

  ProxyPreserveHost On
  ProxyRequests Off
  ProxyPass / http://127.0.0.1:4040/
  ProxyPassReverse / http://127.0.0.1:4040/

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

证书需要将客户端用于连接的主机名嵌入到它们的主题备用名称扩展中,因此由于您似乎没有提议不同的主机(example.com在这两种情况下),您将不需要新证书。

  • 是的。该应用程序仅在本地侦听,任何外部流量在将其转发到应用程序之前都会在端口 4040 上访问代理。它可以做到这一点,因为代理也是本地的。 (5认同)