首页 > 网站 > Nginx > 正文

Nginx服务器做负载均衡反向代理的超级攻略

2024-08-30 12:26:33
字体:
来源:转载
供稿:网友

nginx 做反向代理时,后端主机有多台,可以使用 upstream 定义一个后端主机池,在反向代理时直接使用主机池的名字。在 upstream 中可以定义负载均衡调度算法,权重,健康状态检测等参数。

例如:

upstream backend {  server 172.16.0.1:80 weight=1 max-fails=3 fail_timeout=10;  server 172.16.0.2:80 weight=1max-fails=3 fail_timeout=10;;}

默认请求下,使用 round-robin 调度算法,并有健康状态检查和恢复主机的能力。

ningx 还可以使用这些算法:

    ip_hash:基于源地址哈希,主要目的是会话保持     least_conn:基于最少活动连接进行调度     sticky:基于 cookie 进行会话绑定,nginx 会在客户端第一次访问时插入路由信息到 cookie 中,或者选择 cookie 中的某个字段的值作为键,以后每次请求将基于此信息进行调度

基于 cookie 的会话绑定共有 cookie,route 和 learn 三种。

例如,基于 cookie name 的调度:

upstream backend {  server backend1.example.com;  server backend2.example.com;  sticky cookie srv_id expires=1h domain=.example.com path=/;}

使用此主机组进行反向代理:

location / {  proxy_pass http://backend;  proxy_set_header Host $host;  proxy_set_haeder X-Forwared-For $proxy_add_x_forwarded_for;}

proxy_pass URL 指定代理的后端主机,可以指定 "http" 或 "https" 协议,域名可以是 ip 地址,也可以是 upstream 池名字

    如果代理指定的是一个 URI 地址,如 http://127.0.0.1/remote,那么将直接被代理至指定 URI,无论请求的 URI 是什么     如果代理指定的一个主机而没有 URI,如 http://127.0.0.1,客户端请求的URI将被传递至指定域名     如果 location 中使用模式匹配 url,那么 url 也会被传递至代理 URL 的末端     如果 location 中使用了 URI 重写,那么 proxy_pass 会使用重写后的结果进行处理

proxy_set_header HEADER VALUE 对转发的报文首部进行修改一些

反向代理时的缓存相关设定

proxy_cache_path PATH [levels=levels] keys_zone=NAME:SIZE

定义磁盘缓存路径,nignx 的缓存是以键值方式存放的,keys_zone 用于指定键存放的内存空间名字和大小,对应的值则存放在 PATH 指定的路径中。levels 可以指定缓存存放路径的级数和名称字符数。此设置只能在 http 段中定义。

如:

proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=one:10m;

proxy_cache_valid [code ...] time 指定不同响应码的内容的缓存时间

如:

proxy_cache_valid 200 302 10m;proxy_cache_valid 404   1m;proxy_cache_valid any   1m;

proxy_cache_method METHOD 定义哪些方法的请求结果可以被缓存,如:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表