反向代理不适用于使用 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:5000
和curl 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 天,我通过禁用 apache 的默认配置解决了这个问题。
显然我有 2 个虚拟主机用于 443。
我创建的那个和apache创建了一个文件default-ssl.conf
我所做的只是
-
禁用默认配置
a2dissite default-ssl
将 ProxyPreserveHost
从 ON
更改为 OFF
已添加SSLProxyCheckPeerName OFF
并重启了apachesystemctl restart apache2
在执行这些步骤之前,请通过列出 /etc/apache2/sites-enabled
中的所有文件来验证您是否遇到相同的问题。如果你对同一个主机和端口有多个配置,那么你就会遇到同样的问题。
【讨论】:
以上是关于反向代理不适用于使用 apache2 的 ubuntu 20 上的 https的主要内容,如果未能解决你的问题,请参考以下文章
docker中的Nginx,fastapi和streamlit - 反向代理不适用于streamlit