• nginx【nginx配置】


    1.配置总览

    ...              #全局块
    
    events {         #events块
       ...
    }
    
    http      #http块
    {
        ...   #http全局块
        server        #server块
        { 
            ...       #server全局块
            location [PATTERN]   #location块
            {
                ...
            }
            location [PATTERN] 
            {
                ...
            }
        }
        server
        {
          ...
        }
        ...     #http全局块
    }
    • 1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
    • 2、events块:只有一个events块,配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
    • 3、http块:只有一个http块,http块可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
    • 4、server块:配置虚拟主机的相关参数,一个server中可以有多个location块。
    • 5、location块:配置请求的路由,以及各种页面的处理情况。

    2.配置详解

      1.全局块

    user nobady nobady;
    描述://nginx运行时使用的用户,及用户组,默认是nobady nobady;nobady是linux中一个特殊的用户组,具体细节可以自己百度
    作用://nginx运行时要对一些文件读取,改写。所以必须要使用对这些文件有对应权限的用户,才能完成读写操作
    worker_processes 8;
    描述://设置nginx进程数,默认为1
    作用: //开得越多,处理请求的量越大,但是相应的,占用的内存也会变大,一般一个就够了,可以通过增加链接数来增加并发量。但是如果你的服务器存在大量oi操作,比如gzip压缩。那么你可以适当增加进程数量。但是最好不要超过你的cpu核心数,不然主线程很容易会掉
    
    
    error_log /usr/local/nginx/logs/error.log info; //error_log 
    描述:// 错误日志定义类型,[ debug | info | notice | warn | error | crit ]
    作用://这个并非是全局块专有的配置项,在events、http、server、location中都可以设置,它们之间的区别就是,在全局块中设置,那么此配置将对所有块生效,如果在局部块设置,http,server,location,请注意error_log日志并不能自定义格式
    那么他只生效于当前块,如在全局块中设置,那么在局部块中,没有设置error_log的局部块,所有的日志文件将会都写入到/usr/local/nginx/logs/error.log 中,如果同时设置了全局全和局部块,那么作用范围越精确的优先级越高
    案例://error_log 日志存放地址 日志格式
    access_log /usr/local/nginx/logs/host.access.log combined
    描述:// 访问日志,默认格式为combined,access_log 可以使用自定义的日志格式
    log_format access '$remote_addr - $remote_user [$time_local]
    描述://自定义的日志格式,可以作为access_log第二个参数使用,请注意access_log使用前,需要先定义
    作用: //自定义日志输出那些内容,具体使用方法,常用参数
    pid /usr/local/nginx/logs/nginx.pid;
    描述://指定nginx在linux系统运行时pid的存放目录
    worker_rlimit_nofile 65535; 
    描述: //指定nginx在运行时最多能打开的多少个文件文件,现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。
    这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4 万时就有进程可能超过10240了,这时会返回502错误

       2.events块

    use epoll;
    描述: //nginx使用的事件模型
    拓展://事件模型了解
    worker_connections 65535;
    描述: //单个进程最大连接数(最大连接数=连接数*进程数,根据硬件调整,和前面工作进程配合起来用,尽量大,但是给cpu预留10%的缓冲。每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为。
    keepalive_timeout 60;
    描述://keepalive超时时间,默认是60s,切记这个参数也不能设置过大!否则会导致许多无效的http连接占据着nginx的连接数,终nginx崩溃!
    拓展: //什么是keepalive
    client_header_buffer_size 4k;
    描述://客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。
      //分页大小可以用命令getconf PAGESIZE 取得。
      //[root@web001 ~]# getconf PAGESIZE
      //4096
      //但也有client_header_buffer_size超过4k的情况,但是client_header_buffer_size该值必须设置为“系统分页大小”的整倍数
    open_file_cache max=65535 inactive=60s;
    描述: //这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
    
     
    open_file_cache_valid 60s;
    描述: //这个是指多长时间检查一次缓存的有效信息。语法:open_file_cache_valid time 默认值:open_file_cache_valid 60 使用字段:http, server, location 这个指令指定了何时需要检查open_file_cache中缓存项目的有效信息.
    open_file_cache_min_uses 1;
    描述: //open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。
    语法:open_file_cache_min_uses number 默认值:open_file_cache_min_uses 1使用字段:http, server, location 这个指令指定了在open_file_cache指令无效的参数中一定的时间范围内可以使用的最小文件数,如果使用更大的值
    ,文件描述符在cache中总是打开状态.
    open_file_cache_errors on;
    描述: //open_file_cache_errors on | off 默认值:open_file_cache_errors off使用字段:http, server, location 这个指令指定是否在搜索一个文件是记录cache错误.

      3.http块

    include mime.types;
    描述://文件扩展名与文件类型映射表
    default_type application/octet-stream;
    描述://默认文件类型
    charset utf-8;
    描述://默认编码
    server_names_hash_bucket_size 128;
    描述: //服务器名字的hash表大小保存服务器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,
    使在处理器中加速查找hash表键值成为可能。如果hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。
    因此,如果Nginx给出需要增大hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小.
    client_header_buffer_size 32k;
    描述: //客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
    large_client_header_buffers 4 64k;
    描述: //客户请求头缓冲大小。nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取。
     
    client_max_body_size 8m;
    描述: //设定通过nginx上传文件的大小
    sendfile on;
    描述: //开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
    sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
    autoindex on;
    描述: //开启目录列表访问,合适下载服务器,默认关闭。
    tcp_nopush on;
    描述: //此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用,告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。就是说数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞
    tcp_nodelay on;
    描述: //告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值
    keepalive_timeout 120;
    描述: //长连接超时时间,单位是秒
     
    FastCGI
    fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2
    keys_zone=TEST:10m inactive=5m;
    描述: //FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
    这个指令为FastCGI缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间
    
    fastcgi_connect_timeout 300;
    描述: //指定连接到后端FastCGI的超时时间
    
    fastcgi_send_timeout 300;
    描述: //向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间
    
    fastcgi_read_timeout 300;
    描述: //接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间
    
    fastcgi_buffer_size 64k;
    描述: //指定读取FastCGI应答第一部分 需要用多大的缓冲区,这里可以设置为fastcgi_buffers指令指定的缓冲区大小,上面的指令指定它将使用1个 16k的缓冲区去读取应答的第一部分,即应答头,其实这个应答头一般情况下都很小(不会超过1k),
    但是你如果在fastcgi_buffers指令中指定了缓冲区的大小,那么它也会分配一个fastcgi_buffers指定的缓冲区大小去缓存
    fastcgi_buffers 4 64k; 描述://指定本地需要用多少和多大的缓冲区来 缓冲FastCGI的应答,如上所示,如果一个php脚本所产生的页面大小为256k,则会为其分配16个16k的缓冲区来缓存,如果大于256k,增大 于256k的部分会缓存到fastcgi_temp指定的路径中,
    当然这对服务器负载来说是不明智的方案,因为内存中处理数据速度要快于硬盘,通常这个值 的设置应该选择一个你的站点中的php脚本所产生的页面大小的中间值,比如你的站点大部分脚本所产生的页面大小为 256k就可以把这个值设置为16 16k,或者464k 或者64 4k,
    但很显然,后两种并不是好的设置方法,因为如果产生的页面只有32k,如果用464k它会分配1个64k的缓冲区去缓存,而如果使用64 4k它会分配8个4k的缓冲区去缓存,而如果使用16 16k则它会分配2个16k去缓存页面,这样看起来似乎更加合理•
    fastcgi_buffers 4 64k; 描述: //这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffers的两倍 fastcgi_temp_file_write_size 128k; 描述: //在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍 fastcgi_cache TEST 描述: //开启FastCGI缓存并且为其制定一个名称。个人感觉开启缓存非常有用,可以有效降低CPU负载,并且防止502错误。但是这个缓存会引起很多问题,因为它缓存的是动态页面。具体使用还需根据自己的需求 fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid any 1m; 描述://为指定的应答代码指定缓存时间,如上例中将200,302应答缓存一小时,301应答缓存1天,其他为1分钟 fastcgi_cache_min_uses 1; 描述: //缓存在fastcgi_cache_path指令inactive参数值时间内的最少使用次数,如上例,如果在5分钟内某文件1次也没有被使用,那么这个文件将被移除
    gzip模块设置
    gzip  on;  
    描述:  //开启压缩 
    
    gzip_min_length 2k; 
    描述: //设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于2k的字节数,小于2k可能会越压越大。
    
    gzip_buffers 4 16k; 
    描述: //设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。 
     # 如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。 
    
    gzip_comp_level 5; 
    描述: //压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间 
    
    gzip_types text/plain application/x-
    javascript text/css application/xml;
    描述: 
      默认值: gzip_types text/html (默认不对js/css文件进行压缩) 
     1.压缩类型,匹配MIME类型进行压缩 
     2.不能用通配符 text/* 
     3.(无论是否指定)text/html默认已经压缩  
     4.设置哪压缩种文本文件可参考 conf/mime.types 
    
    gzip_http_version 1.0  
    描述: //值为1.0和1.1 代表是否压缩http协议1.0,选择1.0则1.0和1.1都可以压缩 
    
    gzip_disable "MSIE [1-6]\.";  
    描述: //IE6及以下禁止压缩 
    
    gzip_proxied expired no-cache no-store private auth; 
    描述: //Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含"Via"的 header头。 
    参数:
     1. 默认值:off   
     2.off - 关闭所有的代理结果数据的压缩 
     3.expired - 启用压缩,如果header头中包含 "Expires" 头信息 
     4.no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息 
     5.no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息 
     6.private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息 
     7.no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息 
     8.no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息 
     9.auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息 
     10.any - 无条件启用压缩 
    
    gzip_vary on; 
    描述: //给CDN和代理服务器使用,针对相同url,可以根据头信息返回压缩和非压缩副本 
    
    limit_zone crawler $binary_remote_addr 10m;
    描述: //开启限制IP连接数的时候需要使用

    负载均衡配置

    upstream www.xx.com  {
    1.轮询
    upstream bakend {
         ip_hash;
         server 192.168.0.14 weight=10;
         server 192.168.0.15 weight=10;
        server 192.168.0.16 down;   }; 描述:根据时间顺序分配服务器
    参数: a. weight:表示权重,权重越高,表示被访问的几率越大,0.14服务被访问的几率是50%,0.15是50% b. ip_hash:根据访问ip的hash去分配服务器 作用:如果某个用户在a服务器上登录了,并且a服务器上存储了他的身份信息,那么如果后续访问的请求被分发到了b服务器上,那么就会造成会话信息丢失。通过设置ip_hash的话,就可以让同一个ip地址,一直被分发到同一个服务器,
         这样就避免了会话信息缺失的现象
      c. down:表示当前服务暂时挂起,不参与负载;
      d. backup:表示当前服务作为备用服务,只有其他非backup服务down或者忙了的时候才会参与负载。
      e. max_fails:
    允许请求失败的次数默认为1.当超过最大次数时返回proxy_next_upstream模块定义的错误
      f. fail_timeout:在max_fails失败后,服务挂起时间
     
    2.权重
    upstream bakend {
         ip_hash;
         server 192.168.0.14 weight=30;
         server 192.168.0.15 weight=70;
      };
    描述:根据时间顺序分配服务器
    参数: a. weight:表示权重,权重越高,表示被访问的几率越大,0.14服务被访问的几率是30%,0.15是70%
    3.以服务器响应时间来分配请求,响应时间短的优先(第三方库)
     upstream backend {
        ip_hash;
        server 192.168.0.14;
        server 192.168.0.15;
        fair;
      }
    描述:以服务器的响应时间来分配请求
    注意:server中不能配置weight
    4.按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
     upstream backend {
        ip_hash;
        server 192.168.0.14;
        server 192.168.0.15;
        hash $reqquest_uri;
        hash_method crc32;
      }
    描述:以服务器的响应时间来分配请求
    注意:server中不能配置weight
    参数:
      按访问url的hash结果来分配请求使每个url定向到同一个后端服务器后端服务器为缓存时比较有效
      在upstream中加入hash语句server语句中不能写入weight等其他的参数hash_method是使用的hash算法
    }  

       4.server块

    server    {
      listen 80;
        描述:监听端口号
      server_name www.xxx.com www.yyy.com;
        描述: 监听请求域名 可以设置多个,需要用空格隔开
      root html;
        描述: 根目录,例:客户端请求的地址是http://www.xxx.com/web/index.html;那么映射到nginx所在的服务器上就是html/web/index.html;
        注意: root也可以设置在location中,一旦在server和location中都设置了root,那么优先生效的将会是location中的root
      index index.html index.htm index.php;
        描述:首页,可配置多个首页
       }

      5.location块

    server  {
      location  .*\.(js|css)  { //匹配所有的js和css请求
        描述:location是我们可配置的最小块,它就相当于一个路由,可以细致化的去定义如何处理收到的请求,例:收到js|css请求,收到img该如何处理,我们可以修改其匹配规则,去匹配处理不同的请求。
        
        root html;//资源根目录
        error_log
      }
    }

     注解

      1.日志格式

    1.默认日志格式 combined
      日志内容:// http, server, location, if in location, limit_except
    3.自定义日志格式 a.日志格式参数说明 (1).$remote_addr 与$http_x_forwarded_for //用以记录客户端的ip地址; (2).$remote_user //用来记录客户端用户名称; (3).$time_local //用来记录访问时间与时区; (4).$request //用来记录请求的url与http协议; (5).$status //用来记录请求状态;成功是200, (6).$body_bytes_sent //记录发送给客户端文件主体内容大小; (7).$http_referer //用来记录从那个页面链接访问过来的; (8).$http_user_agent //记录客户端浏览器的相关信息;
      b.案例
    log_format access test '$http_x_forwarded_for-$remote_user-$time_local-$request'  //表明创建一个名为test的日志格式,输出格式为:客户端ip地址-客户端用户名称-访问时间-请求的url与http协议

       2.事件模型

     #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll]; epoll模型
     #是Linux 2.6以上版本内核中的高性能网络I/O模型,linux建议epoll,如果跑在FreeBSD上面,就用kqueue模型。
     #补充说明:
     #与apache相类,nginx针对不同的操作系统,有不同的事件模型
     #A)标准事件模型
     #Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll
     #B)高效事件模型
     #Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
     #Epoll:使用于Linux内核2.6版本及以后的系统。
     #/dev/poll:使用于Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX6.5.15+ 和 Tru64 UNIX 5.1A+。
     #Eventport:使用于Solaris 10。 为了防止出现内核崩溃的问题, 有必要安装安全补丁。
  • 相关阅读:
    ESXi创建磁盘命令
    TNS-12518,TNS-12536,TNS-00506,Linux Error: 11: Resource temporarily unavailable
    监听的instance status blocked分析
    Oracle 用户、对象权限、系统权限
    MIME详解
    11g等待事件之library cache: mutex X
    Latch Free
    PowerDesigner小技巧
    yum本地源配置
    内核参数SEMMSL SEMMNS SEMOPM SEMMNI参数的设置
  • 原文地址:https://www.cnblogs.com/wrhbk/p/14817547.html
Copyright © 2020-2023  润新知