发布和托管应用程序
最后更新时间:2025 年 03 月
概述
SnapDevelop 提供以下方法来发布您的项目:
- 文件夹:发布到本地文件夹或网络共享文件夹。
- Web 服务器(IIS):发布到 IIS 服务器。
- Docker 容器注册表:发布到任何支持 Docker 镜像的容器仓库。
- Kubernetes 集群:发布到 Kubernetes 集群。
ASP.NET Core Web API 和 ASP.NET Core gRPC 服务支持以下发布类型:
- 文件夹
- Web 服务器(IIS)
- Docker 容器注册表
- Kubernetes 集群
控制台应用、类库、ASP.NET Core 类库、Vue Web 应用程序、Vue 项目、Worker Service、和 xUnit 测试支持以下发布类型:
- 文件夹
- Docker 容器注册表
- Kubernetes 集群
在安装产品时,需选择安装 “Docker 开发” 和 “Kubernetes 开发” 组件,否则 “Docker 容器注册表” 以及 “Kubernetes 集群” 选项不可见。
发布到文件夹
本节介绍如何使用 SnapDevelop 将 C# 项目和 JavaScript/TypeScript 项目发布到本地文件夹或网络共享文件夹。
发布 C# 项目
将 C# 项目发布到文件夹
-
在解决方案资源管理器中,右键点击项目,然后在菜单中选择 发布。
-
在出现的窗口中,选择 文件夹 选项卡,然后点击 下一步。
-
浏览并选择一个本地或网络文件夹作为发布目标位置,然后点击 下一步。
-
编辑发布配置然后点击 保存 或选择一个已存在的配置文件。
点击 目标位置 图标,可以指定发布目标位置。
点击 配置 图标可配置以下相关选项。
设置 描述 配置 选择 Debug 或 Release 模式。 目标框架 选择目标框架。 部署模式 独立 -- 将您的应用程序发布为一个包含 .NET Core 运行时和库以及您的应用程序及其依赖项的应用程序。应用程序的用户可以在没有安装 .NET Core 运行时的机器上运行它。框架依赖 -- 将您的应用程序发布为一个仅包含您的应用本身及其依赖项的应用程序。该类应用的用户必须单独安装 .NET Core 运行时。 目标运行时 选择目标运行时。 文件发布选项 在发布前删除目标文件夹内所有文件。 数据库 当它被选中时,发布过程会将部署的 Web.config 文件中此数据库的连接字符串更改为您在文本框中指定的值。 -
单击 发布 后,发布过程开始。您可以在 输出 窗口中查看发布进度。
发布 JavaScript/TypeScript 项目
将 JavaScript/TypeScript 项目发布到文件夹
-
在解决方案资源管理器中,右键点击项目,然后在菜单中选择 发布。
-
在出现的窗口中,选择 文件夹 选项卡,然后点击 下一步。
-
浏览并选择一个本地或网络文件夹作为发布目标位置,然后点击 下一步。
-
编辑发布配置然后点击 保存 或选择一个已存在的配置文件。
点击 目标位置 图标,可以指定发布目标位置。
点击 配置 图标可配置以下相关选项。
设置 描述 配置 选择 Debug 或 Release 模式。 删除现有文件 在发布前删除目标文件夹内所有文件。 -
单击 发布 后,发布过程开始。您可以在 输出 窗口中查看发布进度。
发布到 Docker 或 Kubernetes
SnapDevelop 对 Docker 和 Kubernetes 的支持简化了容器化应用程序的开发、测试和部署。SnapDevelop 提供的 容器资源管理器 和 Kubernetes 资源管理器 可以比原始 Docker 和 Kubernetes 命令更高效地管理您的镜像和容器。
您可以向项目添加两个级别的容器支持:
-
容器支持 或 Kubernetes 支持 -- 为单个项目启动容器或 Kubernetes 支持。
-
容器编排支持 -- 使用 Docker Compose 或 Kubernetes Compose 支持多容器(例如包含了多个项目的解决方案)。
有关如何发布到 Docker 和 Kubernetes,请参阅 发布到 Docker 和 发布到 Kubernetes。
发布到阿里云
阿里云取消了 Web 应用托管服务,因此您无法直接从 SnapDevelop 部署应用到阿里云。
但是您可以使用 SnapDevelop 的 Kubernetes 资源管理器 和 Helm 来部署应用到阿里云集群。
以下是具体操作步骤:
- 通过 SnapDevelop Installer 安装以下组件:
- Kubernetes 开发
- 阿里云集成
-
在 Kubernetes 资源管理器 中连接阿里云集群:
- 登录阿里云账号:
- 在 SnapDevelop IDE 中选择菜单:视图 > 账号管理器,输入您的阿里云账户。
- 进入容器服务:
- 在 SnapDevelop IDE 中选择菜单:视图 > Kubernetes 资源管理器。
- 登录阿里云账号之后,Kubernetes 资源管理器 就会出现一个 阿里云 节点,展开节点可以看到当前账号下的所有阿里云集群。
-
部署应用:
-
在 SnapDevelop 的 解决方案资源管理器 中右键点击项目节点,然后选择 发布。
-
在发布窗口中,选择 Kubernetes 集群。接下来的步骤请参考:发布到 Kubernetes。
-
发布到 IIS
本节介绍如何使用 SnapDevelop 将项目发布到 IIS。它还包括一些常见错误的故障排除信息。
准备工作
在将项目发布到 IIS 之前,必须同时满足服务器端和客户端的要求。
服务器端要求
-
Windows Server 2022、2019、2016 或 2012
如果您的操作系统是 Windows 10,您可以使用 文件夹 而不是 Web 服务器(IIS) 将您的项目发布到您的本地文件夹。
确保您的 Windows 是最新的并且已更新KB2999226,否则您在启动 .NET Core 应用程序时可能会看到此错误:The program can't start because api-ms-win-crt-runtime-1-1-0.dll is missing from your computer. Try reinstalling the program to fix this problem.
-
Web Deloy 3.6或更高版本
下载链接:https://www.iis.net/downloads/microsoft/web-deploy
安装 Web Deploy 时,选择完整安装类型进行安装。
-
Hosting Bundle
下载链接:https://dotnet.microsoft.com/download/dotnet-core
下载并安装 ASP.NET Core Hosting Bundle。确保 ASP.NET Core Hosting Bundle 的版本与项目目标的框架版本相同。例如,如果您的项目面向 .NET Core 3.1,请安装 Hosting Bundle 3.1版本。
客户端要求
-
Windows 10
确保您的 Windows 是最新的并且已更新KB2999226,否则您在启动 .NET Core 应用程序时可能会看到此错误:The program can't start because api-ms-win-crt-runtime-1-1-0.dll is missing from your computer. Try reinstalling the program to fix this problem.
-
Web Deploy 3.6或更高版本
安装 SnapDevelop 时会自动安装客户端的 Web Deploy。
配置服务器端
配置 IIS
配置 IIS
-
启动 Server Manager。
-
使用 Manage 菜单中的 Add Roles and Features 向导或 Server Manager 的链接。在 Server Roles页面上,选中 Web Server (IIS) 和 Management Tools 复选框。
-
在 Features 页面上,选中 .NET Framework 3.5 Features 和 .NET Framework 4.6 Features 复选框。
-
确认您选择的 Roles 和 Features,然后点击 Install。
配置 Web Deploy
安装 Web Deploy 后,您必须启用 Web Management Service 和 Web Deployment Agent Service。
启用服务
-
启动桌面应用程序 Services。
-
找到 Web Management Service 和 Web Deployment Agent Service。右键点击它们中的每一个,然后选择 Start。
启用远程连接
启用远程连接
-
启动 IIS Manager。
-
首先在 Connections 面板中选择您的计算机,然后双击右侧的 Management Service。
-
在 Management Service 中,先点击 Stop,然后选中 Enable remote connections 复选框,最后点击 Apply。
添加 IIS 用户
您可以添加 IIS Manager 类型或 Windows 类型的 IIS 用户。
添加 IIS Manager 用户
-
在IIS Manager 中,在 Connections 面板中选择您的计算机,然后双击 IIS Manager Users。
-
点击 Add User 以添加用户。
-
在 IIS Manager 中,右键点击 Connections 面板中的 Sites 文件夹,然后选择 Add Website。
-
指定站点名称、物理路径和绑定信息。
-
展开 Sites 文件夹。首先选择新创建的网站,然后双击 IIS Manager Permissions。
-
首先点击Allow User ,然后在对话框中选择 IIS Manager。点击 Select 以选择您添加的用户。
添加 Windows 用户
添加 Windows 用户
-
在 IIS Manager 中,右键点击 Connections 面板中的 Sites 文件夹,然后选择Add Website...。
-
指定站点名称、物理路径和绑定信息。
-
展开 Sites 文件夹。首先选择新创建的网站,然后双击 IIS Manager Permissions。
-
点击 Allow User。在出现的对话框中,选择 Windows,然后单击 Select。
-
指定对象类型、位置并输入用户名以选择用户。
-
在 IIS Manager 中,首先选择您的站点,然后点击 Basic Settings。
-
选择 Connect as > Specific user > Set 以设置用户名和密码。
-
点击步骤 7 中的 Test Settings... 以测试连接。
将项目发布到 IIS
将项目发布到 IIS
-
在解决方案资源管理器中,右键点击项目节点,然后选择 发布。
-
在出现的窗口中,选择 Web 服务器(IIS) 选项卡,然后点击 下一步。
-
配置 Web 服务器连接信息文件或者点击 导入 导入一个现有的连接文件,然后点击 下一步。
服务器:Web 服务器的域名或 IP 地址。
站点名称:Web 服务器站点的名称。
用户名:连接 Web 服务器的用户名。请注意,用户名可以是 IIS Web Deploy 用户名或 Windows 用户名。
密码:连接 Web 服务器的密码。
目标 URL:发布后在浏览器中打开访问查看发布效果的 URL。
-
编辑发布配置 。
点击 服务器 图标,可以修改服务器连接信息。
点击 配置 图标,可配置以下相关选项。
设置 描述 配置 选择 Debug 或 Release 模式。 目标框架 选择目标框架。 部署模式 独立 -- 将您的应用程序发布为一个包含 .NET Core 运行时和库以及您的应用程序及其依赖项的应用程序。应用程序的用户可以在没有安装 .NET Core 运行时的机器上运行它。框架依赖 -- 将您的应用程序发布为一个仅包含您的应用本身及其依赖项的应用程序。该类应用的用户必须单独安装 .NET Core 运行时。 目标运行时 选择目标运行时。 删除目标上的其他文件 在发布前删除目标文件夹内所有文件。 在运行时使用此连接字符串 当它被选中时,发布过程会将部署的 Web.config 文件中此数据库的连接字符串更改为您在文本框中指定的值。 -
单击 发布 后,发布过程开始。您可以在 输出 窗口中查看发布进度。
故障排除
本主题介绍将项目发布到 IIS 时可能出现的常见错误。
该站点不存在
The site does not exist
如果您没有选择 Web Deploy 的完整安装类型进行安装,则会发生此错误。Web Deploy Agent Service 将不会被用于Web Deploy的其它设置类型。
解决方案:
卸载当前版本的 Web Deploy,然后安装完整版本。
Web 服务器配置为不列出此目录的内容
The Web server is configured to not list the contents of this directory
解决方案:
-
启动 IIS Manager,在 Connections 面板中选择您的站点,然后点击 Directory Browsing。
-
点击 Enable。
有关 IIS 应用程序池权限的错误
Error concerning IIS application pool permission
发生此类错误时,无法将数据检索到您的应用程序,并返回错误代码 500。这是因为 IIS 应用程序池没有登录数据库的权限。
解决方案 1:
将应用程序池标识符更改为有权访问数据库的用户。
解决方案 2:
将发布后出现的 web.config 文件中的 stdoutLogEnabled="false" 更改为 stdoutLogEnabled="true"。
将应用程序发布到先前已发布应用程序的远程站点时,指示文件已锁定的错误
Error indicating that files are locked when an application is published to a remote site where an application has previously been published
解决方案 1:
发布后关闭并重新启动站点。
解决方案 2:
配置发布文件时,选中复选框 发布前删除所有现有文件。
将 .NET Core 2.2 应用程序发布到 IIS 时出现运行时错误 500.30
Runtime error 500.30 when publishing .NET Core 2.2 application to IIS
解决方案:
在应用程序配置文件中,将 PropertyGroup 中的"InProcess"更改为"OutOfProcess",并添加 ModelName 属性。
更改方法后可能会出现错误 502.5。如果是这种情况,请将 Web API 的 .NET 路径更改为绝对路径并重新启动计算机。
如果错误 502.5 仍然存在,您可以检查事件日志。如果日志提示启动失败,可能是权限不够。想要修复错误,请在 IIS Manager 中右键点击该网站并选择 Advanced Settings。在 Process Model 下选择 Identity,然后选择 Custom account 输入本地管理员的用户名和密码。
在 Linux 上发布和托管 ASP.NET Core 应用程序
在本节中,我们将创建一个 Web API 应用程序,并将它发布到文件系统,然后按照以下步骤将应用程序托管在 Linux CentOS 7 操作系统上:
-
在 SnapDevelop 中,发布带有中间件以支持反向代理的 Web API 应用程序。
-
将 Web API 应用程序从本地已发布文件夹复制到 CentOS 服务器。
-
在 CentOS 中,在配置了反向代理 (Apache) 的 CentOS 上托管 Web API 应用程序。
有关如何在 CentOS 7 上将 Apache 设置为反向代理的更多信息,您可以进一步阅读 Microsoft 文章:使用 Apache 在 Linux 上托管 ASP.NET Core。
准备工作
-
SnapDevelop 2026。
-
使用标准 sudo 用户帐户运行使用 CentOS 7 的服务器。
-
安装 .NET Core Runtime 在 CentOS 7 上,说明如下。
在 CentOS 7 上安装 .NET Core 运行时
在安装 .NET Runtime 之前,您需要注册 Microsoft 密钥,注册软件存储库,并安装所需的依赖项。这些只需每台机器执行一次,请打开终端并运行以下命令:
# Install repository configuration
curl https://packages.microsoft.com/config/rhel/7/prod.repo > ./microsoft-prod.repo
sudo cp ./microsoft-prod.repo /etc/yum.repos.d/
# Install Microsoft's GPG public key
curl https://packages.microsoft.com/keys/microsoft.asc > ./microsoft.asc
sudo rpm --import ./microsoft.asc
安装产品的最新的可用更新,然后安装 .NET 运行时。
在您的终端中,运行以下命令:
# Install the latest available updates for the product
sudo yum update
# Install the ASP.NET Core 3.1 runtime
sudo yum install aspnetcore-runtime-3.1
上一条命令将安装 .NET Core Runtime Bundle,其中包括 .NET Core 运行时和 ASP.NET Core 3.1 运行时。若要仅安装 .NET Core 运行时,请使用 dotnet-runtime-3.1 包。请注意,运行时版本必须与您希望项目面向的 .NET Framework 版本相同。
将 ASP.NET Core 应用程序发布到服务器
申请准备
在 SnapDevelop 中,从菜单栏中选择文件,然后选择新建 > 新建项目...。在对话框中,找到并选择 ASP .NET Core Web API。接着,填写项目信息,点击下一步 > 创建创建一个名为 WebAPI1 的 .NET Core 项目。
在发布之前需要对反向代理和 Kestrel 服务器进行一些配置。
转接头中间件的配置
因为请求由反向代理转接,使用 Microsoft.AspNetCore.HttpOverrides 包的转接头中间件。中间件使用 X-Forwarded-Proto 标头更新Request.Scheme,这事为了重定向 URI 和确保其他安全策略正常工作。
任何依赖于该方案的组件,例如身份验证、链接生成、重定向和定位,都必须在调用转接头中间件之后放置。作为一般规则,转接头中间件应该在其他中间件之前运行,诊断和错误处理中间件除外。此运行顺序确保依赖转接的标头信息的中间件可以使用标头值进行处理。
在调用 UseAuthentication 或类似的身份验证方案中间件之前需调用 Startup.Configure 中的 UseForwardedHeaders 方法。配置中间件以转发X-Forwarded-For和X-Forwarded-Proto标头:
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseAuthentication();
如果没有为中间件指定 ForwardedHeadersOptions,则默认转发的标头为 None。
在环回地址 (127.0.0.0/8, [::1]) 上运行的代理,包括标准本地主机地址 (127.0.0.1),默认情况下是受信任的。对于组织内处理 Internet 和 Web 服务器之间请求的其他受信任代理或网络,请将它们作为 ForwardedHeadersOptions 中的选项添加到 KnownProxies 或 KnownNetworks 列表中。以下示例将 IP 地址为 10.0.0.100 的受信任代理服务器添加到 Startup.ConfigureServices 中转发标头中间件的 KnownProxies:
services.Configure<ForwardedHeadersOptions>(options =>
{
options.KnownProxies.Add(IPAddress.Parse("10.0.0.100"));
});
有关详细信息,请参阅:配置 ASP.NET Core 以使用代理服务器和负载均衡器。
将应用程序发布到本地文件夹
-
在解决方案资源管理器中,右键单击该项目并选择发布。
-
在弹出窗口中,选择文件夹。
-
指定发布的文件夹位置。
-
转到配置右侧的图标,将目标运行时更改为 linux-x64。
(请注意,应用程序默认配置为 Framework-dependent deployment)
-
点击保存以继续。
-
点击发布,然后您可以在输出窗口中查看发布状态。
将应用程序复制到服务器
发布 Web API 应用程序后,您可以使用例如 SCP、SFTP这样的工具将应用程序从已发布文件夹复制到 CentOS 服务器。通常在var目录下定位 Web 应用程序(例如var/www/WebAPI1)。
使用 Apache 在 CentOS 上托管 ASP.NET Core
配置代理服务器
反向代理是为动态 Web 应用程序提供服务的常见设置。反向代理终止 HTTP 请求并将其转发到 Web API 应用程序。在本示例中,Apache 将被配置为反向代理,Kestrel 会为 Web API 应用程序提供服务。Apache 会将客户端请求转发到在 Kestrel 上运行的 Web API 应用程序,而不是自己解决请求。
安装 Apache
将 CentOS 软件包更新到最新的稳定版本:
sudo yum update -y
使用单个 yum 命令在 CentOS 上安装 Apache Web 服务器:
sudo yum -y install httpd mod_ssl
要验证 Apache 的安装位置,请从命令提示符运行 whereis httpd。
配置 Apache
打开 /etc/httpd/conf/httpd.conf 文件并全局设置 ServerName 指令:
sudo nano /etc/httpd/conf/httpd.conf
# Set ServerName in this configuration file
ServerName www.example.com:80
Apache 的配置文件位于 /etc/httpd/conf.d/ 目录中。除了包含加载模块所需配置文件的 /etc/httpd/conf.modules.d/ 中的模块配置文件之外,任何带有 .conf 扩展名的文件都按字母顺序处理。
创建配置文件:
sudo nano /etc/httpd/conf.d/WebAPI1.conf
应用程序的配置文件示例:
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=$scheme
</VirtualHost>
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ServerName www.example.com
ServerAlias *.example.com
ErrorLog /var/log/httpd/WebAPI1-error.log
CustomLog /var/log/httpd/WebAPI1-access.log common
</VirtualHost>
该 VirtualHost 块可以在一台服务器上的一个或多个文件中多次出现。在上述配置文件中,Apache 接受端口 80 上的公共流量。正在服务域 www.example.com,并且 .example.com 别名解析为同一个域。有关详细信息,请参阅 Name-based vs. IP-based Virtual Hosts。请求在根处被代理到服务器地址127.0.0.1的5000端口 。对于双向通信来说,需要设置 ProxyPass 和 ProxyPassReverse。想要更改 Kestrel 的 IP/端口,请参阅 ASP.NET Core 中的 Kestrel Web 服务器实现。
警告:未能在 VirtualHost 块中指定正确的 ServerName 指令会使您的应用程序面临安全漏洞。如果您控制整个父域(与易受攻击的 .com 相反),则子域通配符绑定(例如 .example.com)不会带来此安全风险。
您可以使用 ErrorLog 和 CustomLog 指令为每个 VirtualHost 配置日志记录。ErrorLog 是服务器记录错误的位置,CustomLog 设置日志文件的文件名和格式。在这种情况下,这是记录请求信息的地方,且每个请求都有一行。
保存文件并测试配置。如果一切顺利,响应应该是 Syntax [OK]。
sudo service httpd configtest
重启 Apache:
sudo systemctl restart httpd
sudo systemctl enable httpd
监控应用程序
Apache 现在已设置为将向 http://localhost:80 发出的请求转发到在 Kestrel 上运行的 Web API 应用程序 http://127.0.0.1:5000 。但是,Apache 并未设置为可以管理 Kestrel 进程。您需要使用 systemd 并创建一个服务文件来启动和监控底层 Web 应用程序。systemd 是一个 init 系统,它提供了许多用于启动、停止和管理进程的强大功能。
创建服务文件
创建服务定义文件:
sudo nano /etc/systemd/system/kestrel-webapi1.service
应用程序的服务文件示例:
[Unit]
Description=Example .NET Web API application running on CentOS 7
[Service]
WorkingDirectory=/var/www/WebAPI1
ExecStart=/usr/share/dotnet /var/www/WebAPI1/WebAPI1.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=apache
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
如果配置未使用 user apache,则必须首先创建 user 并赋予文件的正确所有权。
使用 TimeoutStopSec 将配置应用程序在收到初始中断信号后等待关闭的持续时间。如果应用程序在此期间没有关闭,则发出 SIGKILL 以终止应用程序。可以将值设置为无单位秒(例如 150 )、时间跨度值(例如 2min30s )或 infinity 以禁用超时。TimeoutStopSec 默认为管理器配置文件(systemd-system.conf 、system.conf.d 、systemd-user.conf 、user.conf.d )中 DefaultTimeoutStopSec 的值。大多数发行版的默认超时为 90 秒。
# The default value is 90 seconds for most distributions.
TimeoutStopSec=90
保存文件并启用服务:
sudo systemctl enable kestrel-webapi1.service
启动服务并验证它是否正在运行:
# Start the service
sudo systemctl start kestrel-webapi1.service
# Verify the service
sudo systemctl status kestrel-webapi1.service
# kestrel-webapi1.service - Example .NET Web API application running on CentOS 7
Loaded: loaded (/etc/systemd/system/kestrel-webapi1.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2019-08-06 13:46:27 CST; 5s ago
Main PID: 46668 (dotnet)
Tasks: 16
CGroup: /system.slice/kestrel-webapi1.service
└─46668 /usr/share/dotnet/dotnet /var/www/WebAPI1/WebAPI1.dll
配置反向代理并通过 systemd 管理 Kestrel 后,Web 应用程序已完成配置,可以从位于 http://localhost/api/sample/load 的本地计算机上的浏览器访问。查看响应头,Server 右侧的 Kestrel 表明 Web API 应用程序由 Kestrel 提供服务:
HTTP/1.1 200 OK
Date: Tue, 06 Aug 2019 05:52:17 GMT
Server: Kestrel
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
查看日志
由于使用 Kestrel 的 Web 应用程序是使用 systemd 管理的,因此事件和进程会记录到一个集中的日志中。但是,该日志还包括 systemd 管理的服务和进程的所有条目。使用以下命令可以查看 kestrel-webapi1.service 的具体项目:
sudo journalctl -fu kestrel-webapi1.service
对于时间过滤,请使用命令指定时间选项。例如,使用 --since today 过滤当天或 --until 1 hour ago 查看前一小时的条目。有关更多信息,请参阅 journalctl 的手册页。
sudo journalctl -fu kestrel-webapi1.service --since "2019-08-06" --until "2019-08-06 23:00"
为客户端安全连接 (HTTPS) 配置反向代理
要为 HTTPS 配置 Apache,请使用 mod_ssl 模块。当 httpd 模块被安装时,mod_ssl 模块也会被安装。如果未安装,请使用 yum 将其添加到配置中。
sudo yum install mod_ssl
要强制 HTTPS,请安装 mod_rewrite 模块以启用 URL 重写:
sudo yum install mod_rewrite
修改 /etc/httpd/conf.d/WebAPI1.conf 文件,启用443端口的 URL 重写和安全通信:
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=$scheme
</VirtualHost>
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>
<VirtualHost *:443>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ErrorLog /var/log/httpd/WebAPI1-error.log
CustomLog /var/log/httpd/WebAPI1-access.log common
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:!RC4+RSA:+HIGH:+MEDIUM:!LOW:!RC4
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
</VirtualHost>
此示例使用本地生成的证书。SSLCertificateFile 是域名的主要证书文件。SSLCertificateKeyFile 是创建 CSR时生成的密钥文件。SSLCertificateChainFile 是证书颁发机构提供的中间证书文件(如果存在)。
保存文件并测试配置:
sudo service httpd configtest
Restart Apache:
sudo systemctl restart httpd
HTTPS 完全配置好后,您可以从本地计算机上的浏览器访问 Web 应用程序,网址为 https://localhost/api/sample/load。请注意这里是 https://...。
资料来源
本节的内容结合了 Shayne Boyer 在 CC BY 2.0 下许可的 “Host ASP.NET Core on Linux with Apache” 的一些材料。