Nginx反向代理与负载均衡,用一台入口管理后端集群
【摘要】 Nginx 几乎是现代后端的标配。聊聊它怎么当"反向代理"把请求转发给后端、怎么用 upstream 做负载均衡把流量摊到多台机器,以及动静分离这种常见的优化。
早年我部署一个服务,域名直接解析到那台机器,坏了一台全体宕机。后来上了 Nginx 做反向代理,才真正体会到"入口统一、后端可替换"的方便。这篇写最常用那部分。
一、正向 vs 反向
正向代理是帮"客户端"出去,反向代理是帮"服务端"接客。我们说的 Nginx 反向代理,是用户只认 Nginx 这一个地址,Nginx 在背后把请求转给真正的后端,用户根本不知道后面有几台机器。
二、反向代理最小配置
server {
listen 80;
server_name demo.example.com;
location /api/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
proxy_pass 就是转发的目标。location /api/ 把 /api/ 开头的请求交给本地 8080 端口的后端,前端和后端就共用一个域名、一套跨域规则。
三、负载均衡
后端不止一台时,用 upstream 把机器编成组,Nginx 按策略分发:
upstream backend {
server 10.0.0.11:8081 weight=2; # 性能好,多分点
server 10.0.0.12:8082;
server 10.0.0.13:8082 backup; # 前面都挂了才顶上
}
server {
location /api/ { proxy_pass http://backend; }
}
默认轮询;weight 调权重;backup 当兜底。max_fails 和 fail_timeout 还能自动把老出错的节点摘掉。

四、动静分离,最划算的优化
图片、JS、CSS 这些静态文件没必要让后端处理,Nginx 直接读磁盘返回,快且省后端资源:
location /static/ {
root /var/www/demo;
expires 7d; # 告诉浏览器缓存一周
}
五、总结一下
- 改完先
nginx -t测语法,再nginx -s reload,别直接 restart 打断连接。 - 502 多半是后端没起或
proxy_pass地址写错;404 看root/location匹配。 - 日志在
/var/log/nginx/access.log和error.log,出问题先翻它。
其实Nginx 能讲的远不止这些(HTTPS、gzip、限流都可以弄),但代理 + 负载 + 动静分离这个东西,只要配置好的话,已经能撑起大部分中小项目了。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)