nginx常见问题处理

一、客户端服务器提示“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;
        ----
        }

你可能感兴趣的:(nginx常见问题处理)