在本文中,我们将详细介绍如何在 Linux 系统上使用 Nginx 反向代理来托管 ASP.NET Core 应用。我们将以 Ubuntu 20.04 为例,并给出具体的步骤和示例代码。
先决条件
- Linux 系统:本教程以 Ubuntu 20.04 为例,但大多数步骤也适用于其他基于 Debian 的 Linux 发行版。
- .NET Core SDK 和运行时:确保您的 Linux 系统上安装了最新的 .NET Core SDK 和运行时。您可以从 Microsoft 官网下载相应的安装包。
- Nginx:Nginx 需要安装在您的服务器上作为反向代理服务器。
- 现有 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 包管理器安装 Nginx:
sudo 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 Middleware:
using 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、配置负载均衡等。