码迷,mamicode.com
首页 > 其他好文 > 详细

nginx服务调优

时间:2018-05-22 15:07:09      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:RoCE   表示   alt   bmp   mod   数据段   /etc/   版本   后缀   

                                    nginx调优

nginx 配置文件模块:

main全局设置:

 技术分享图片

events   stream四层代理模块

             upstream  负载均衡设置:后端主机

             server

http模块  gzip 压缩作用

server模块    主机设置:port

   localtion  匹配页面位置,每个页面在什么位置上

   localtion  URL特定匹配设置

server模块

 

 

server继承main的设置

localtion 继承server

upstream不会继承,也不会被继承

 

 

 

nginx配置文件调优:

vim  /usr/local/nginx/conf/nginx.conf

main全局设置

user nginx;   //用户

group nginx;  //组

 

worker_processes  2;

 //进程数量,每个进程占12-15MB的内存,如果多核,建议和cpu数量一样

 

error_log  logs/error.log;    //开启日志级别

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

 

日志级别:debug\info\notice\warn\error\crit

 

worker_rlimit_nofile 65535;

//nginx进程可以打开做多文件描述数量

注意:

ulimit -n 65535 

//生效文件描述,默认是1024

 

stat nginx.conf     //查看描述文件,

单个文件最大权限666,当是一个程序的时候才是777,目录的最大权限是777,目录没有执行权的时候,打不开目录文件的描述信息,只能看到目录名,看不到具体的物理位置,

 

 

events {

use epoll; 

//多路复用,可以大并发的处理文件,

1.select/poll/  标准模式,常规工作模式

2.kqueue/epoll/rtsig  高效模式:BSD:kqueue   linux:epoll  很少用:rtsig

    worker_connections  65535;

}

//每个值的最大连接数量,默认1024

1.max_client=worker_processes * worker_connections

2.反向代理:max_client=worker_processes * worker_connections/4

 

注意:这两个必须用这个启动ulimit -n 65535:

临时生效:

worker_rlimit_nofile 65535;

worker_connections  65535;

 

永久生效:

vim /etc/rc.local

添加:ulimit -n 65535

 

************************

第二个模块:

http的模块

 

