项目场景:
对外网提供服务的一个系统,平均在线用户量有200个左右,一个用户基本要打开10个左右标签页;
项目有一个主站点和sso单点登录站点。
问题描述
- 项目采用了SignalR进行实时通讯,然后在线用户量一上来就nginx报500错误,请求也没有到服务端;
- 在访问sso时,偶尔会报502,请求也没有到服务端。
原因分析:
- 通过分析日志排查原因,发现nginx报错"too many open files",发现是linux限制了进程的可打开文件数,默认为1024;
- 通过分析日志排查原因,发现nginx报错"upstream sent too big header while reading response header from upstream",同样是默认配置有问题。
解决方案:
修改 /etc/security/limits.conf
文件,增加以下内容:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
修改 nginx.service
文件,增加以下内容:
LimitNOFILE=65535
修改 nginx.conf
文件,增加以下内容:
proxy_buffer_size 128k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 128k;