数字化技能提升教程,数字化时代生存宝典

OpenResty实现反向代理与负载均衡

浏览:19

当后端服务运行在本机 8080 端口,或者需要由多台服务器共同提供服务时,可以使用 OpenResty 作为统一入口,负责请求转发和负载均衡。

1. 单服务反向代理

如果后端服务运行在本机 8080 端口,可以在 OpenResty 的 server 配置中加入以下内容:

location /api/ {
    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;
}

配置完成后,访问:

https://your-domain.com/api/

请求就会被转发到本机的 8080 服务。

这些请求头可以把原始域名、客户端IP和代理链信息传递给后端程序,方便日志记录和业务判断。

2. 多节点负载均衡

当后端服务部署在多台服务器上时,可以先在 http 配置块中定义后端服务器组:

upstream backend_app {
    server 10.0.0.11:8080;
    server 10.0.0.12:8080;
}

然后在站点配置中使用这个后端组:

location /api/ {
    proxy_pass http://backend_app/;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

默认情况下,OpenResty会按照轮询方式将请求分配到不同后端节点。

3. 配置失败重试

可以为每个后端节点设置失败次数和故障恢复时间:

upstream backend_app {
    server 10.0.0.11:8080 max_fails=3 fail_timeout=30s;
    server 10.0.0.12:8080 max_fails=3 fail_timeout=30s;
}

其中:

  • max_fails=3表示在指定时间内连续失败达到3次后,暂时认为节点不可用;
  • fail_timeout=30s表示节点进入失败状态后,30秒内暂时停止向其转发请求。

这项配置适合减少请求持续发送到故障节点的情况。

4. 设置代理超时

可以根据后端接口的响应速度配置超时时间:

proxy_connect_timeout 3s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;

参数含义如下:

  • proxy_connect_timeout:与后端建立连接的超时时间;
  • proxy_send_timeout:向后端发送请求的超时时间;
  • proxy_read_timeout:等待后端返回数据的超时时间。

接口响应时间较长时,可以适当增加 proxy_read_timeout,避免请求过早中断。

5. 检查配置并验证接口

修改配置后,建议先检查语法:

openresty -t

确认没有错误后,再重新加载配置:

openresty -s reload

接着使用 curl 测试接口:

curl -i http://127.0.0.1/api/health

如果需要观察请求是否正常转发,可以实时查看访问日志:

tail -f /usr/local/openresty/nginx/logs/access.log

如果后端服务有独立日志,也建议同时查看后端日志,确认请求是否已经到达对应节点。

6. 注意 proxy_pass末尾的斜杠

proxy_pass后面是否带 /,会影响请求路径的转发结果。

例如:

location /api/ {
    proxy_pass http://127.0.0.1:8080/;
}

访问 /api/health 时,后端通常收到的是:

/health

如果写成:

location /api/ {
    proxy_pass http://127.0.0.1:8080;
}

后端通常会收到:

/api/health

因此,上线前应使用真实接口路径进行测试,确认后端最终收到的URI符合程序要求,避免因为路径变化导致接口返回404或路由错误。

相关文章
猜你喜欢