【Nginx】零基础在Windows服务器部署.NET Core + Nginx全解(避坑大全)

关键词:Windows Nginx部署.NET Core、.NET Core发布教程、反向代理配置
适合人群:.NET开发者 | IT运维 | 全栈新手
前置知识:熟悉C#基础语法


一、环境准备:只需5分钟

1.1 安装.NET Core运行时

在开始部署.NET Core 应用之前,我们需要先安装.NET Core 运行时,它是运行.NET Core 应用程序的基础环境。

步骤
  1. 打开浏览器,访问.NET Core Runtime 官方下载页面。这个页面会列出所有可用的.NET Core 版本。
  2. 根据你项目所使用的.NET Core 版本进行选择。例如,如果你的项目是基于.NET Core 6.0 开发的,就在所有.NET 版本中仔细查找对应的 6.0 版本,然后点击下载链接。
    • 为什么要根据项目版本选择呢?因为不同版本的.NET Core 可能有一些特性和 API 的差异,如果版本不匹配,应用程序可能无法正常运行。
  3. 下载完成后,运行安装程序。在安装过程中,你会看到一些选项:
    • 勾选 “安装运行时”:这个选项是必须勾选的,因为只有安装了运行时,我们的.NET Core 应用才能在服务器上运行。
    • 勾选 “添加到系统 PATH”:这个选项也很重要,它会将.NET Core 的相关命令添加到系统的环境变量中,这样我们就可以在命令行中直接使用dotnet命令了。如果不勾选,后续在命令行中使用dotnet命令时可能会出现 “命令找不到” 的错误。

在这里插入图片描述

✅ 勾选“安装运行时”和“添加到系统PATH”!

1.2 安装Nginx for Windows

Nginx 是一个高性能的 Web 服务器,我们使用它来作为反向代理,将用户的请求转发到我们的.NET Core 应用上。

步骤
  1. 同样打开浏览器,进入Nginx 官网下载页
  2. 在页面中找到适合 Windows 系统的版本,一般会有多个版本可供选择,选择稳定版本即可。
    • 如何判断哪个是稳定版本呢?通常在版本号后面会有一些标识,如 “Stable” 表示稳定版本,“Mainline” 表示开发版本,我们选择 “Stable” 版本就可以了。
  3. 下载完成后,将下载的压缩包解压到C:\nginx目录。
    • 为什么选择这个目录呢?这个目录是比较常见的 Nginx 安装目录,方便我们后续的配置和管理。当然,你也可以选择其他目录,但要注意在后续的配置中相应地修改路径。

在这里插入图片描述

解压到 C:\nginx 目录:
在这里插入图片描述


二、发布.NET Core项目

2.1 生成发布文件

在开发环境中,我们的.NET Core 项目通常包含很多开发时依赖的文件,这些文件在生产环境中是不需要的。所以,我们需要生成一个发布版本,只包含运行应用程序所必需的文件。

步骤
  1. 打开命令行工具(如 PowerShell 或 CMD)。

  2. 使用cd命令切换到你的.NET Core 项目的根目录。例如,如果你的项目在D:\MyProjects\MyApp目录下,那么在命令行中输入:

    cd D:\MyProjects\MyApp
    
  3. 在项目根目录执行以下命令(以 Release 模式为例):

    dotnet publish -c Release -o ./publish
    
    • 这里的-c Release表示使用 Release 模式进行发布,Release 模式会对代码进行优化,去除调试信息,使应用程序运行得更快。
    • -o ./publish表示将发布文件输出到当前目录下的publish文件夹中。
  4. 等待命令执行完成,成功生成 publish 文件夹。这个文件夹中包含了我们应用程序运行所需的所有文件。

在这里插入图片描述

2.2 上传到服务器

生成发布文件后,我们需要将这些文件上传到服务器上。

