Nginx 配置文件详解

一、 nginx文件结构
...              #全局块
// 设定虚拟主机配置events {         #events块   ...}
http      #http块{    ...   #http全局块    server        #server块    {        ...       #server全局块        location [PATTERN]   #location块        {            ...        }        location [PATTERN]        {            ...        }    }    server    {      ...    }    ...     #http全局块}

二、模块1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。5、location块:配置请求的路由,以及各种页面的处理情况。
########### 每个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 1;  #允许生成的进程数,默认为1 ,启动进程,通常设置成和cpu的数量相等    //下面解释
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #全局错误日志,制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
#工作模式及连接数上限events {    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on    //下面解释
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能 select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #单个后台worker process进程的最大并发链接数    //下面解释}
http {    include       mime.types; #文件扩展名与文件类型映射表 设定mime类型,类型由mime.type文件定义 include  /etc/nginx/mime.types;       default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #设定日志格式    access_log log/access.log myFormat;
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。 //下面解释
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。         #开启gzip压缩输出    gzip  on;    /·····     
        #设定负载均衡的服务器列表    upstream mysvr {          #weigth参数表示权值,权值越高被分配到的几率越大      server 127.0.0.1:7878;      server 192.168.10.121:3333 backup;  #热备    }     # 定义错误提示页面  error_page  500 502 503 504 /50x.html;    location = /50x.html {         root  html;    }
     #设定虚拟主机配置    server {        keepalive_requests 120; #单连接请求上限次数。        listen       80;   #监听端口        server_name  127.0.0.1;   # 定义使用 127.0.0.1.访问,如果是域名,则使用该域名访问 www.nginx.cn        #charset koi8-r; #编码格式,若网页格式与此不同,将被自动转码        location   / {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。           root path;  #根目录,定义服务器的默认网站根目录位置 ,可相对也可绝对路径               index index.php index.html index.htm;  # 首页文件。以下按顺序匹配           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表           deny 127.0.0.1;  #拒绝的ip           allow 172.18.5.54; #允许的ip        }#静态文件,nginx自己处理  location ~ ^/(images|javascript|js|css|flash|media|static)/ {      root /var/www/virtual/htdocs;      #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。      expires 30d;  }  #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.  location ~ \.php$ {      root /root;      fastcgi_pass 127.0.0.1:9000;      fastcgi_index index.php;      fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;      include fastcgi_params;  }  #设定查看Nginx状态的地址  location /NginxStatus {      stub_status      on;      access_log       on;      auth_basic       "NginxStatus";      auth_basic_user_file conf/htpasswd;  }  #禁止访问 .htxxx 文件  location ~ /\.ht {       deny all;  }    }}
解释:
1、accept_mutex的意义:     当一个新连接到达时,如果激活了accept_mutex,那么多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态;如果没有激活accept_mutex,那么所有的Worker都会被唤醒,不过只有一个Worker能获取新连接,其它的Worker会重新进入休眠状态,这就是「惊群问题」。假设你养了一百只小鸡,现在你有一粒粮食,那么有两种喂食方法:
- 你把这粒粮食直接扔到小鸡中间,一百只小鸡一起上来抢,最终只有一只小鸡能得手,其它九十九只小鸡只能铩羽而归。这就相当于关闭了accept_mutex。- 你主动抓一只小鸡过来,把这粒粮食塞到它嘴里,其它九十九只小鸡对此浑然不知,该睡觉睡觉。这就相当于激活了accept_mutex。
2、worker_connections 
       # 并发总数是 worker_processes 和 worker_connections 的乘积    # 即 max_clients = worker_processes * worker_connections    # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4  为什么    # 为什么上面反向代理要除以4,应该说是一个经验值    # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000    # worker_connections 值的设置跟物理内存大小有关    # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数    # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右    # 我们来看看360M内存的VPS可以打开的文件句柄数是多少:    # $ cat /proc/sys/fs/file-max    # 输出 34336    # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内    # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置    # 使得并发总数小于操作系统可以打开的最大文件数目    # 其实质也就是根据主机的物理CPU和内存进行配置    # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。    # ulimit -SHn 655353、sendfile on              #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,    #对于普通应用,必须设为 on,    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,    #以平衡磁盘与网络I/O处理速度,降低系统的uptime.4、gzip     #gzip模块设置    #开启gzip压缩输出    gzip on;    #最小压缩文件大小    gzip_min_length 1k;    #压缩缓冲区    gzip_buffers 4 16k;    #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)    gzip_http_version 1.0;    #压缩等级 1-9 等级越高,压缩效果越好,节约宽带,但CPU消耗大    gzip_comp_level 2;    #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。    gzip_types text/plain application/x-javascript text/css application/xml;    #前端缓存服务器缓存经过压缩的页面     gzip_vary on;

三、上面是nginx的基本配置,需要注意的有以下几点:     1、1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;2.$remote_user :用来记录客户端用户名称;3.$time_local : 用来记录访问时间与时区;4.$request : 用来记录请求的url与http协议;5.$status : 用来记录请求状态;成功是200;6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;7.$http_referer :用来记录从那个页面链接访问过来的;8.$http_user_agent :记录客户端浏览器的相关信息;9、惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。10、每个指令必须有分号结束。四、worker_processes     nginx默认是没有开启利用多核cpu的配置的。需要通过增加worker_cpu_affinity配置参数来充分利用多核cpu,cpu是任务处理,当计算最费时的资源的时候,cpu核使用上的越多,性能就越好。2核cpu,开启2个进程worker_processes 2; worker_cpu_affinity 01 10;  解释:01表示启用第一个CPU内核,10表示启用第二个CPU内核worker_cpu_affinity 01 10;表示开启两个进程,第一个进程对应着第一个CPU内核,第二个进程对应着第二个CPU内核。4核cpu,开启2个进程     worker_processes 2; worker_cpu_affinity 0101 1010;  解释:0101表示开启第一个和第三个内核,1010表示开启第二个和第四个内核;2个进程对应着四个内核;worker_cpu_affinity配置是写在/etc/nginx/nginx.conf里面的;2核是 01,四核是0001,8核是00000001,有多少个核,就有几位数,0表示该内核开启,1表示该内核关闭。8核cpu,开启8个进程     worker_processes 8; worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;      解释:0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推;worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。
yum -y install httpd-toolsab -n10 -c 10 http://139.199.121.180/配置完之后可以重启nginx,用ab工具可以进行性能测试,在服务器上执行top,然后按1,就可以看到cpu工作情况,如果多个cpu内核的利用率差不多,就证明nginx已经成功利用了多核cpu,测试结束后,cpu内核的负载都同时降低。/proc/cpuinfo
查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c查看物理CPU个数   cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l查看每个物理CPU中core的个数(即核数)  cat /proc/cpuinfo| grep "cpu cores"| uniq 查看逻辑CPU的个数  cat /proc/cpuinfo| grep "processor"| wc -l
文章来源: Nginx 配置文件详解

人吐槽 人点赞

猜你喜欢

发表评论

用户名: 密码:
验证码: 匿名发表

你可以使用这些语言

查看评论:Nginx 配置文件详解