今日工作排查一个问题,门户页面打开很慢,排查发现 nginx 有如下日志:
access 日志:
time=16/Jun/2020:16:28:06 +0800||rmip=*.*.*.*||upaddr=1.1.1.1:33200||upstatus=504||reqtime=60001.196||uprep_time=60.001||Cache=-||body_bytes=576||req=GET /favicon.ico HTTP/1.1||status=504
error日志:
2020/06/16 14:13:12.806141 <ngx_http_upstream.c:4887> [error] 301#301: *81244672 upstream timed out (110: Connection timed out) while connecting to upstream, client: *.*.*.*, server: localhost, request: "GET /favicon.ico HTTP/1.1", upstream: "http://1.1.1.1:33200/favicon.ico", host: "*.*.*.*:31443", referrer: "https://*.*.*.*:31443/**/**/**.jsp"
排查门户发现,并没有自主发起 /favicon.ico 请求,网上查找资料了解到:
浏览器在请求页面前会自主发起/favicon.ico请求,获取网页图标,就是如下截图红框中所展示的标记:
由于版本有配置如下的通用匹配location和回源配置,导致请求被转发到:1.1.1.1:33200,导致超时
upstream web{
ip_hash;
server 1.1.1.1:33200 max_fails=5;
keepalive 1200;
}
...
location / <-- 优先级最低,匹配任意请求
{
proxy_pass http://web;
}
解决方法,加上如下配置,暂时规避:
location /favicon.ico {
return 404;
}