http {

include       mime.types;

//包含的另外的配置文件,简化主配置文件

 

default_type  application/octet-stream;

//应用层的二进制流,没有定义文件类型的时候,使用二进制流,php-fpm启动失败了,然后就会出现下载的php文件

 

#log_format  main //日志格式,自己喜欢的格式access_log  logs/access.log  main;

        client_max_body_size 20m;

 //客户端请求的最大的单个文件字节数,默认2m,公司最大的文件字节数

        client_header_buffer_size 32k;

//用来指定客户端缓冲区大小,是软件申请的内存空间,操作系统无法管理大小,静态页面1k足够,动态cookie,cookie越大这个值越大,128k

large_client_header_buffers 4 32k;

//客户端请求较大的消息头部,最大值和大小  4 32k=128k,最大缓存就是128k/或者是4 128k=256k

 

添加:

Dertypage:cpu处理完成要往硬盘里写的数据

buffer :缓冲区

内存处理一个数据大概100ns,硬盘是s秒

 

 

 

sendfile        on;

//开启高效传输模式,这个开,下边两个才生效,

    tcp_nopush     on;//不要重传

tcp_nodelay    on;//不要延迟,数据进来不禁列队,直接进来。

//这两个参数合起来防止网络拥塞

 

 

TCP封装格式:

URG 数据的优先级,

 

SYN表示建立连接,

 

FIN表示关闭连接,

 

ACK表示响应,TCP,建立连接,然后ack,进行数据传输,UDP,给一个数据,一个ack

 

PSH表示有 DATA数据传输,

 

RST表示连接重置。

 

TCP的流控机制:

 

滑动窗口:表示本地接受的字节数。

 

TCP差错控制:

要多少传多少

 

1.重传计时器:

发出的每一个包都开启一个计时器,3600s,然后等待对方回应,如果没有回应,然后在传一个,并重新开启一个计时器,然后最大10次以后彻底断开。

 

2.坚持计时器:

为了防止0窗口锁死状态,第一就是在超时前如果回应了,继续发消息,如果丢掉了,就会发送探测数据段,用来测试是否在线,

 

3.保活计时器:

确认关系后,客户端不给服务器发数据,然后服务器进行探测数据的10个的发送。也是3600s

 

4.时间等待计时器:

发一个FIN,然后等待最后一个ack超时,然后断开连接,就是在断开的时候进行等待,然后3600后彻底断开。

 

UDP

一个data,一个ack

 

 

# keepalive_timeout  0;

keepalive_timeout  60;

 //保活计时器,客户端保活的时间

      client_header_timeout 10;

//客户端请求头部的超时时间,超时返回408错误,

      client_body_timeout 10;

//主体读取超时时间,返回408错误

      send_timeout 10;

//响应客户端的超时时间,关闭连接

 

 

 

 

添加模块:

cd /usr/src/nginx-1.11.1/

 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-stream --with-http_gzip_static_module && make

 

cd /usr/local/nginx/sbin/

mv nginx nginx.bak

cd /usr/src/nginx-1.11.1/objs/

cp nginx /usr/local/nginx/sbin/

nginx -V

 

注意:

只需要make—— 替换二进制文件

不要make install

 

****************************

压缩模块:

gzip  on;开启

        gzip_min_length 1k;

//允许压缩页面的最小字节数,Content_Length,大于1k压缩,否则不压缩

        gzip_buffers 4 16k;

//4个16k,作为压缩结果缓存,默认与原数据相同小大空间

        gzip_http_version 1.1;

//http压缩支持的版本

        gzip_comp_level 2;

//【1-9】小:压缩比例小,速度快,大反之

        gzip_types text/plain application/x-javascript text/css ap

plication/xml;

//指定压缩的类型,

        gzip_vary on;

注意:可以让前端缓存服务器经过gzip的缓存页面,务必打开

 

*****************************

 

轮询模块:

upstream licluster {

//什么都不写,按照时间顺序

        ip_hash: //

//按照请求访问ip的hash结果分配范围,解决动态网站的session共享问题

        fair; 

//按照页面大小的加载时间长短,根据后端服务器响应时间来分配,第三方模块,自己下载一个upstream_fair模块

        url_hash;

//按照url的hash结果分配,每个url定向到同一个后端服务器,提高后端缓存服务器的效率,需要按装nginx hash模块,

        server 192.168.117.100:80 weight=6; 

 

        server 192.168.117.101:80 down;

//down不参与轮询,backup备份机,全部非backup主机不可访问是才生效。

        server 192.168.117.102:8008 max_fails=3 fail_timeout=20s;

//max_fails 允许请求失败的次数,默认值是1,proxy_next_upstream定义错误模,fail_timeout 失败后暂停服务的时间,这两个一定是连用的。

        server 192.168.117.103:8080;

//当负载均衡调度算符是ip_hash的时候后端服务器在负载均衡调度中的状态不能是weight和backup,weight和backeup的优先级高,同时存在ip_hash失效。

 

 

*******************************

主机模块:

server {

        listen       80;

        server_name  www.baidu.com; //域名

 

        charset gb2312;   //字符集

 

  access_log logs/www.li.com.access.log main  //定义日志

  index.html index.jsp   //定义页面文件

  root /var/www/html/www.li.com  //定义网站的保存路径。

 

 

******************************

代理模块:

        location / {

            root   html;

            index  index.html index.htm;

        }

 

添加:

      location ~ .*\.(gif|jpg|jpen|png|bmp|swf)$ {  //图片服务器代理

           root /var/www/html/www.li.com/img    //存放位置

           expires 30d;  //过期时间为30天

        }

 

       location ~ ^/(upload|html)/ {    //静态页面

            root /var/www/html/www.li.com/img

            expires 10d;  //过期时间为10天

        }

 

       location ~ .*.jsp$ {   //解析jsp脚本

           index index.jsp;

           proxy_pass http://localhost:8080;

        }

 

       location / {

           proxy_pass http://licluster;

           proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;

 

 

           include /usr/local/nginx/conf/proxy.conf;

注意:将下边的代理都写到上边的proxy.conf这个文件中,可以简化主配置文件

 

                proxy_redirect off; 

                proxy_set_header Host $host;

                proxy_set_header X-Real-IP $remote_addr;

                proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;

                client_body_buffer_size 128k;

    //暂时缓存到本地,然后在转给客户端,客户端请求的主体缓冲区的的大小。                                                             proxy_connect_timeout 90;

    //后端服务器连接的超时时间发起握手等候响应的超时时间                                   proxy_send_timeout 90;

  //后端服务器的数据回传时间,规定时间内后端服务器必须回传完成所有的数据,否则断开连接。            

                proxy_send_timeout 90;

  //设置nginx从代理的后端服务器获取信息的时间,表示建立连接后,nginx等待后端服务器的响应时间。      

                proxy_buffer_size 4k;

   //设置缓冲区的大小。默认等于buffers的大小            

                proxy_buffers 4 32k;

   //设置缓冲区的数量和大小,nginx从后端获取的响应信息放到缓存中去                             proxy_busy_buffers_size 64k;

  //用于设置系统繁忙是可以临时开启的大小,是上一条的2倍                              proxy_temp_file_write_size 64k;

  //指定proxy缓存临时文件的大小。

}

 

 

 

location ~* \.(gif|jpg|png|flv|wma|avi|wmv|mp3|zip|rar)$ {  

                                         //遇到这些后缀的时候进行防盗链

 

        valid_referers none blocked *.li.com li.com;  //只能让这两个网站进行访问

        if ($invalid_referer) {

        rewrite ^/ http://www.li.com/img/error.gif;

        #return 403;

        }

        }

         location /images  {

         root /var/www/html/www.li.com/img

         if ($invalid_referer) {

         rewrite ^/ http://www.li.com/img/error.gif;

         #return 403;

         }

         }

 

 

日志切割:

一般日志到了1G就进行切割

 

wc -w 单词

wc -c 字节数

 

1.原日志文件的位置:

cd /usr/local/nginx/logs/

ls

access.log

error.log

 

2.查找PID文件位置,

cat /usr/local/nginx/logs/nginx.pid

 

3.编辑日志切割的脚本

vim /etc/init.d/nglog

#!/bin/bash

savepath_log=‘/home/nginx/logs/‘

nglogs=‘/usr/local/nginx/logs‘

mkdir -p $savepath_log/$(date +%Y)/$(date +%m)

mv $nglogs/access.log $savepath_log/$(date +%Y)/$(date +%m)/access.$(date +%Y%m%d).log

mv $nglogs/error.log $savepath_log/$(date +%Y)/$(date +%m)/error.$(date +%Y%m%d).log

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

 

chmod +x /etc/init.d/nglog

启动日志文件

/etc/init.d/nglog start

 

 

 

 

 

nginx服务调优

标签:RoCE   表示   alt   bmp   mod   数据段   /etc/   版本   后缀   

原文地址:https://www.cnblogs.com/Leonardo-li/p/9071252.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!