在 Linux 上托管 ASP.NET Core — 为什么以及何时使用?
ASP.NET Core 在 Linux 系统上使用 *Kestrel* 运行良好,选择此平台进行托管可以带来诸多重要优势,包括: 降低成本、与开源工具兼容以及易于容器化 此选项适用于网站、API、后台服务以及对延迟敏感的应用程序,例如游戏和交易。.
前提条件和服务器选择
Linux 发行版和 .NET 版本
建议的分布方式包括: Ubuntu LTS (20.04/22.04), Debian(11/12), 和 CentOS Stream 或 Rocky/Alma 它们用于生产环境,适用于安全要求严格的环境。 RHEL 请使用官方的 Microsoft 运行时和 SDK(例如 .NET 6/7/8)。.
硬件资源和服务类型
对于网站和轻量级 API 而言,通常 1-2 个虚拟 CPU、1-4GB 内存和 NVMe 固态硬盘 够了。商业和大型应用程序 4 个以上虚拟 CPU 和 8 GB 以上内存 他们需要高速网络。.
适合低延迟的交易和游戏 最好选择靠近交易所或区域数据中心的本地化VPS。我们公司在全球拥有85多个数据中心,方便您选择最近的数据中心。.
使用图形服务器(GPU)进行人工智能/推理或渲染;我公司提供GPU云服务和高速网络计算服务器。.
为了防范攻击,可以考虑使用反 DDoS 服务器以及具有 BGP 和 CDN 的网络。.
基本安装和设置(.NET 运行时)——Ubuntu 示例
要安装官方 Microsoft 运行时,请添加存储库,然后安装运行时:
sudo apt update
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install -y dotnet-runtime-7.0然后创建安全服务用户和应用程序目录:
sudo useradd -r -s /usr/sbin/nologin aspnetuser
sudo mkdir -p /var/www/myapp
sudo chown aspnetuser:aspnetuser /var/www/myapp
无容器部署 — Kestrel + systemd + Nginx
发布应用程序并配置 systemd
构建应用程序并将其发布到应用程序目录路径:
dotnet publish -c Release -o /var/www/myappsystemd 的示例单元文件 /etc/systemd/system/myapp.service 地方:
[Unit]
Description=My ASP.NET Core App
After=network.target
[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/MyApp.dll
Restart=always
# Safe User/Group
User=aspnetuser
Group=aspnetuser
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target激活并运行服务:
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo journalctl -u myapp -f
配置 Nginx 作为反向代理(SSL 终止)
安装 Nginx 和 Certbot:
sudo apt install -y nginx certbot python3-certbot-nginxNginx 配置示例 /etc/nginx/sites-available/myapp 地方:
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1: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;
}
}获取免费 SSL 证书:
sudo certbot --nginx -d example.com -d www.example.com
使用 Docker 和 Docker Compose 进行部署
用于生成小型优化镜像的多步骤 Dockerfile 示例:
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApp.dll"]示例 docker-compose.yml 文件(您也可以使用 nginx-proxy 或 Traefik):
version: '3.8'
services:
web:
build: .
ports:
- "5000"
environment:
- ASPNETCORE_ENVIRONMENT=Production
nginx:
image: nginx:stable
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./certs:/etc/letsencrypt对于持续集成/持续交付 (CI/CD),可以使用 GitLab CI 或 GitHub Actions 来构建、测试镜像并将其部署到镜像仓库,然后再拉取到服务器。我们公司为私有团队提供 GitLab 托管服务。.
安全和最佳实践
网络和防火墙
仅开放必要的端口(80/443),并将 SSH 访问限制在所需的地址。.
sudo ufw allow 80,443/tcp
sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp # مثال
sudo ufw enable
TLS和加固
攻击与防御
使用 fail2ban 保护 SSH 连接并在 Nginx 中设置速率限制。对于敏感应用,请使用防 DDoS 服务器;我们公司提供基于 BGP 的防 DDoS 和 CDN 套餐。.
SELinux / AppArmor
在启用了 SELinux 的发行版(例如 RHEL/CentOS)上,请确保文件和端口的上下文设置正确。在其他发行版上,请使用 AppArmor 进行性能分析——不建议永久关机。.
性能优化和监控
Kestrel 调谐和连接设置
在反向代理层使用 HTTP/2 和 Keep-Alive 协议。同时考虑 Kestrel 的局限性。 appsettings.json 设置(例如 Limits.MaxConcurrentConnections、MaxRequestBodySize)。.
使用响应压缩(Brotli/Gzip)来压缩响应:
services.AddResponseCompression(options => { options.EnableForHttps = true; });
缓存和会议
使用 Redis 进行分布式缓存和会话状态管理,以实现横向扩展。使用 CDN 分发静态内容,以降低服务器负载。.
监控和日志记录
将结构化日志记录与 Serilog 或 Microsoft.Extensions.Logging 结合使用,并发送到 ELK/Graylog。对于指标,可以使用 dotnet-counters、Prometheus exporter (dotnet_exporter) 和 Grafana。Application Insights 等 APM 工具可用于跟踪。.
根据申请情况比较不同地点并选择合适的地点。
对于交易而言,低延迟和稳定性至关重要——选择靠近交易所或私有网络的服务器位置。对于游戏而言,建议使用区域服务器和配备高速网络的VPS游戏服务器。.
对于人工智能和渲染,建议使用配备 NVMe 和高带宽的 GPU 云和计算服务器。对于网站和应用程序,建议将服务器部署在靠近主要用户的位置,并结合 CDN 和多区域部署以提高可用性。我们公司在全球拥有 85 多个数据中心以及 CDN 和 BGP 网络。.
高可扩展性和可用性
使用七层负载均衡器(Nginx/HAProxy/云负载均衡器)或数据中心负载均衡器。将会话存储在 Redis 或共享数据库中。水平部署容器和虚拟机以实现自动扩展;在 Kubernetes 中使用 HPA。使用 BGP 任播和 CDN 进行全球流量分发。.
常见错误修复
常见病例及检查方法:
- 502 Bad Gateway:请检查 systemd
journalctl -u myapp本地端口ss -tlnp以及文件权限。. - SSL 问题:检查
certbot 续订访问证书文件夹并在 Nginx 中正确引用它。. - 文件/权限错误:请检查服务用户的所有者/组是否正确。.
- 意外的运行缓慢:使用 dotnet-counters 和 profiler 查找 CPU 或 GC 瓶颈。.
生产(DevOps)实用技巧
- 使用多阶段 Docker 构建来缩小镜像尺寸。.
- 将密钥存储在密钥管理器(Vault、GitLab CI 密钥)中。.
- 编写健康端点并配置编排器的存活/就绪状态。.
- 使用 GitLab CI 或 GitHub Actions 执行构建/测试/部署自动化。.
摘要和服务内容
在 Linux 上托管 ASP.NET Core 是 Web 和 API 应用**可扩展、安全且易于扩展**的选择。为了获得高性能和高可用性,建议使用 Kestrel + Nginx 部署应用,或将其部署在带有编排器的容器中;重视 TLS 加密和安全加固;使用 Redis/数据库存储状态;并使用 CDN 分发静态内容。.
我们公司在全球拥有超过 85 个地点,提供 GPU 云、计算和专用服务器、交易和游戏 VPS、反 DDoS 基础设施、GitLab 托管、CDN 和 BGP 网络,并为 ASP.NET Core 应用程序提供不同套餐的托管和支持解决方案。.









