nginx分发请求超时切换服务

发布于:2025-02-10 ⋅ 阅读:(96) ⋅ 点赞:(0)

nginx的upstream模块实现超时自动切换服务

upstream testfail {

    server 192.168.1.218 max_fails=1 fail_timeout=10s;

    server 192.168.1.129 max_fails=1 fail_timeout=10s;

}

max_fails代表失败尝试次数,达到设置的次数则视为该服务不可用,

fail_timeout代表服务标为不可用后需等待fail_timeout的值对应时间后才会重新尝试连接该服务。

想要设置服务超时切换服务的关键在于proxy_read_timeout的配置,不仅仅分发服务的配置,而且还要看upstream下的服务(218和129)中配置的proxy_read_timeout,这里读取的超时是php-fpm的响应超时时间。

只有当分发服务的proxy_read_timeout < upstream下的服务的proxy_read_timeout,且upstream下的服务的proxy_read_timeout小于php执行的超时时间才能实现超时切换服务。

不然即便upstream的服务超时了返回结果是超时,但对于分发服务就是有响应,错误响应也是响应而不会视为超时。

分发服务:

server {

    listen       8080;
    server_name  localhost;

    error_log logs/error_8080.log;

    location / {
        proxy_pass http://testfail;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 non_idempotent;
        proxy_connect_timeout 5s;
        proxy_read_timeout 30s;
        proxy_send_timeout 10s;
    }

}

192.168.1.129服务:

location ~\.php(.*)$ {

        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_connect_timeout 10;
        fastcgi_read_timeout 10;
        fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFo $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        include fastcgi_params;
}

proxy_next_upstream后的参数代表哪些情况下会触发转发请求到下一个上游服务。

error 参数用于指定在与上游服务器建立连接、发送请求或读取响应头时发生网络错误的情况,例如网络不可达,网络故障等情况。

timeout适用于超时,基本依据的是proxy_connect_timeout, proxy_read_timeout,proxy_send_timeout这几个超时设置,而一般情况下连接超时和发送超时的情况很少触发,基本主要看proxy_read_timeout,可以视为上游服务的响应时间,超时即触发转发。

invalid_header应该是对应的是设置了无效的header

http_500 http_502 http_503 http_504则是对应http响应码,请求响应500、502、503、504时触发转发。

non_idempotent代表的是会转发非幂等请求(post、put、delete等),不添加时默认只处理转发幂等请求如get请求。


网站公告

今日签到

点亮在社区的每一天
去签到