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`指令会将所有状态码映射到指定的自定义状态码,无论其是成功响应还是失败响应。因此,在进行状态码映射时,需要仔细考虑后端服务器可能返回的所有状态码,避免将成功响应也映射为失败响应。
