使用 Nginx 在 Linux 上托管 ASP.NET Core
在本文中我们将详细介绍如何在 Linux 系统上使用 Nginx 反向代理来托管 ASP.NET Core 应用。我们将以 Ubuntu 20.04 为例并给出具体的步骤和示例代码。先决条件Linux 系统本教程以 Ubuntu 20.04 为例但大多数步骤也适用于其他基于 Debian 的 Linux 发行版。.NET Core SDK 和运行时确保您的 Linux 系统上安装了最新的 .NET Core SDK 和运行时。您可以从 Microsoft 官网下载相应的安装包。NginxNginx 需要安装在您的服务器上作为反向代理服务器。现有 ASP.NET Core 应用一个已经开发完成的 ASP.NET Core 应用。安装 .NET Core SDK 和运行时首先您需要安装 .NET Core SDK 和运行时。在 Ubuntu 上您可以使用以下命令sudo apt-get update sudo apt-get install -y apt-transport-https wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt-get update sudo apt-get install -y dotnet-sdk-6.0 # 替换为所需的 SDK 版本 sudo apt-get install -y dotnet-runtime-6.0 # 替换为所需的运行时版本发布 ASP.NET Core 应用在开发环境中使用 dotnet CLI 工具发布您的 ASP.NET Core 应用。发布时确保选择正确的配置如 Release并指定输出目录。dotnet publish -c Release -o /path/to/published将应用部署到 Linux 服务器使用 SCP 或 SFTP 将发布后的应用目录复制到 Linux 服务器上的指定位置例如/var/www/myapp。安装 Nginx在 Ubuntu 上您可以使用 apt 包管理器安装 Nginxsudo apt-get update sudo apt-get install -y nginx安装完成后确认 Nginx 正在运行sudo systemctl status nginx配置 Nginx 作为反向代理编辑 Nginx 的配置文件通常位于/etc/nginx/sites-available/目录下。您可以创建一个新的配置文件例如myapp并在其中设置反向代理规则。server { listen 80; server_name myapp.example.com; location / { proxy_pass http://localhost:5000; # ASP.NET Core 应用的监听端口 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } # 可以添加静态文件处理规则 location ~* \.(jpg|jpeg|gif|png|css|js|ico|html)$ { expires max; log_not_found off; } }将server_name替换为您的域名或 IP 地址proxy_pass中的端口号应与您的 ASP.NET Core 应用配置的监听端口一致。然后您需要创建一个符号链接到sites-enabled目录以启用该配置sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/最后重新加载 Nginx 配置以使更改生效sudo nginx -t # 检查配置语法 sudo systemctl reload nginx配置 ASP.NET Core 应用以处理转发头由于请求通过 Nginx 转发ASP.NET Core 应用需要处理转发头信息以便正确解析请求。在Startup.cs或Program.cs文件中配置 Forwarded Headers Middlewareusing Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.HttpOverrides; var builder WebApplication.CreateBuilder(args); // 其他配置... var app builder.Build(); // 在其他中间件之前配置 Forwarded Headers Middleware app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); // 其他中间件配置... app.MapGet(/, () Hello, Nginx and ASP.NET Core!); app.Run();启动 ASP.NET Core 应用在 Linux 服务器上导航到您的应用目录并使用 dotnet CLI 启动应用cd /var/www/myapp dotnet MyApp.dll --urls http://localhost:5000请确保--urls参数与 Nginx 配置中的proxy_pass地址和端口相匹配。访问应用现在您可以在浏览器中访问http://myapp.example.com或服务器的 IP 地址Nginx 将请求转发到 ASP.NET Core 应用并显示应用的响应。通过以上步骤您已经成功在 Linux 系统上使用 Nginx 反向代理托管了 ASP.NET Core 应用。您可以根据实际需求进一步配置 Nginx 和 ASP.NET Core 应用例如启用 HTTPS、配置负载均衡等。