前言
几乎所有 Node.js 项目最终都会经过 Nginx。
因为:
Nginx 不仅是 Web 服务器。
更是:
- 反向代理
- HTTPS 网关
- 负载均衡器
- 静态资源服务器
配置合理与否,会直接影响系统稳定性。
为什么不要直接暴露 Node 服务
错误方式:
用户
↓
3000端口
↓
Node.js
问题:
- 无 HTTPS
- 无缓存
- 无限流
- 不安全
推荐:
用户
↓
Nginx
↓
Node.js
所有请求先经过 Nginx。
基础反向代理
例如:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
访问:
https://example.com
实际上由 Node 服务处理。
推荐 Header 配置
很多教程都会忽略:
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
否则:
后端无法获取真实 IP。
日志会全部变成:
127.0.0.1
WebSocket 支持
如果:
Socket.IO
SSE
实时聊天
必须增加:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
否则 WebSocket 会连接失败。
HTTPS 最佳实践
推荐:
Let’s Encrypt。
免费。
自动续期。
不要购买昂贵 SSL。
个人网站完全没有必要。
HTTP 自动跳转 HTTPS
推荐:
return 301 https://$host$request_uri;
避免:
HTTP
HTTPS
同时存在。
否则影响 SEO。
gzip 压缩
建议开启:
gzip on;
可减少:
CSS
JS
JSON
传输大小。
提高加载速度。
缓存策略
静态资源:
推荐缓存:
30 天。
例如:
css
js
png
jpg
接口请求:
不要缓存。
否则可能返回旧数据。
上传文件优化
默认:
1MB
很多文件上传会失败。
建议:
client_max_body_size 50M;
根据业务调整。
超时配置
AI 项目经常需要:
30~120 秒。
建议:
proxy_read_timeout 300;
否则:
模型返回较慢时。
Nginx 会提前断开连接。
SSE 流式输出配置
AI 应用越来越多使用:
Streaming。
必须关闭:
proxy_buffering off;
否则:
用户会发现:
内容全部一次性返回。
而不是逐字输出。
这是很多 AI 项目最容易踩的坑。
Cloudflare + Nginx
推荐架构:
用户
↓
Cloudflare
↓
Nginx
↓
Node
↓
Redis
↓
MySQL
这样:
- HTTPS
- CDN
- WAF
全部都有。
稳定性明显提升。
安全建议
禁止暴露:
3000
3306
6379
公网只开放:
80
443
数据库不要暴露公网。
Redis 更不要暴露公网。
这是服务器安全最基本要求。
总结
很多开发者认为:
Node 才是核心。
实际上:
生产环境中,
Nginx 的重要性丝毫不亚于业务代码。
好的 Nginx 配置能够:
提高性能。
增强安全。
降低服务器压力。
对于长期维护的项目来说,这是必须掌握的基础能力。
X记录空间