nginx常见问题处理

目录

常见问题:

问题一:自定义报错页面

问题二:如何查看服务器状态信息?

问题三: 优化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常见问题处理_第1张图片

 

问题二:如何查看服务器状态信息?

运维人员需要知道的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

nginx常见问题处理_第2张图片

[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

 验证:

nginx常见问题处理_第3张图片

上图有关信息详细解释: 

Active connections: 2        //并发量数
server accepts handled requests
 4 4 8                        //accepts:已经接受客户端的连接总数量。handled:已经处理客户端的连接总数量。 requests:客户端发送的请求数量 (这三个数只有在关闭nginx服务时值才会减少)
Reading: 0 Writing: 1 Waiting: 1           //Reading:当前服务器正在读取客户端请求头的数量。Writing:当前服务器正在写响应信息的数量

问题三: 优化Nginx并发量

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/

验证: 

nginx常见问题处理_第4张图片

问题四:优化Nginx数据包头缓存

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将显示浏览器的缓存信息。

nginx常见问题处理_第5张图片 

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  //重新加载配置  

 

你可能感兴趣的:(nginx,运维)