设为首页 收藏本站
查看: 1228|回复: 0

[经验分享] nginx配置文件大解析

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-29 08:50:19 | 显示全部楼层 |阅读模式
配置文件的主要组成部分:
      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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-39471-1-1.html 上篇帖子: nginx的upstream模块 下篇帖子: nginx的自我介绍以及如何编译安装 配置文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表