首页 > 代码库 > nginx配置文件大解析

nginx配置文件大解析

配置文件的主要组成部分:
      1) main配置段

      2) http {
       }

      3) mail

配置指令要以分号结尾,语法格式:directive valuel [value2...]; 

支持使用变量

              1)模块内置变量;

              2)自定义变量;set var_name value

主配置段的指令的类别:
            1)用于调试、定位问题
            2)正常运行必备的配置
            3)优化性能的配置
            4)事件相关的配置
    

正常运行的必备配置:                                                              

1、user USERNAME [GROUPNAME];
  指定运行worker进程的用户和组                

2、pid /path/to/pid_file;
   指定nginx的pid文件;

3、worker_rlimit_nofile #;
   指定一个worker进程所能够打开的最大文件句柄数;

4、worker_rlimit_sigpending #;
   指定每个用户能够发往worker的信号的数量;
                
优化性能相关的配置:                                                              
1、worker_processes #:
   worker线程的个数;通常应该为物理CPU核心个数减1;          

2、worker_cpu_affinity cpumask ...;
   绑定worker进程至指定的CPU上;
   CPUMASK:0001;0010;0100;1000
   例如:worker_cpu_affinity 00000001 00000010 00000100;

3、timer_resolution t;
   gettimeofday(); 

该配置指令允许用户减少调用gettimeofday()的次数

4、worker_priority nice;[-20, 19]

配置项用于设置Nginx worker进程的nice优先级

                
事件相关的配置 :                                                                          1、accept_mutex [on|off]
   内部调用用户 请求至各worker时用的负载均衡锁;打开时表示能让多个worker轮流地、序列化地与响应新请求;

2、lock_file /path/to/lock_file; 

   锁文件的位置

3、accept_mutex_delay #ms;

   使用accept锁以后,只有一个worker能取得锁 ,一个worker进程为取得accept锁的等待市场,即用户建立等待的时间,如果某worker进程在某次试图取得锁时失败了,则至少要等#ms才能再一次请求锁

4、use [epoll|rgsig|select|poll];

   定义使用的事件模型;建议让Nginx自动选择;

5、worker_connections #;
   每个worker进程所能够响应的最大并发请求数;
          

用于调试、定位问题:                                                                      
1、daemon [off|on]
   是否以守护进程方式启动nginx;

2、master_process on|off;
   是否以master/worker模型来运行nginx;

3、error_log /path/to/error_log level;
   错误日志文件及其级别;出于调试的目的,可以使用debug级别,但此级别只有在编译nginx时使用了--with-debug选项才有效;
虚拟主机相关的配置:                                        
1、server {}
   定义一个虚拟主机;

