今天在后台管理系统,执行一个读取文件然后进行处理的功能时,由于没有做成异步处理,导致出现time out。而改功能执行了两次,数据库中出现了double倍的记录。
由于时两台server,通过nginx来进行负载均衡。所以,查看服务器日志,发现每一次请求执行两次,是因为对每一个服务器都发送了一次请求。
后来换了测试服务器,没用nginx,执行成功。又用server1的ip+端口直接进行访问,也执行成功。
所以,初步判断是nginx将超时的请求发送给了另一台server
参照 http://www.linuxyan.com/web-server/67.html
nginx有一个功能,就是当后端的服务器返回给nginx502、504、404、执行超时等错误状态的时候,
nginx会自动再把这个请求转发到upstream里面别的服务器上面,从而给网站用户提供更稳定的服务。
配置如下:
location /
{
#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
proxy_pass http://php_server_pool;
proxy_set_header Host www.yourdomain.com;
proxy_set_header X-Forwarded-For $remote_addr;
}
这样的话,也算是保障了后端服务器的一个高可用性,不得不说,nginx还是很强大的。
时间: 2024-10-12 04:45:38