Nginx配置文件详解

说明

之前工作中总结的配置文件详解,对个人建站,集群搭建有帮助。

配置说明

//定义一个用户以及对应的组

user admin admin 

//定义nginx worker 进程的数量,设置为auto,就是默认和CPU个数一致

work_processess  auto     

//与上面的指令协同工作。他可以让你的worker进程影响CPU内核,数字序列和work进程一样多

work_cpu_affinity auto    


//nginx错误日志,有debug,warn, error等五个等级

error_log  /home/admin/web/logs/error.log warn  

//用于存放nginx守护进程的PID文件路径, 里面记录了主进程的pid号

pid  /home/admin/nginx/logs/nginx-search.pid; 

//定义每个work进程的内核文件大小

worker_rlimit_core  1024M

 //定义一个worker进程可以同时处理的文件数量

worker_rlimit_nofile 100000 


 //与events模块一起提供的指令可以用来配置网络机制,指令参数对nginx性能产生影响

events{                    

    //定义一个worker进程能够同时连接的数量

     worker_connectins 10240; 

     use epoll;  

  }
//该区段嵌入配置文件的根部,在该区段允许定义指令和嵌入HTTP相关模块

http{
      //隐藏nginx的版本号, 出现400 500 页面时候不会显示nginx服务器的版本号,避免漏洞

       server_token off;  

      //文件包含指令; mime.type文件里面保存了nginx的MIME类型; 里面其实也是一个types{...}

        include mime.type

      // 该指令允许你在MIME类型和文件扩展名之间建立联系, 可以补充mime.type文件没有对应关系

       types{ 

             application/x-compress  .Z;  
             application/x-gzip      .gz .tgz;

             application/x-httpd-php .php .html;

         }

        //定义默认的MIME类型,如果文件扩展名与mime.type中类型都不匹配,就将该值写进content-type

      default_type text/plain;

       //如果该指令被启用,Nginx将使用sendFile 内核来调用文件传递。如果禁用,那么nginx将自己处理文件传递

      sendfile            on;  

      //该选项只用于sendfile已启动的情况。若为on, 那么nginx将尝试单个TCP数据包中发送整个HTTP响应头

       tcp_nopush       on; 

 

       //keep-alive能够使客户端到服务器的链接在一定时间内持续有效,在这个时间内,客户端对服务器的访问不需要再次建立链接

      keepalive_timeout 0; 

       client_header_timeout   30s; 

       //指定持有客户端请求主体的缓存大小,如果超过这个大小,那么主体将被写到磁盘

       client_body_buffer_size 32k; 


      /**gzip是一种压缩技术。经过gzip压缩后页面大小可以变为原来的30%甚至更小**/

       //开启gzip模块  off为关闭

          gzip                    on;   

        //识别http的协议版本

        gzip_http_version       1.0;  

        //gzip压缩比,1压缩比最小,9压缩比最大,相应的速度也会变慢

        gzip_comp_level         6; 

       // 设置允许压缩的页面最小字节数,默认为0,页面多大都压缩

        gzip_min_length         1024; 

       //启用或者禁用gzip压缩,针对代理服务器上接收到的相应体

        gzip_proxied            any;  

      //有的浏览器支持压缩,有的不支持,为了避免浪费,根据HTTP头来判断是否需要压缩

        gzip_vary               on;

       gzip_disable            msie6; //???

       //设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流

        gzip_buffers            64 8k; 

        //匹配mime类型进行压缩,无论是否制定“text/html”类型总会被压缩

        gzip_types              text/xml text/plain text/css application/javascript application/x-              javascript application/rss+xml;  


        //定义文档的根目录,该目录包含你希望为访问者提供的内容

        root   /home/admin/web/htdocs; 

        //定义一个默认的页面,如果请求中没有指定文件名,nginx就会使用该页面提供服务。

         index    index.html index.php index.htm; 

 

          //proxy_set_header nginx作为反向代理服务器,将请求转发给后端真实服务器,如果不行host的重写,所有的真是服务器都会误认为是nginx服务器发送的请求。 proxy_set_header就是用于将客户端真实的host, ip信息,传送给后端服务器。 http://www.ithov.com/linux/109626_3.shtml

       proxy_set_header        Host $host;

         //在这里X-Real-IP是一个自定义的变量名,名字可以随意取,在web端可以用request.getAttribute("X-Real-IP")  获取IP  
      proxy_set_header        X-Real-IP $remote_addr;

      proxy_set_header        Web-Server-Type nginx;  

        // 如果需要修改从被代理服务器传来的应答头中的”Location”和”Refresh”字段,可以用指令设置。  

      proxy_redirect          off;   
      proxy_buffers           128 8k;  
      proxy_intercept_errors  on;

 

      //开启或者禁用404没有找到HTTP错误。例如,如果日志中充满了404错误,却由于   robots.txt文件,那么你可以将这个选项关闭掉;

      log_not_found       off;

     

      // 用于定义发生制定的错误代码时候,使用errror_page来定义服务器的行为。最简单的形式是使用一个错误代码改变URI

     error_page  403 404 405   http://www.taobao.com/home/error.php;

      error_page    500 501 502   http://www.taobao.com/home/error2.php;

      expires_by_types modified +3y image/gif image/jpeg image/jpg text/css application/x-shockwave-flash;    

       //限制被定义的zone的请求总数,$binary_remote_addr用于区分客户端, rate表示每秒的请求数(r/s)或者每分钟请求数(r/m)
       limit_req_zone      $binary_remote_addr     zone=one:100m   rate=5r/s;


      #virtual servers 

      server{

          //指定用于提供web服务站点监听的套接字所使用的IIP和端口  

          listen  80;  

          //在server区段指定一个或者多个主机名(hostname),  Nginx接收到HTTP请求以后,会与所有server区段相比较,然后找到与客户端请求header中Host匹配的server区段。如果没有与客户端匹配的server区段,nginx会选择第一个server区段。该指令接受通配符  

          server_name wenda.taobao.com q.etao.com wenda.etao.com;

 

          // 定义一个日志模板用于描述访问日志中一条包含的内容,该模板由access_log指令使用  

          log_format   eformat      '     remoteaddr r e m o t e a d d r request_time_usec     remoteuser[ r e m o t e u s e r [ time_local] '      '"requestmethodhttp://   r e q u e s t m e t h o d h t t p : / / hostrequesturi"   r e q u e s t u r i " status $body_bytes_sent '  

 '" httpreferer"" h t t p r e f e r e r "" http_user_agent"';

          //该指令定了访问日志文件的路径

          access_log          "pipe: /opt/taobao/install/cronolog/sbin/cronolog /home/admin/web/logs/search/%Y/%m/%d/access-%Y-%m-%d_%H.log" eformat;  
 

          //定义文档的根目录,该目录包含你希望为访问者提供的内容  

          root                /home/admin/web/htdocs/;   

           //limit_req_one 同上,burst定义了最大可能的突发请求, 在一定程度上,burst定义的值就是只能同时接受最大数量的请求值  

          limit_req zone=one burst=5 nodelay; 

 

           //set_by_lua指令支持通过一小段用户Lua代码来计算出一个结果,然后复制给Nginx 变量,和set指令相似

           //Lua代码中,通过ngx.var.VARIABLE来读取Nginx的变量; 下面的一段代码是用于修复comons-fileupload-1.0版本的漏洞

           set_by_lua     invalid_ct 'local ct = ngx.var.http_content_type  if ct and #ct >= 2049 then return 1 else return 0 end';            if (   invalid_ct 'local ct = ngx.var.http_content_type  if ct and #ct >= 2049 then return 1 else return 0 end';            if ( invalid_ct = '1') { return 400; }

 

                //根据host 进行跳转的判断  

             if ($host = 'q.etao.com'){

                  //该指令允许你对当前请求的URI 进行重写,因此对客户端的请求会被重新设置

                  //格式为  rewrite  regexp replacement 【flag】 ;;  flag 包含:last, break,redirect, permanent

                  // regexp 是URI正则表达式,他的目的是匹配后面的replacement  

                  //permanent 返回301 重定向响应,被替代的URI作为location头的值(浏览器显示跳转之后URL地址)

                 rewrite ^/(.*)    http://wenda.taobao.com/ h t t p : / / w e n d a . t a o b a o . c o m / 1 permanent;  
          }

 

          location ~ .(do|htm|vhtml|service|jhtml)$ {

                      //在配置proxy_pass的时候需要注意:http://dmouse.iteye.com/blog/1880474

                      //符合location 样式跳转地址; 这个指令设置被代理服务器的地址和被映射的URI,地址可以使用主机名或IP加端口号的形式。

                               proxy_pass   http://127.0.0.1:8000;

                       //拒绝访问的IP字段

             deny 113.59.*.*; 
             }}

你可能感兴趣的:(Linux,nginx,网络,linux)