.NET Core与Vue前后端分离项目8种部署方案详解
1. 项目概述前后端分离架构已经成为现代Web开发的主流模式它通过解耦前端展示层与后端业务逻辑层显著提升了开发效率和系统可维护性。这种架构模式下前端专注于用户界面和交互体验后端则专注于数据处理和业务逻辑两者通过API进行通信。在实际项目部署时前后端分离架构会面临一些特有的挑战。首先前后端项目需要独立部署这意味着需要考虑跨域资源共享CORS问题。其次前端路由与后端API的协调需要特别处理否则容易出现页面刷新404等问题。此外不同环境开发、测试、生产的配置管理也需要格外注意。本文将基于.NET Core和Vue技术栈详细介绍8种不同的部署方案涵盖Windows和Linux两大操作系统平台。每种方案都会提供详细的步骤说明、配置示例以及可能遇到的问题和解决方案。无论你是刚接触前后端分离的新手还是有一定经验的开发者都能从中找到适合自己项目的部署方式。2. Windows平台部署方案2.1 IIS部署前后端不同站点这是最传统的部署方式适合已有IIS环境的企业场景。具体步骤如下后端(.NET Core)部署发布项目在Visual Studio中使用dotnet publish命令发布项目配置CORS确保后端API已配置允许前端域名的跨域请求services.AddCors(options { options.AddPolicy(AllowSpecificOrigin, builder builder.WithOrigins(http://frontend-domain.com) .AllowAnyMethod() .AllowAnyHeader()); });IIS配置创建新网站应用程序池设置为无托管代码前端(Vue)部署构建项目执行npm run build生成dist目录IIS配置创建新网站指向dist目录注意事项确保服务器已安装对应版本的.NET Core运行时和Windows Hosting Bundle。如果遇到500.19错误通常是因为缺少Hosting Bundle。2.2 IIS部署前后端同一站点这种方案适合希望使用同一域名的场景避免了跨域问题后端部署与之前相同前端调整修改Vue路由的base路径修改API请求的基础URL构建后将dist内容放在后端站点的子目录中IIS配置在后端站点下添加虚拟目录指向前端dist优势是不需要处理跨域缺点是前端路由和API路径需要特别配置且部署后修改路径比较麻烦。2.3 NginxKestrel部署这种方案摆脱了对IIS的依赖更加轻量安装Nginx和Git后端配置upstream backend { server 127.0.0.1:5000; } server { listen 80; location / { proxy_pass http://backend; } }前端配置server { listen 8080; root /path/to/dist; location /api { proxy_pass http://backend; } }使用PM2或直接运行dotnet命令启动后端服务这种方案的优点是资源占用少部署灵活适合持续集成场景。Nginx作为反向代理还能提供负载均衡和静态文件缓存等功能。3. Linux平台部署方案3.1 UbuntuNginx部署环境准备# 安装.NET Core SDK wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt-get update sudo apt-get install -y apt-transport-https sudo apt-get update sudo apt-get install -y dotnet-sdk-3.1 # 安装Nginx sudo apt-get install -y nginx项目部署# 发布项目 dotnet publish -c Release -o ./publish # 运行项目 dotnet /path/to/publish/YourProject.dllNginx配置server { listen 80; server_name yourdomain.com; 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; } }3.2 CentOSDocker部署Docker提供了环境一致性简化了部署流程编写DockerfileFROM mcr.microsoft.com/dotnet/aspnet:3.1 WORKDIR /app COPY ./publish . ENTRYPOINT [dotnet, YourProject.dll]构建和运行docker build -t your-project . docker run -d -p 8080:80 --name your-app your-project结合Nginxupstream docker-backend { server your-app:80; } server { listen 80; location / { proxy_pass http://docker-backend; } }4. 常见错误分析与解决4.1 跨域问题(CORS)表现前端请求API时浏览器报CORS错误解决方案后端正确配置CORS策略Nginx中配置location /api { add_header Access-Control-Allow-Origin $http_origin; add_header Access-Control-Allow-Methods GET, POST, OPTIONS; add_header Access-Control-Allow-Headers DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range; add_header Access-Control-Expose-Headers Content-Length,Content-Range; }4.2 页面刷新404表现Vue路由在直接访问或刷新时返回404解决方案Nginx配置location / { try_files $uri $uri/ /index.html; }IIS需要安装URL重写模块配置重写规则4.3 502 Bad Gateway可能原因后端服务未运行Nginx配置错误端口冲突排查步骤检查后端服务是否运行ps aux | grep dotnet检查端口监听netstat -tulnp查看Nginx错误日志/var/log/nginx/error.log5. 高级部署方案5.1 Docker Compose编排对于复杂项目可以使用Docker Compose管理多个服务version: 3 services: backend: build: ./backend ports: - 5000:80 environment: - ASPNETCORE_ENVIRONMENTProduction frontend: build: ./frontend ports: - 8080:80 depends_on: - backend5.2 CI/CD自动化部署结合GitHub Actions或Azure DevOps实现自动化部署# GitHub Actions示例 name: Deploy to Production on: push: branches: [ main ] jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkoutv2 - name: Setup .NET Core uses: actions/setup-dotnetv1 with: dotnet-version: 3.1.x - name: Build with dotnet run: dotnet publish -c Release -o ./publish - name: Deploy to Server uses: appleboy/ssh-actionmaster with: host: ${{ secrets.PRODUCTION_SERVER }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /var/www/your-project git pull docker-compose down docker-compose up -d --build6. 性能优化建议前端静态资源优化启用Gzip压缩配置长期缓存Cache-Control使用CDN分发静态资源后端API优化实现响应缓存启用HTTP/2数据库查询优化Nginx调优# 启用Gzip gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xmlrss text/javascript; # 静态资源缓存 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; add_header Cache-Control public, no-transform; }7. 安全最佳实践HTTPS配置server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; # 其他配置... }API保护实施JWT认证速率限制输入验证Docker安全使用非root用户运行容器定期更新基础镜像限制容器资源使用8. 监控与日志应用日志.NET Core的Serilog配置结构化日志日志聚合ELK或Seq性能监控Application InsightsPrometheus Grafana健康检查app.UseHealthChecks(/health, new HealthCheckOptions { ResponseWriter async (context, report) { var result JsonConvert.SerializeObject(new { status report.Status.ToString(), checks report.Entries.Select(e new { name e.Key, status e.Value.Status.ToString(), description e.Value.Description }) }); context.Response.ContentType MediaTypeNames.Application.Json; await context.Response.WriteAsync(result); } });前后端分离项目的部署虽然比传统单体应用复杂但带来的开发效率和系统可维护性提升是显著的。选择适合自己团队和项目规模的部署方案建立完善的部署流程和监控机制可以确保应用的稳定运行。随着云原生技术的发展容器化和Serverless等新兴部署方式也值得关注和尝试。

相关新闻

YOLOv11在隧道裂缝智能检测中的优化与应用

YOLOv11在隧道裂缝智能检测中的优化与应用

1. 项目背景与核心挑战隧道作为现代交通基础设施的重要组成部分,其结构健康状况直接关系到公共安全。传统的人工巡检方式存在效率低、风险高、主观性强等问题,特别是在低光照环境和复杂几何形状的裂缝检测场景中表现尤为不足。我们开发的这套基于YOLOv11…

2026/10/13 17:13:37 阅读更多 →
langgraph的四种state解析

langgraph的四种state解析

下面我们来深入拆解这段 LangGraph 代码中出现的 四种 State(状态)形式,并结合执行流程说明它们各自的作用、约束与数据流转方式。 1. 四种 State 的定义与角色 ① InputState(输入状态) python class InputState(Type…

2026/10/13 17:13:44 阅读更多 →
Claude Code Desktop安装与配置全指南

Claude Code Desktop安装与配置全指南

1. Claude Code Desktop概述与核心价值 Claude Code Desktop是Anthropic公司推出的智能编程辅助工具,专为开发者设计的多功能集成环境。不同于普通的代码编辑器,它深度融合了AI编程助手Claude的核心能力,通过图形化界面提供智能代码补全、实时…

2026/10/11 0:44:53 阅读更多 →

最新新闻

从巨型Prompt到Skill仓库:Agent能力拆解与工程实践

从巨型Prompt到Skill仓库:Agent能力拆解与工程实践

1. 从单一 Prompt 到 Skill 仓库:Agent 为什么必须拆能力 我发现很多团队做 Agent 的第一版,都是把需求一股脑塞进系统 Prompt:角色设定、工具列表、流程步骤、输出格式、行业背景、禁忌事项……开头还收敛得住,等需求迭代几轮&am…

2026/10/13 17:13:14 阅读更多 →
Android跑步App实战:高德地图SDK集成与轨迹绘制

Android跑步App实战:高德地图SDK集成与轨迹绘制

简介:这是一份基于 Android Studio 与 Java 开发的运动跑步类 App 完整源码,面向具备一定安卓基础、希望学习定位与运动数据可视化的开发者,可用于课程设计、毕业设计或二次开发。项目围绕跑步场景实现实时速度记录、跑步路径绘制、历史数据管…

2026/10/13 17:13:14 阅读更多 →
智能体技能工程化:可复用、可编排、可验证的Agent Skills设计实践

智能体技能工程化:可复用、可编排、可验证的Agent Skills设计实践

1. 项目概述:从“agent-skills”这个词组看懂当前智能体开发的真实水位“agent-skills”不是某个具体工具、框架或开源库的官方名称,而是一个高度凝练的行业术语组合——它直指当前AI工程落地中最关键、也最容易被忽视的一环:智能体&#xff…

2026/10/13 17:13:14 阅读更多 →
Android Studio校园图书管理系统课设:SQLite本地数据库实现与答辩避坑指南

Android Studio校园图书管理系统课设:SQLite本地数据库实现与答辩避坑指南

简介:这是一份面向高校学生与Android初学者的校园图书管理系统课程设计完整源码,基于Android Studio开发,可作为移动应用开发课程的满分课设参考。项目围绕用户管理、图书查询、虚拟货币充值、评论评分等核心业务展开,覆盖Activit…

2026/10/13 17:13:14 阅读更多 →
从零重构微信投票系统:数据模型、防刷体系与高并发架构实战

从零重构微信投票系统:数据模型、防刷体系与高并发架构实战

做投票系统这事,听起来好像很简单:一个页面,几个选项,点一下提交,完事。可真要把一套投票系统做到既能扛住公众号几万人同时参与、又能灵活切换多种投票玩法、还得在活动期间顶住各种恶意刷票冲击的时候,你…

2026/10/13 17:13:14 阅读更多 →
SQL WHERE语句核心语法与性能优化实战指南

SQL WHERE语句核心语法与性能优化实战指南

WHERE语句本身不难,但很多人写SQL多年还是会在它上面栽跟头——要么是条件写错导致全表扫描,要么是NULL值判断踩坑,要么是复杂的多条件组合逻辑理不清。这篇东西我把实际项目里积累的经验捋一遍,从基础语法到进阶坑点都覆盖到&…

2026/10/13 17:12:13 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →