Skip to content

在linux 上nginx 部署.net core 教程 ​

内容摘要

nginx作为web开发最流行的高性能 Web 服务器和反向代理软件,因高并发、低资源消耗而闻名,广泛应用于互联网架构中,下面介绍下在linx 上nginx 部署.net core 教程。为以后做项目留个技术文档,以备需要时查阅

在 Linux 上使用 Nginx 部署 .NET Core 应用,核心思路是:让 .NET 应用在后台运行,Nginx 作为反向代理接收外部请求并转发给它。下面以 Ubuntu 为例,梳理完整的部署流程。

部署前准备 ​

首先确保服务器已安装 .NET 运行时。如果应用采用“框架依赖”方式发布,服务器需要安装对应版本的 ASP.NET Core 运行时。以 .NET 8 为例:

安装完成后,用 dotnet --list-runtimes 验证

# 添加微软包源
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

# 安装 ASP.NET Core 运行时
sudo apt-get install -y aspnetcore-runtime-8.0

发布并上传应用 ​

在本地开发环境中,使用发布命令生成可部署的文件:

将 publish 目录下的所有文件上传到服务器,例如放到 /var/www/myapp。建议使用 scp 传输

dotnet publish -c Release -o ./publish

配置 Nginx 反向代理 ​

Nginx 不直接运行 .NET 应用,而是把接收到的 HTTP 请求转发给 Kestrel(.NET 内置的 Web 服务器)监听的本地端口 创建 Nginx 站点配置文件 /etc/nginx/sites-available/myapp

server {
    listen 80;
    server_name your-domain.com;  # 替换为你的域名或服务器 IP

    location / {
        proxy_pass         http://localhost:5000;
        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;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

启用配置并重载 Nginx: ​

重载 Nginx

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t          # 测试配置语法
sudo systemctl reload nginx

将 .NET 应用配置为系统服务 ​

直接用 dotnet app.dll 启动的应用,在 SSH 断开后就会停止。推荐使用 systemd 来管理,实现开机自启和进程守护。

创建服务文件 /etc/systemd/system/myapp.service:

注意:ASPNETCORE_URLS 指定应用监听的地址,必须与 Nginx 配置中的 proxy_pass 端口一致。

[Unit]
Description=My ASP.NET Core App

[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/MyApp.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=myapp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://localhost:5000

[Install]
WantedBy=multi-user.target

启动并设置开机自启: ​

 启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
sudo systemctl status myapp   # 确认状态为 active (running)

关于请求头转发(重要) ​

由于 Nginx 做了代理,.NET 应用看到的请求来源会变成代理服务器的地址。为了让应用能正确获取客户端的真实 IP 和协议(HTTP/HTTPS),需要在 Program.cs 中添加转发头中间件

// 在 app.UseAuthentication() 等中间件之前调用
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

完成后的访问 ​

配置生效后,访问 http://your-domain.com 即可看到你的 .NET 应用,Nginx 会自动将请求转发到本地的 5000 端口。

如果后续需要绑定 HTTPS,可以在此基础上为 Nginx 配置 SSL 证书,应用本身仍然监听本地 HTTP 端口即可。

温州鑫赫信息技术

为企业、商铺、批发商、零售商提供软件服务,包括进销存、财务、ERP、MES等系列软件。

温州鑫赫信息技术有限公司