步骤
  1. 将整个publish文件夹复制到服务器目录(如C:\www\myapp)。
    • 为什么要选择这个目录呢?这个目录是比较常见的 Web 应用程序部署目录,方便我们后续的管理。同时,要确保路径无空格和特殊字符,因为有些服务器软件可能不支持路径中包含空格和特殊字符,可能会导致应用程序无法正常启动。
    • 可以使用 FTP 工具(如 FileZilla)来进行文件的上传,也可以直接在服务器上通过共享文件夹的方式进行复制。

三、配置Nginx反向代理

Nginx 的反向代理功能可以将用户的请求转发到我们的.NET Core 应用上,这样用户就可以通过访问 Nginx 的地址来访问我们的应用了。

3.1 修改nginx.conf

Nginx 的配置文件是nginx.conf,我们需要对它进行修改来配置反向代理。

步骤
  1. 找到C:\nginx\conf\nginx.conf文件,使用文本编辑器(如 Notepad++)打开它。

  2. http块内添加以下配置:

    server {
        listen        80;  # 监听80端口,这是HTTP的默认端口,用户通过浏览器访问时通常使用这个端口
        server_name   your_domain.com;  # 这里填写你的域名,如果没有域名,可以填写服务器的IP地址
        
        location / {
            proxy_pass         http://localhost:5000;  # 将请求转发到本地的5000端口,这是.NET Core应用默认监听的端口
            proxy_http_version 1.1;  # 使用HTTP 1.1协议进行转发
            proxy_set_header   Upgrade $http_upgrade;  # 支持WebSockets协议
            proxy_set_header   Connection keep-alive;  # 保持连接,提高性能
            proxy_set_header   Host $host;  # 将请求的Host头信息传递给后端服务器
            proxy_cache_bypass $http_upgrade;  # 对于WebSockets请求,不使用缓存
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;  # 传递客户端的真实IP地址
            proxy_set_header   X-Forwarded-Proto $scheme;  # 传递请求的协议(HTTP或HTTPS)
        }
    }
    
  3. 保存文件。


四、启动服务并验证

配置完成后,我们需要启动.NET Core 应用和 Nginx 服务,并验证是否可以正常访问。

4.1 运行.NET Core应用

在服务器上进入C:\www\myapp目录,执行以下命令:

dotnet YourApp.dll

这里的YourApp.dll是你的.NET Core 应用的主程序文件,需要根据实际情况进行替换。

4.2 启动Nginx

有两种方式可以启动 Nginx:

  • 双击 nginx.exe:在C:\nginx目录下找到nginx.exe文件,双击它即可启动 Nginx。

  • 命令行执行:打开命令行工具,输入以下命令:

    cd C:\nginx
    start nginx
    
检查进程是否运行

启动 Nginx 后,我们可以通过以下命令检查 Nginx 进程是否正在运行:

tasklist /fi "imagename eq nginx.exe"

如果看到nginx.exe的进程信息,说明 Nginx 已经成功启动。

4.3 验证访问

打开浏览器,输入服务器的 IP 地址或域名,如果看到应用程序的页面,说明部署成功。


五、设置后台服务(防止关闭窗口终止进程)

如果我们直接在命令行中运行.NET Core 应用,当关闭命令行窗口时,应用程序也会随之停止。为了让应用程序在后台持续运行,我们可以将它设置为 Windows 服务。

5.1 创建Windows服务

我们使用 NSSM 工具来创建 Windows 服务。

步骤
  1. 下载 NSSM 工具,下载地址为:https://nssm.cc/download。

  2. 解压 nssm 到 C:\nssm 目录。

  3. 打开命令行工具,执行以下命令:

    nssm install MyAppService
    

    这里的MyAppService是服务的名称,你可以根据实际情况进行修改。

  4. 在弹出的窗口中进行配置:

    • PathC:\Program Files\dotnet\dotnet.exe,这是.NET Core 运行时的可执行文件路径。
    • ArgumentsC:\www\myapp\YourApp.dll,这是你的.NET Core 应用的主程序文件路径,需要根据实际情况进行替换。
    • Startup directoryC:\www\myapp,这是应用程序的启动目录。

