目录
一、Nginx返回错误页面
1、HTTP常见状态代码列表
二、Nginx状态页面
1、安装status模块
2、激活status
三、优化并发连接数
1、压力测试软件ab(http-tools)
2、优化并发连接数
2.1、修改nginx并发数
2.2、修改内核最大文件数量
四、Nginx日志分割
五、开启gzip压缩
六、开启文件缓存
返回码 | 描述 |
200 | 一切正常 |
400 | 请求语法错误 |
401 | 访问被拒绝(账号或密码错误) |
403 | 资源不可用,通常由于服务器上文件或目录的权限设置导致 |
403 | 禁止访问:如客户端的IP地址被拒绝,无法验证密码 |
404 | 无法找到指定位置的资源(Not found) |
414 | 请求URL头部太长 |
500 | 服务器内部错误 |
502 | 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答(Bad Gatwway) |
2、自定义错误返回页面
vim /usr/local/nginx/conf/nginx.conf
默认nginx.conf的server下面都有个注释的error_page配置,取消注释,更改为自定义页面或图片就行了:
server {
listen 80;
server_name localhost;#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}error_page 404 /my404.html; #html可以自定义,但要实际存在
#error_page 404 /my404.jpg; #也可以显示图片,选用一个即可
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}... ...
}
【注】:上面的my404.html和my404.jpg文件前面的“/”不是系统的跟目录,而是nginx的html的根目录,即/usr/local/nginx/html/下
/usr/local/nginx/sbin/nginx -s reload
客户端测试:访问一个不存在的地址:
返回图片:
nginx编译安装时./confiugre后面需要添加--with-http_stub_status_module开启模块功能,该模块可以查看Nginx连接数等信息
Nginx安装参考:Nginx安装、升级与基础配置_桂安俊@kylinOS的博客-CSDN博客
vim /usr/local/nginx/conf/nginx.conf
新增一个location,用于访问status:
server {
listen 80;
server_name localhost;
location /status {
stub_status on;#allow IP; #可设置限制访问
#deny all;
}location / {
root html;
index index.html index.htm;
}
/usr/local/nginx/sbin/nginx -s reload
客户端测试:浏览器访问192.168.1.20/status
【参数说明】:
Active connections:当前活动的连接数量,实时并发量
Accepts:已经接受客户端的连接总数量,三次握手建立
Handled:已经处理客户端的连接总数量,一般与accepts一致,除非服务器限制了连接数量
Requests:客户端发送的请求数量
Reading:当前服务器正在读取的客户端请求头的数量
Writing:当前服务器正在写响应信息的数量
Waiting:当前多少客户端在等待服务器的响应
yum -y install httpd-tools#-c后面代表总人数,-n后面代表总访问量,如下即模拟100个人共访问100次,即平均一人访问一次
#所以-c的值必须要大于等于-n的值,不然会报语法错误,且网址最后面必须以“/”斜线结尾,否则也会报语法错误
ab -c 100 -n 100 http://192.168.1.20/ab -c 2000 -n 2000 http://192.168.1.20/
测试:
100人100次模拟访问:
ab -c 100 -n 100 http://192.168.1.20/
2000人2000次模拟访问:
ab -c 2000 -n 2000 http://192.168.1.20/
如上可以看到2000人2000次访问报错了,这时候就需要优化Nginx,以满足更高并发量。
vim /usr/local/nginx/conf/nginx.conf
worker_processes 2; #启动多少个nginx worker进程,需要与CPU核心数量一致
events {
worker_connections 50000; #每个nginx worker进程能够支持的最大并发连接数量
}
/usr/local/nginx/sbin/nginx -s reload
除此以外还要修改内核参数,修改最大文件数量:
ulimit -a
可以看到默认最大文件打开数是1024。
a、临时修改:
ulimit -n 100000 #临时修改最大文件打开数,重启系统失效
b、永久修改:
vim /etc/security/limits.conf #永久修改,需重启生效
新增如下内容:
* soft nofile 100000
* hard nofile 100000#格式说明:用户或组 软限制或硬限制 项目 值
#其中soft软限制是可以突破的,hard硬限制是不可以突破的,nofile代表最大文件打开数量
再次客户端高并发测试,可以完成2000并发:
ab -c 2000 -n 2000 http://192.168.1.20/
脚本日志切割
vim /usr/local/nginx/logbak.sh
#!/bin/bash
date=`date +%Y%m%d`
logpath=/usr/local/nginx/logs
mv $logpath/access.log $logpath/access-$date.log
mv $logpath/error.log $logpath/error-$date.log
kill -USR1 $(cat $logpath/nginx.pid) #这里的kill不是杀死进程,是生成新的日志文件
设置定时任务,比如每周五03点03分自动执行脚本完成日志切割:
crontab -e
03 03 * * 5 /usr/local/nginx/logbak.sh
如果是访问很多图片内容网站,如果不压缩,直接不压缩传递,就会占用很多流量并且传输很慢。
开启压缩功能:
http {... ...gzip on; #开启压缩gzip_min_length 1000; #小文件不压缩,如满足1000字节之后才压缩,小文件越压缩反而越大gzip_comp_level 4; #压缩比率,压缩比率太大会导致压缩时间长gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; #对特定文件压缩,类型参考mime.types文件,在/usr/local/nginx/conf/mime.types... ...}
【注】mime.types说明,后面是文件格式类型,前面为对应gzip_types,填写前面的:
【说明】这里是压缩,解压得话是浏览器完成,几乎所有得浏览器都支持自动解压。
使用内存缓存磁盘中的文件,html页面是存放在/usr/local/nginx/html目录下的,这是存放在硬盘上的,如果把用户经常访问的html页面缓存到内存中,那访问速度可以更快。
修改如下,开启文件缓存:
vim /usr/local/nginx/conf/nginx.conf
http {... ...open_file_cache max=2000 inactive=20s; #设置服务器内存中最大缓存2000个句柄,关闭20秒内无请求的文件句柄,从内存中清除open_file_cache_valid 60s; #文件句柄的最长有效时间是60秒,60秒后过期,不管是不是一直被访问,这样防止硬盘html修改了内容,但是一直缓存在内存中的html没有更新,导致用户访问的页面一直没更新open_file_cache_min_uses 5; #只有访问次数超过5次会被缓存open_file_cache_errors off; #内存缓存html过期,用户访问内存html找不到会报错,但是硬盘html是有的,这里是关闭缓存文件错误... ...
}