在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 端口即可。