Nginx反向代理配置教程:一个域名代理多个后端服务

proxy_pass、请求头透传与负载均衡实战
发布于
2

你有一台服务器,上面跑了三个Web应用——WordPress在8080端口,Node.js在3000端口,一个静态页面在8081端口。怎么样让用户只访问一个域名就能访问到后面的应用?答案就是Nginx反向代理。本文讲清楚反向代理的配置和实际用途。

一、反向代理解决了什么问题?

  • 隐藏后端服务:用户只和Nginx通信,不知道后面有几个应用、跑在哪台机器上;
  • 统一入口:一个域名+一个443端口,就能通过不同路径分发到不同后端应用;
  • 负载均衡:把请求分发到多台后端服务器,分担压力。

二、基础配置示例

server {
    listen 80;
    server_name example.com;
    
    # WordPress站点
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    
    # API转发到Node.js
    location /api/ {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
    }
}

三、关键配置项

  • proxy_pass:指定转发的目标地址;
  • proxy_set_header:把原始请求的信息(Host、真实IP)传给后端,否则后端拿到的都是Nginx的IP;
  • proxy_buffering:开启缓存后端响应,提升效率;
  • proxy_read_timeout:后端响应超时时间,文件上传等长请求要调大。

四、负载均衡

upstream backend {
    server 127.0.0.1:8080 weight=3;  # 权重3
    server 192.168.1.10:8080 weight=1;  # 权重1
}
server {
    location / {
        proxy_pass http://backend;
    }
}

总结

Nginx反向代理是Web架构中的”前台接待”——统一接收请求、按规则分发到各个后端服务。一个server块几行配置,就能解决多应用端口管理的麻烦。更多运维工具看极跃IP资源导航

常见问题(FAQ)

反向代理和正向代理有什么区别?
反向代理是服务端代理——Nginx接收用户请求后转发给后端服务器,用户不知道后端的存在。正向代理是客户端代理——用户的请求先发给代理服务器,代理再转发到目标站。
Nginx反向代理必须配置哪些请求头?
必须设置:proxy_set_header Host和X-Real-IP。不设的话后端看到的所有请求都来自Nginx的IP,日志和业务逻辑都会出错。
Nginx怎么做负载均衡?
用upstream块定义后端服务器组,可以设置权重(weight)、最大失败次数(max_fails)、超时时间等参数,然后在proxy_pass里引用upstream名称即可。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600