如何修改launchsettings.json及前端代码部署本地运行的ASP.NET Core API
ASP.NET Core 后端 + NGINX 部署联调配置方案
首先纠正一个误区:launchSettings.json 仅在本地开发运行时生效,生产环境部署不需要修改这个文件的配置。
1. 后端服务配置
- 发布ARM架构Linux版本的生产包,发布时环境选择
Production,不要用开发环境配置。 - 后端服务启动时,直接让Kestrel监听本地回环地址的闲置端口即可,不需要绑定公网IP、域名,也不需要在后端层配置HTTPS证书,HTTPS卸载统一交给NGINX处理。
- 如果你用systemd管理后端服务,直接在service配置文件里通过环境变量指定监听地址即可,示例配置:
[Service] WorkingDirectory=/var/www/stratego-api ExecStart=/usr/bin/dotnet /var/www/stratego-api/Stratego.Api.dll Restart=always # 监听本地127.0.0.1的5000端口,不对外暴露 Environment=ASPNETCORE_URLS=http://127.0.0.1:5000 Environment=ASPNETCORE_ENVIRONMENT=Production
- 在后端项目的请求管道最前端(Program.cs/Startup.cs里,所有其他中间件注册之前)添加转发头中间件,避免反向代理场景下后端获取请求协议、客户端IP出错:
app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto });
2. NGINX反向代理配置
你已经用NGINX部署了前端,直接给API加同域反向代理规则即可,不需要单独给后端分配域名、开放公网端口,也不会产生跨域问题:
- 在现有前端站点的NGINX server配置块中,添加
/api路径的转发规则:
location /api { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 如果项目用了WebSocket(比如SignalR),额外加下面两行配置 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
- 执行
nginx -t验证配置无错后,执行nginx -s reload重载配置生效。
3. 前端代码修改
不要在前端代码里写死完整的带域名、端口的请求地址,直接用相对路径即可,不管后续域名、端口怎么调整都不需要改前端代码。你示例中的请求代码修改为:
get('/api/Game/' + localStorage.getItem("gameId") + '/board', headers) .then(response => { response.text().then(async function (message) { let parsed = JSON.parse(message); if (!containsBoard()) { createBoard(parsed.squares, parsed.size); } }); });
避坑提示
- 不要把后端直接绑定到
0.0.0.0:5000然后让前端直接请求域名:5000,这种方案需要单独开放防火墙端口,HTTPS配置繁琐,还容易触发跨域问题,稳定性和维护性远不如反向代理方案。 - 同域反向代理场景下不需要额外配置CORS策略,生产环境记得移除开发阶段加的允许所有源的CORS配置,避免安全风险。
内容的提问来源于stack exchange,提问作者ItsBob
相关产品推荐
相关产品推荐

