nginx是怎么把URL转发到具体服务器的路径下,upstream是怎么配置健康检查,怎么保持session持久化
- Nginx 是如何把 URL 转发到具体服务器的路径下
在 Nginx 中,可以使用 location 块对请求的 URI 进行匹配,并将匹配到的请求转发到后端服务器中。
例如,如果想将请求转发到后端服务器的 /api 路径下,可以这样配置 location 块:
location /api/ {
proxy_pass http://backend-server/;
}
如果后端服务器本身是一个反向代理服务器且在它那里已经有了代理规则,也可以将请求直接转发到后端服务器进行处理:
location /api/ {
proxy_pass http://backend-server/api/;
}
- 在 upstream 中配置健康检查
为了保证后端服务器裸机的健康状况,需要在 upstream 中配置健康检查。Nginx upstream 模块中提供了检查后端服务器可用性的相关指令,其中 check 指令用于定义检查方式,health_check 指令表示启用健康检查。
例如,下面是一个 upstream 配置示例,其中配置了一个名为 backend 的代理群组,并启用了健康检查:
upstream backend {
server backend1.example.com:8080;
server backend2.example.com:8080;
check interval=3000 rise=2 fall=5 timeout=1000;
health_check;
}
上述配置指定了两个后端服务器,检查间隔时间为 3 秒,要求一台健康的服务器能成功响应 2 次,如果连续失败 5 次就将服务器标记为不可用,并将请求转发到其余健康的服务器。健康检查超时时间为 1 秒。
- Session 持久化
为了保证用户请求在两个不同的服务器上处理时仍然能够保持其状态,需要在反向代理服务器上开启 Session 持久化。Session 通常是由服务器端存储的,因此可以通过如下几种方式实现 Session 持久化:
- 在 Nginx 上配置 sticky module,使其可以将请求导向同一台后端服务器。例如:
upstream backend {
sticky name=route upstream;
server backend1.example.com:8080;
server backend2.example.com:8080;
}
上述配置中,sticky 指令定义了一个路由名称 route,指定负载均衡时使用这个名称来粘合用户会话。这样,所有请求发向同一个基于会话的服务器。
-
在使用反向代理的后端服务器上,将应用程序的会话信息存储在共享存储中(如分布式缓存、数据库等),使其可以在多个服务器之间共享。
-
使用基于 Cookie 或 URL 的 Session 跟踪方案,如将 Session ID 作为 Cookie 或 URL 的参数进行传递,并在后端服务器上设置Cookie,记录 Session ID。在多次请求中通过Cookie或URL中的Session ID,找到相应的Session信息。

浙公网安备 33010602011771号