2、listen
   监听的端口
   完整格式 :listen address[:port] [default_server] [ssl] [spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
  简单语法格式:listen address[:port] [default_server] ssl
   backlog=number: 指明TCP协议backlog队列的大小。默认为-1,表示不设置;
   rcvbuf=size:设定监听句柄的SO_RCVBUF参数;
  例如:listen 172.16.100.8:8080

3、server_name name [...];
   后可跟多个主机名;名称还可以使用通配符和正则表达式(~);
      (1) 先做精确匹配;www.magedu.com:
      (2) 左侧通配符匹配,例如:*.magedu.com;
      (3) 右侧通配符匹配,例如:www.*;
      (4) 正则表达式匹配,例如: ~^.*\.magedu\.com$
      (5) default_server

4、location [=|~|~*|^~] /uri {...}
   location @name

   功能:允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location块中的配置所处理;
        =: 精确匹配检查;
        ~: 正则表达式模式匹配,区分字符大小写;
       ~*:正则表达式模式 匹配,不区分字符大小写;
       ^~:URI的前半部分匹配,不检查正则表达式;
  匹配优先级:精确匹配(=)、^~、~和~*、由不带符号的URL进行左侧匹配;

5、root
   设置web资源路径映射;用于指明请求的URL所对应的文档的根目录路径;

  location /images/ {
                    root "/web/imgs/";
                }

6、alias path
   用于location配置段,定义路径别名      

   location /images/ {
                     alias /www/pictures/;
                }

                
注意:root表示指明路径为对应location的“ /” URL;alias表示路径映射,即location中的URL是相对于alias所指明的路径而言;

7、index file
   默认主页面
   index index.html;

8、error_page code [...] [=code] URI | @name
   根据http状态码重定向错误页面
   例如:error_page  404   /404.html
   =[code]: 以指定的响应码进行响应;省略code表示以新资源的响应码为响应码;             

9、try_files
   try_files path1[,path2,...] URI
               

网络连接相关的配置:                                                                       
1、keepalive_timeout time;
  保持连接的超时时长,默认为75s;

2、keepalive_requests #;
  在一次保持连接上允许承载最大资源请求数;

3、keepalive_disable [msie6|safari|none]
  为指定类型的浏览器禁用长连接;

4、tcp_nodelay on|off
  对长连接是否使用TCP_NODELAY选项;

5、client_header_timeout time;
   读取http请求报文首部的超时时长;

6、client_body_timeout time;
   读取http请求报文body部分的超时时长;

7、send_timeout time;
   发送响应报文的超时时长;
               

对客户端请求进行限制:                                                                     
1、limit_except METHOD {...}
   指定对范围之外的其它方法的访问控制;
              

 limit_except GET {
                 allow 172.16.0.0/16;
                 deny all;
                  }

                
2、client_body_max_size SIZE;
   限制请求报文中body部分的上限;通过检测请求报文首部中的"Content_Length"来判定;

3、limit_rate speed;    
   限制客户端每秒种传输的字节数,默认为0,表示无限制;
               

对内存或磁盘资源进行分配                                                                  
1、client_body_in_file_only on|clean|off;
   请求报文的body部分是否可暂存于磁盘;on表示允许,并且即使请求结束,也不会删除暂存的内容;clean表示会删除;off不允许暂存; 

2、client_body_in_single_buffer on|off

    默认值:off
    使用字段:http, server, location
    这个指令(0.7.58版本)指定是否将客户端连接请求完整的放入一个缓冲区,当使用变量$request_body时推荐使用这个指令以减少复制操作。如果无法将一个请求放入单个缓冲区,将会被放入磁盘。                
3、client_body_buffer_size size;

   默认值:8k/16k
   使用字段:http, server, location
   这个指令可以指定连接请求实体的缓冲区大小。如果连接请求超过缓存区指定的值,那么这些请求实体的整体或部分将尝试写入一个临时文件。默认值为两个内存分页大小值,根据平台的不同,可能是8k或16k。当请求头中的Content-Length字段小于指定的buffer size,那么Nginx将使用较小的一个,所以nginx并不总是为每一个请求分配这个buffer size大小的buffer。           

4、client_body_temp_path DIR [level1 [level2 [level3 [level4]]]]

   默认值:client_body_temp
  使用字段:http, server, location
  指令指定连接请求实体试图写入的临时文件路径。
  可以指定三级目录结构,例如:client_body_temp_path /var/tmp/nginx/client  1 2
                

5、client_header_buffer_size size:

   默认值:1k
   使用字段:http, server
   指令指定客户端请求头部的缓冲区大小;绝大多数情况下一个请求头不会大于1k;不过如果有来自于wap客户端的较大的cookie它可能会大于1k,Nginx将分配给它一个更大的缓冲区,这个值可以在large_client_header_buffers里面设置。          

MIME类型相关的配置:                                                                      
            
1、types {}
   定义MIME types至文件的扩展名;
                  

  types {
             text/html .html;
              image/jpeg  .jpg;
         }

                    
2、default_type MIME-TYPE;

           

文件操作优化相关的配置:                                                                  
1、sendfile on|off; 

是否启用sendfile功能

2、aio on|off;

是否启用aio功能         

3、directio size|off;

是否使用O_DIRECT选项去请求读取文件;与sendfile功能互斥;

4、open_file_cache max=N[inactive=time] | off;
   nginx可以缓存以下三种信息:
       (1) 文件句柄、文件大小和最近一次修改时间;
       (2) 打开目录的目录结构;
       (3) 没有找到的或者没有权限操作的文件的相关信息;

   max=N表示可缓存的最大条目上限;一旦到达上限,则会使用LRU从缓存中删除最近最少使用的条目;

   inactive=time: 在inactive指定的时长内没有被访问过的缓存条目就会淘汰;

5、open_file_cache_errors on|off;
  是否缓存在文件缓存中缓存打开文件时出现找不到路径,没有权限等的错误信息;

6、open_file_cache_min_uses time;
  每隔多久检查一次缓存中缓存条目的有效性;默认60s;
                
基于IP的访问控制 : 
                                                                      

  nginx限制客户端ip访问使用的模块是ngx_http_access_module,这个模块可以进行nginx限制客户端ip访问。nginx访问限制也可以用用户名密码认证来实现。同时限制客户端ip访问和需要用户名密码认证,需要使用指令statisfy;

可以在http, server, location中添加使用
            allow, deny
            
基于用户的basic认证配置:                                                                
        auth_basic
        auth_basic_user_file
             htpasswd命令创建用户账号文件;
            
基于gzip实现响应报文压缩:                                                              

1、gzip on; #开启gzip压缩输出

  2、gzip_min_length 1k; #最小压缩文件大小

  3、gzip_buffers 4 16k; #压缩缓冲区

  4、gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)

  5、gzip_comp_level 2; #压缩等级


定制响应首部                                                                              
        add_header name value [always];
        expires
       

定制访问日志                                                                              
        log_format
        access_log    

定义合法引用:                                                                            

       
        valid_referers none | blocked | server_names | string ...;
        if ($invalid_referer) {
            return 403
        }

       

URL rewrite:                                                                             

                
        rewrite regex replacement [flag];
            last
            break
            redirect
            permanent
        
        if (condition) {
            ...
        }

        
比较表达式: =; !=; ~; ~*; !~*; -f; -f; -d; !d; -e; !-e; -x; !-x
        

         
        return:
            return code URL 
        
        set $variable value

   

本文出自 “小二哥Linux” 博客,请务必保留此出处http://9612520.blog.51cto.com/9602520/1596465

nginx配置文件大解析