一、客户端服务器提示“too many open files”如何解决
修改配置文件,增大并发量
# vim /usr/local/nginx/conf/nginx.conf
-----
worker_process 1; //与cpu核心数量一致
events {
worker_connections 200000; //每个worker的最大并发连接数
use epoll;
}
//epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率
# /usr/local/nginx/sbin/nginx -s reload
优化linux内核参数(最大文件数量)
# ulimit -a
# ulimit -Hn 10000 //设置硬限制(临时规则)
# ulimit -Sn 10000 //设置软限制(临时规则)
# vim /etc/security/limits.conf //在最后一行后追加
* soft nofile 100000
* hard nofile 100000
//用户 /组 硬限制/软限制 需要限制的项目 限制的值
优化后测试服务器的并发量
# ab -n 10000 -c 5000 http://192.168.1.15
二、优化nginx 数据包头缓存
优化前,用脚本测试长头部请求能否获得响应
# vim buffer.sh
#!/bin/bash
URL=http://192.168.1.15/test/html
for i in {1..5000}
do
URL=$(URL)v$i=$i
done
curl $URL
# chmod +x buffer.sh
# ./buffer.sh
414 Request-URI Too Large //报错。头部请求太长
修改nginx配置文件,增加数据包头部缓存大小
# vim /usr/local/nginx/conf/nginx.conf
--
http {
client_header_buffer_size 512K; //默认请求包头的缓存
large_client__header_buffers 4 512K; //大请求包头信息缓存的个数与容量
----
}
# /usr/lcoal/nginx/sbin/nginx -s reload
# ./buffer.sh
hello world!!
//nginx 默认的header长度上限值是4K ,如果头部请求的长度超过了这个上限值。则根据实际调整上限值
三、浏览器本地的静态数据数据
火狐访问 about:cache
修改nginx 配置文件,定义对静态页面的缓存时间
# vim /usr/local/nginx/conf/nginx.conf
---
server {
---
location ~*\.(jpg|jpeg|png|css|js|ico|xml)$ {
expires 30d;
}
}
# /usr/local/nginx/sbin/nginx -s stop
# /usr/lcoal/nginx/sbin/nginx
优化之后再次访问about:cache页面,查看http://192.168.1.15缓存时间
自定义报错页面
修改配置文件,自定义报错页面
# vim /usr/local/nginx/conf/nginx.conf
----
error_page 404 /40x.html;
---
# vim /usr/local/nginx/html/40x.html
404 error!!
# /usr/local/nginx/sbin/nginx -s reload
# firefox http://192.168.1.15/has.html
//访问不存在的页面
状态码 | 功能 |
---|---|
200 | 一切正常 |
301 | 永久重定向 |
302 | 临时重定向 |
401 | 用户名或密码错误 |
403 | 禁止访问(客户端IP被拒绝) |
404 | 文件不存在 |
414 | 请求URI头部过长 |
500 | 服务器内部错误 |
502 | Bad Gateway |
四、查看服务器状态信息
1)编译安装时使用 --with-http_stub_module开启页面状态模块
//重新编译安装
# rm -rf /usr/local/nginx
# rm -rf nginx-1.12.2
#yum -y install openssl-devel zlib-devel pcre-devel gcc gcc-c++
# tar -xf nginx-1.12.2.tar.gz
# cd nginx-1.12.2/
# ./configure \
> --with-http_stub_status_module \ //开启status状态页面
> --with-http_ssl_module \ //开启ssl加密功能
> --with-stream //开启TCP/UDP代理模块
# make && make install
修改配置文件,定义状态页面
# vim /usr/local/nginx/conf/nginx.conf
server {
-----
location /status {
stub_status on;
}
}
# /usrlocal/nginx/sbin/nginx -s reload
# curl http://192.168.1.15/status
Active connections: 1
//当前活动的连接数量
server accepts handled requests
2 2 2
//Accepts 已经接受客户端的连接总数量
Handled 已经处理的客户端的连接总数量
Requests 客户端发送的请求数量
Reading: 0 Writing: 1 Waiting: 0
//Reading 当前服务器正在读取的客户端请求头的数量
Writing 当前服务器正在写响应信息的数量
Waiting 当前多少客户端在等待服务器的响应
五、对页面进行压缩处理
# vim /usr/local/nginx/conf/nginx.conf
---
http {
gzip on; //开启压缩
gzip_min_length 1000; //小文件不压缩
gzip_comp_level 4 //压缩比率
gzip_type text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
//对特定文件压缩,参考类型mime.type
server {
---
}
---
}
六、服务器内部缓存
如果需要处理大量的静态文件,可以将文件缓存在内存,下次访问会更快
# vim /usr/local/nginx/conf/nginx.conf
http {
open_file_cache max=200 inactive=20s;
//设置服务器最大缓存为2000个句柄,关闭20s内无请求的句柄
open_file_cache_valid 60s
//文件句柄的有效时间是60s,60s后过期
open_fi;e_cache_min_uses 5;
//只有访问次数超过5次会被缓存
open_file_cache_errors off;
----
}