反向代理不适用于 ubuntu 20 上的 https 使用 apache2

Reverse proxy does not work with https on ubuntu 20 using apache2

我有一个非常简单的 Asp.net 核心应用程序,已发布到我的 linux 服务器。 该应用程序运行完美,我使用 curl http://1270.0.0.1:5000curl https://1270.0.0.1:5001 来验证。

我按照此处的说明操作:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0

servername 是我的域名

我可以从 http://servername 与我的应用交互,但我无法使用 https!

https://servername returns 404

这是我的配置(大部分来自微软 link,其余部分来自 Whosebug 上的一些答案):

<VirtualHost *:*>
    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>

<VirtualHost *:80>
    ServerName servername.com
    ServerAlias *.servername.com
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
</VirtualHost>

<VirtualHost *:443>
    ProxyPreserveHost On
    ProxyPass / https://127.0.0.1:5001/
    ProxyPassReverse / https://127.0.0.1:5001/
    ServerName servername.com
    ServerAlias *.servername.com
    SSLProxyEngine on
    SSLProxyVerify none
    SSLProxyCheckPeerExpire off
    SSLEngine             on
    SSLProtocol           all -SSLv3 -TLSv1 -TLSv1.1
    SSLHonorCipherOrder   off
    SSLCompression        off
    SSLSessionTickets     on
    SSLUseStapling        off
    SSLCertificateFile    /path/to/my/cert/file
    SSLCertificateKeyFile /path/to/ny/private/key/file
    SSLCipherSuite        ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
</VirtualHost>

当您 运行 Asp.net 本地核心应用程序时。 https 在本地主机上工作。并且你用像(Apache / nginx)这样的网络服务器包装你的本地主机 https 用于你的应用程序和网络服务器之间的连接。但是您的域 https 为客户端工作,您的网络服务器需要有效的 SSl 或免费的 letsencrypt。为了保护您的客户端,必须在您的 apache 上安装 ssl。

为了在您的应用程序和网络服务器之间进行交流,简单的解决方案仅使用 http(网络服务器不需要 ssl 用于地图客户端 http)和其他解决方案为您的本地主机安装有效的 ssl https://devblogs.microsoft.com/dotnet/configuring-https-in-asp-net-core-across-different-platforms/

经过漫长的 2 天,我通过禁用 apache 的默认配置解决了这个问题。

显然我有 2 个虚拟主机用于 443。 我创建的那个和 apache 创建了一个文件 default-ssl.conf

我所做的只是

  1. 禁用默认配置a2dissite default-ssl
  2. 已将 ProxyPreserveHostON 更改为 OFF
  3. 已添加SSLProxyCheckPeerName OFF
  4. 并重新启动 apache systemctl restart apache2

在执行这些步骤之前,请通过列出 /etc/apache2/sites-enabled 中的所有文件来验证您是否遇到了同样的问题。如果您对同一主机和端口有多个配置,那么您会遇到同样的问题。