服務(wù)器環(huán)境處在專(zhuān)網(wǎng)內(nèi),對(duì)端口開(kāi)放有嚴(yán)格要求,目前對(duì)外接口只開(kāi)放80端口,因此選擇了用nginx做反向代理,能正常提供對(duì)外接口服務(wù),但是碰到一個(gè)問(wèn)題,同一個(gè)訪問(wèn)地址,第一次請(qǐng)求返回特別慢,3-5秒,后面再訪問(wèn)同一地址,返回都是幾十毫秒,比如: ?page=1,第一次訪問(wèn)很慢,后面就正常了,等我訪問(wèn) ?page=2,第一次又很慢,后面又正常。
如果不通過(guò)nginx,直接啟動(dòng)服務(wù)監(jiān)聽(tīng)80端口,既把nginx關(guān)閉,只使用webman,沒(méi)有任何問(wèn)題,所以可以確定問(wèn)題是出在nginx上。
百度了很多解決方案,沒(méi)有一個(gè)跟我的一樣。
把nginx進(jìn)程設(shè)置為1,然后重啟nginx,ps auxf找到nginx子進(jìn)程pid,執(zhí)行命令 strace -ttp pid
看下nginx進(jìn)程的系統(tǒng)調(diào)用,能大概判斷出哪里有問(wèn)題。
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
這兩個(gè)注釋掉后,正常了!
大佬,之前提過(guò)相同的問(wèn)題,我本地測(cè)試發(fā)現(xiàn)確實(shí)是這樣,如果直接使用端口訪問(wèn)沒(méi)有問(wèn)題,但是參照http://www.wtbis.cn/doc/webman/others/nginx-proxy.html使用nginx代理之后,首次訪問(wèn)會(huì)很慢。