服务器环境处在专网内,对端口开放有严格要求,目前对外接口只开放80端口,因此选择了用nginx做反向代理,能正常提供对外接口服务,但是碰到一个问题,同一个访问地址,第一次请求返回特别慢,3-5秒,后面再访问同一地址,返回都是几十毫秒,比如: ?page=1,第一次访问很慢,后面就正常了,等我访问 ?page=2,第一次又很慢,后面又正常。
如果不通过nginx,直接启动服务监听80端口,既把nginx关闭,只使用webman,没有任何问题,所以可以确定问题是出在nginx上。
百度了很多解决方案,没有一个跟我的一样。
把nginx进程设置为1,然后重启nginx,ps auxf找到nginx子进程pid,执行命令
strace -ttp pid
看下nginx进程的系统调用,能大概判断出哪里有问题。root 8508 0.0 0.0 131944 9480 ? Ss 11:35 0:00 nginx: master process /www/server/nginx/sbin/ngi
www 8509 0.0 0.2 162664 34512 ? S 11:35 0:00 _ nginx: worker process
www 8510 0.0 0.0 131816 9900 ? S 11:35 0:00 _ nginx: cache manager process
www 8511 0.0 0.0 131816 9900 ? S 11:35 0:00 _ nginx: cache loader process
[root@iZ51k2facfn13jZ ~]# strace -ttp 8508
strace: Process 8508 attached
11:37:15.141017 rt_sigsuspend([], 8
老大,能看出是什么问题吗?
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
这两个注释掉后,正常了!
大佬,之前提过相同的问题,我本地测试发现确实是这样,如果直接使用端口访问没有问题,但是参照https://www.workerman.net/doc/webman/others/nginx-proxy.html使用nginx代理之后,首次访问会很慢。
@walkor ,大佬,麻烦看下这个情况是什么问题?
反向代理配置文件中,把
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
这两个注释掉后,正常了!