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開啓轉發機制: