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

Posted

技术标签:

【中文标题】反向代理不适用于使用 apache2 的 ubuntu 20 上的 https【英文标题】:Reverse proxy does not work with https on ubuntu 20 using apache2 【发布时间】:2022-01-24 00:58:48 【问题描述】:

我有一个非常简单的 Asp.net Core 应用程序,已发布到我的 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 返回 404

这是我的配置(大部分来自 microsoft 链接,其余来自 *** 上的一些答案):

<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>

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我的域上有一个有效的证书,它可以正常工作。应用程序和使用 https 的网络服务器之间没有通信,我得到 404。日志中没有错误,我在 access.log 中只得到 404 信息 我尝试在应用程序和网络服务器(反向代理)之间不使用 SSL,但收到错误消息 AH00898: Error during SSL Handshake with remote server returned by / 。但是我设法通过添加 SSLProxyCheckPeerName off 来解决它。我不知道为什么,但它有效 @Niroda 你必须删除或评论所有 块只保留 【参考方案2】:

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

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

我所做的只是

    禁用默认配置a2dissite default-sslProxyPreserveHostON 更改为 OFF 已添加SSLProxyCheckPeerName OFF 并重启了apachesystemctl restart apache2

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

【讨论】:

以上是关于反向代理不适用于使用 apache2 的 ubuntu 20 上的 https的主要内容,如果未能解决你的问题,请参考以下文章

docker中的Nginx,fastapi和streamlit - 反向代理不适用于streamlit

12.反向代理——Apache2

apache2反向代理到docker容器403被禁止?

apache2.2 反向代理 配置css js静态文件

Apache2 反向代理上的 Odoo 14 - 页面速度错误始终如一

如何使用基本身份验证保护在 Apache2 虚拟主机中反向代理的 Tomcat webapp?