nginx做负载均衡服务器配置

upstream backend {

server 192.168.1.1:80 max_fails=3 fail_timeout=60s;

server 192.168.1.2:80 max_fails=3 fail_timeout=60s;

server 192.168.1.3:80 max_fails=3 fail_timeout=60s;

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

}

server {

listen 80;

server_name example.com;


location / {

proxy_pass http://backend;

}

}

在以上指令中,`error`用于处理与后端服务器间因出现错误而导致的通信失败的情况。`timeout`用于处理与后端服务器间因超时而导致的通信失败的情况。`invalid_header`用于处理后端服务器返回的无效头部信息的情况。其中invalid_header可以不选


而`http_500`,`http_502`,`http_503`,`http_504`则是针对后端服务器返回的HTTP状态码分别表示:服务器内部错误(500)、网关错误(502)、服务不可用(503)和网关超时(504)等情况。


当配置了`proxy_next_upstream`指令时,如果Nginx与后端服务器的通信出现了以上指令所描述的情况,Nginx会自动重试与下一个后端服务器的通信,避免单个后端服务器发生故障导致整个服务不可用的情况。


1. 在http和server级别中启用`proxy_intercept_errors`指令:


```

http {

proxy_intercept_errors on;

...

}


server {

...

}

```


2. 在location中定义`error_page`指令,将后端服务器返回的状态码映射为自定义状态码:


```

location / {

proxy_pass http://backend;

error_page 404 =200 /fallback.html;

error_page 500 =503 /error.html;

}

```


在上面的示例中,将后端服务器返回的404状态码映射为200状态码,并将500状态码映射为503状态码。这样,当后端服务器返回404或500状态码时,nginx会将其拦截并转发到相应的自定义状态码。


需要注意的是,使用`proxy_intercept_errors`和`error_page`指令会将所有状态码映射到指定的自定义状态码,无论其是成功响应还是失败响应。因此,在进行状态码映射时,需要仔细考虑后端服务器可能返回的所有状态码,避免将成功响应也映射为失败响应。