nginx超時轉發機制

nginx超時轉發機制

配置

在配置nginx的時候,我們經常會配置upstream來配置後端轉發的一些規則,最常見的就是nginx後面掛了幾臺tomcat的機器,upstream寫法如下示例:

upstream linuxidc {
      server 192.168.31.114:8080;
      server 192.168.31.223:8080;
}

下面是對應的server的配置

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass http://linuxidc;
        proxy_connect_timeout 2s;
        proxy_read_timeout 2s;
        proxy_send_timeout 2s;
    }
}

在nginx中,當一個請求到達後端機器,後端機器因某些原因(load高等等)響應變慢導致超時的時候,nginx會把這個請求轉發到另外的後端機器上,這個配置是:

proxy_next_upstream  on;

在nginx中是默認打開的。以下來做個試驗:
後端192.168.31.114 192.168.31.223兩臺機器都是node的一個server,代碼如下:

192.168.31.114:server.js
var http = require("http"); 
http.createServer(function(request, response) { 
    for(var i = 0; i < 1000000; i++) {
        console.log(i);
    }
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.write("Hello World"); 
    response.end(); 
}).listen(8080);

192.168.31.223:server.js
var http = require("http"); 
http.createServer(function(request, response) { 
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.write("Hello World");
    response.end(); 
}).listen(8080);

可以看到兩者的區別在於114的機器在每次請求的時候會走一個循環,循環會導致讀取超時;223的機器則是立刻返回響應。

驗證

(1)112 223開啓,nginx開啓轉發機制:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章