反向代理不适用于 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: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
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
我所做的只是
- 禁用默认配置
a2dissite default-ssl
- 已将
ProxyPreserveHost
从 ON
更改为 OFF
- 已添加
SSLProxyCheckPeerName OFF
- 并重新启动 apache
systemctl restart apache2
在执行这些步骤之前,请通过列出 /etc/apache2/sites-enabled
中的所有文件来验证您是否遇到了同样的问题。如果您对同一主机和端口有多个配置,那么您会遇到同样的问题。
我有一个非常简单的 Asp.net 核心应用程序,已发布到我的 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
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
我所做的只是
- 禁用默认配置
a2dissite default-ssl
- 已将
ProxyPreserveHost
从ON
更改为OFF
- 已添加
SSLProxyCheckPeerName OFF
- 并重新启动 apache
systemctl restart apache2
在执行这些步骤之前,请通过列出 /etc/apache2/sites-enabled
中的所有文件来验证您是否遇到了同样的问题。如果您对同一主机和端口有多个配置,那么您会遇到同样的问题。