目录
常见问题:
问题一:自定义报错页面
问题二:如何查看服务器状态信息?
问题三: 优化Nginx并发量
问题四:优化Nginx数据包头缓存
问题五:浏览器本地缓存静态数据
问题六:日志切割
问题七:对页面进行压缩处理
步骤八:服务器内存缓存
本案例要求对Nginx服务器进行适当优化,解决如下问题,提升服务器的处理性能:
1、如何自定义返回给客户端的404错误页面?
2、如何查看服务器状态信息?(非常重要)
3、如果客户端访问服务器提示"Too many files"如何解决?
4、如何解决客户端访问头部信息过长的问题?
5、如何让客户端浏览器缓存数据?
6、日志的切割?
7、开启gzip压缩功能,提高数据传输效率?
8、开启文件缓存功能?
1)当浏览器访问一个不存在的页面时,修改自定义报错页面提示。
[root@proxy nginx]# vim conf/nginx.conf
######添加下面信息
charset utf-8; #仅在需要编译中文时加入该选项
error_page 404 /404.html; #自定义错误页面
[root@proxy html]# echo "您访问的页面不存" > /usr/local/nginx/html/404.html
[root@proxy html]# nginx -s reload
验证:
运维人员需要知道的nginx的一些数值:
并发量
总连接数
等待
pv(page view),uv(user view)
页面访问量 用户访问量
例如:2个用户分别访问10次页面,则pv=20,uv=2
在nginx中有一个模块专门统计一下状态的数据。编译安装时需要使用--with-http_stub_status_module开启状态页面模块。
重装nginx:
[root@proxy ~]# yum -y install gcc pcre-devel openssl-devel
[root@proxy ~]# tar -xf nginx-1.20.1.tar.gz
[root@proxy ~]# cd nginx-1.20.1/
[root@proxt nginx-1.20.1]# ./configure \
> --with-http_ssl_module \ //开启ssl加密功能
> --with-stream \ //开启四层反向代理,也就是tcp/udp的服务器
>--with-http_stub_status_module //开启status状态功能
[root@proxy nginx-1.20.1]# make && make install
[root@prox nginx-1.20.1]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 8000;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#####添加如下信息#####
location /status{
stub_status on;
#allow ip地址;
#deny ip地址;
}
[root@prox ~]# /usr/local/nginx/sbin/nginx
验证:
上图有关信息详细解释:
Active connections: 2 //并发量数
server accepts handled requests
4 4 8 //accepts:已经接受客户端的连接总数量。handled:已经处理客户端的连接总数量。 requests:客户端发送的请求数量 (这三个数只有在关闭nginx服务时值才会减少)
Reading: 0 Writing: 1 Waiting: 1 //Reading:当前服务器正在读取客户端请求头的数量。Writing:当前服务器正在写响应信息的数量
1)优化前使用ab高并发测试
[root@prox ~]# ab -n 2000 -c 2000 http://192.168.35.5/
-n是所有人加在一起的总访问量,-c是有多少人,
socket: Too many open files (24) //提示打开文件数量过多
2)修改nginx配置文件,增加并发量
[root@prox nginx-1.20.1]# vim /usr/local/nginx/conf/nginx.conf
worker_processes 1; #与cpu内核数量一致
events {
worker_connections 65535; #计算机的端口号为655
35,按最大来写
}
[root@prox nginx-1.20.1]# /usr/local/nginx/sbin/nginx -s reload
3)优化Linux内核参数(最大文件数量 )
[root@prox nginx-1.20.1]# ulimit -a //查看所有属性值
[root@prox nginx-1.20.1]# ulimit -Hn 100000 //临时设置硬限制(硬限制,超过会报错)
[root@prox nginx-1.20.1]# ulimit -Sn 100000 //临时设置软限制(软限制超过会警告)
#使用ulimit是临时修改规则,重启之后就会失效
#永久修改如下:
[root@prox nginx-1.20.1]# vim /etc/security/limits.conf
####随便找一行添加如下信息####
* soft nofile 100000
* hard nofile 100000
# 该配置文件分为4列,分别如下
#用户或组 硬限制或者软限制 需要限制的项目 限制的值
#改完之后,并不会立即生效
[root@prox nginx-1.20.1]# ab -c 2000 -n 2000 http://192.168.35.5/
验证:
1)优化前,先用脚本测试长头部请求是否能获得相应。
[root@proxy nginx-1.20.1]# vim buffer.sh
#! /bin/bash
URL=http://192.168.35.5/index.html?
for i in {1..5000}
do
URL=${URL}v$i=$i
#例:url=192.168.19.100v1=1
#url=192.168.19.100v1=1v2=2
done
curl $URL #经过5000次追加URL
[root@localhost nginx-1.20.1]# chmod o+x buffer.sh
[root@localhost nginx-1.20.1]# vim buffer.sh
[root@localhost nginx-1.20.1]# ./buffer.sh
414 Request-URI Too Long
Request-URI Too Long
The requested URL's length exceeds the capacity
limit for this server.
备注:414错误解释:一般是这个数据包头太大了,或者说服务器的nginx服务内存太小
2) 修改Nginx配置文件,增加数据包头部缓存大
[root@localhost nginx-1.20.1]# vim /usr/local/nginx/conf/nginx.conf
...
http {
include mime.types;
default_type application/octet-stream;
client_header_buffer_size 1k; #默认请求报头信息的缓存
#large_client_header_buffers 4 4k; #大请求包头部
信息的缓存个数与容量
large_client_header_buffers 4 1m;
##上面的4k一般在生产环境中足够使用,但是我们使用的>脚本有5000次循环,所以使用4个1m
...
[root@localhost nginx-1.20.1]# /usr/local/nginx/sbin/nginx -s reload
3)再次执行脚本,再次测试
1)使用firefox浏览器查看缓存
以firefox为例,在地址栏输入about:cache将显示浏览器的缓存信息。
2)修改Nginx配置文件,定义对静态页面的缓存时间
[root@localhost nginx-1.20.1]# vim
/usr/local/nginx/conf/nginx.conf
...
######定义客户端缓存时间#####
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml){
expires 30d; #定义客户端缓存时间为30天
}
[root@localhost nginx-1.20.1]# cp /usr/share/backgrounds/day.jpg /usr/local/nginx/html/
[root@localhost nginx-1.20.1]# /usr/local/nginx/sbin/nginx -s reload
3)在火狐浏览器地址栏输入about:cache,查看本地缓存数据,查看是否有图片以及过期时间是否正确。
查看nginx的访问日志:
[root@localhost ~]# cd /usr/local/nginx/logs
[root@localhost logs]# ls
access.log error.log nginx.pid
查看nginx日志的访问量:
[root@localhost logs]# wc -l access.log //访问量为:18
18 access.log
查看日志的nginx的大小:
[root@localhost logs]# ll -h access.log //大小为3.2K
-rw-r--r--. 1 root root 3.2K Apr 14 17:39 access.log
当访问日志量越来越大时,我们就要对日志文件进行切割,比如:单个文件10G如何切割?(非常常见的面试题)
具体步骤:
1,把旧的日志重命名;
2,killUSR1 PID(nginx的进程id); ---进程号具体查看:cat /nginx.pid
1)、手动执行
[root@localhost logs]# mv access.log access2.log
[root@localhost logs]# kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
也可以使用#kill -USR1 `cat nginx.pid`
[root@localhost logs]# ls //此时就多出现了一个access.log
access2.log access.log error.log nginx.pid
2)、自动完成
例如:每周五的03点03分自动执行脚本执行完成日志切割工作。
[root@localhost ~]# 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)
[root@localhost ~]# crontab -e
1)修改Ngnix配置文件
备注:数字越大压缩效果越好,同时压缩效率也会越慢;多媒体文件不要压缩;
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
http {
...
gzip on; #开启压缩
gzip_min_length 1000; #小文件不压缩(小于1000字节的不压缩,因为会越压缩越大)
gzip_comp_level 4; #压缩比率
gzip_types text/plain text/css application; #对特定文件压缩mime.types
...
}
此压缩自动处理不需要验证,因为压缩处理过程由nginx内部处理结束,人为看不见处理过程。
1) 如果需要处理大量静态文件,可以将文件缓存在内存,下次访问会更快。
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
http {
...
####服务器内存缓存
open_file_cache max=2000 inactive=20s; #设置服务器最大缓存2000个文件句柄,关闭20秒内过期
open_file_cache_valid 60s; #文件句柄的有效时间是60秒,
60秒过后过期
open_file_cache_min_uses 5; #只有访问次数超过5次会被缓存
open_file_cache_errors off; #缓存如果报错就关闭
...
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload //重新加载配置