5.2 启动服务

配置完成后,在命令行中执行以下命令来启动服务:

nssm start MyAppService
检查服务状态

可以通过以下步骤检查服务的状态:

  1. 打开 “服务” 窗口:可以通过 “控制面板” -> “管理工具” -> “服务” 打开,也可以在命令行中输入services.msc打开。
  2. 在服务列表中找到MyAppService,查看它的状态是否为 “正在运行”。

六、高级配置

6.1 开启HTTPS(需SSL证书)

如果我们需要使用 HTTPS 协议来保护用户的数据传输,就需要开启 HTTPS。开启 HTTPS 需要 SSL 证书,你可以从证书颁发机构(如 Let’s Encrypt)申请免费的 SSL 证书。

步骤
  1. nginx.conf中修改监听端口为 443,并添加 SSL 证书的配置:

    server {
        listen 443 ssl;  # 监听443端口,这是HTTPS的默认端口
        server_name your_domain.com;  # 这里填写你的域名
        ssl_certificate      C:/ssl/your_domain.crt;  # SSL证书的公钥文件路径
        ssl_certificate_key  C:/ssl/your_domain.key;  # SSL证书的私钥文件路径
        # ...其余配置同上...
    }
    
    • 这里的C:/ssl/your_domain.crtC:/ssl/your_domain.key需要根据你实际的 SSL 证书文件路径进行修改。

6.2 负载均衡配置

当我们的应用程序需要处理大量请求时,单个服务器可能无法满足需求,这时我们可以使用负载均衡来将请求分发到多个服务器上。

步骤

nginx.conf中添加以下配置:

upstream dotnet_servers {
    server localhost:5000;  # 第一个.NET Core应用服务器的地址和端口
    server 192.168.1.100:5000;  # 第二个.NET Core应用服务器的地址和端口,可以根据实际情况添加更多服务器
}

server {
    location / {
        proxy_pass http://dotnet_servers;  # 将请求转发到负载均衡组
    }
}

七、高频问题排查指南

问题现象 解决方案
502 Bad Gateway 1. 检查.NET Core 应用是否运行:可以通过任务管理器或命令行工具查看dotnet YourApp.dll进程是否存在。
2. 确认 Nginx 的proxy_pass端口与 Kestrel 一致:Kestrel 是.NET Core 内置的 Web 服务器,默认监听 5000 端口,确保 Nginx 的proxy_pass配置中的端口与 Kestrel 监听的端口一致。
应用启动失败 1. 运行dotnet YourApp.dll查看报错:在命令行中执行dotnet YourApp.dll命令,查看是否有报错信息,根据报错信息进行排查。
2. 确保已安装对应版本的.NET Core 运行时:检查服务器上安装的.NET Core 运行时版本是否与项目所使用的版本一致。
Nginx 无法启动 1. 执行nginx -t检查配置语法:在命令行中执行nginx -t命令,检查nginx.conf文件的语法是否正确,如果有错误,根据提示进行修改。
2. 关闭占用 80 端口的程序(如 IIS):有些服务器可能已经安装了其他 Web 服务器(如 IIS),这些服务器可能会占用 80 端口,导致 Nginx 无法启动,需要关闭这些程序或修改它们的监听端口。
静态文件(如图片)无法加载 1. 在 Nginx 中添加静态文件路径配置:在nginx.conf中添加静态文件的路径配置,例如: nginx<br>location /static/ {<br> root C:/www/myapp/wwwroot;<br>}<br> 这里的/static/是静态文件的 URL 前缀,C:/www/myapp/wwwroot是静态文件的实际存储路径,需要根据实际情况进行修改。
2. 检查文件权限:确保服务器上的静态文件目录有足够的权限让 Nginx 访问。

八、配置资源

📥 点击下载 Nginx 配置模板
💬 如果遇到其他部署问题,欢迎评论区留言!
点赞⭐️ + 收藏📁 + 关注👉 获取更多.NET实战技巧!

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