nginx 配置详解

 

# 使用的用户和组
user  www www;
# 指定工作衍生进程数
worker_processes  2;
# 指定 pid 存放的路径
pid /var/run/nginx.pid;

# [ debug | info | notice | warn | error | crit ] 
# 可以在下方直接使用 [ debug | info | notice | warn | error | crit ]  参数
error_log  /var/log/nginx.error_log  info;

events {
  # 允许的连接数
  connections   2000;
  # use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] ;
  # 具体内容查看 http://wiki.codemongers.com/事件模型
  use kqueue;
}

http {
  include       conf/mime.types;#文件扩展名与类型映射表
  default_type  application/octet-stream;#默认文件类型

  #日志格式设置   log_format main '$remote_addr - $remote_user [$time_local] '               '"$request" $status $bytes_sent '               '"$http_referer" "$http_user_agent" '               '"$gzip_ratio"';   #log_format download '$remote_addr - $remote_user [$time_local] '   #            '"$request" $status $bytes_sent '   #            '"$http_referer" "$http_user_agent" '   #            '"$http_range" "$sent_http_content_range"';
  #limit模块,可防范一定量的DDOS攻击
  #用来存储session会话的状态,如下是为session分配一个名为one的10M的内存存储区,限制了每秒只接受一个ip的一次请求 1r/s
   limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
   limit_conn_zone $binary_remote_addr zone=addr:10m;
  include       mime.types;
  default_type  application/octet-stream;
  
  #第三方模块lua防火墙
  lua_need_request_body on;
   #lua_shared_dict limit 50m;
   lua_package_path "/application/nginx/conf/waf/?.lua";
   init_by_lua_file "/application/nginx/conf/waf/init.lua";
   access_by_lua_file "/application/nginx/conf/waf/access.lua";
  
  #设定请求缓存 
  #请求缓冲区在NGINX请求处理中起着重要作用。 在接收到请求时,NGINX将其写入这些缓冲区。 这些缓冲区中的数据可作为NGINX变量使用,例如$request_body。 如果缓冲区与请求大小相比较小,则数据将写入磁盘上的文件,因此将涉及I/O操作。 NGINX提供了可以改变请求缓冲区的各种指令。
  client_header_buffer_size 512k;#太小了会报400,Request Header Or Cookie Too Large,默认1kb. 定义了正常情况下Nginx接收用户请求中HTTP header部分(包括HTTP行和HTTP头部)时分配的内存buffer大小。有时,请求中的HTTP header部分可能会超过这个大小,这时large_client_header_buffers定义的buffer将会生效。
  large_client_header_buffers 4 512k;#定义了Nginx接收一个超大HTTP头部请求的buffer个数和每个buffer的大小。如果HTTP请求行(如GET/index HTTP/1.1)的大小超过单个buffer,则返回\"Request URI too large\"(414)。请求中一般会有许多header,每一个header的大小也不能超过单个buffer的大小,否则会返回\"Bad request\"(400)。当然,请求行和请求头部的总和也不可以超过buffer个数*buffer大小。
  client_max_body_size 100m;#此指令设置NGINX能处理的最大请求主体大小。 如果请求大于指定的大小,则NGINX发回HTTP 413(Request Entity too large)错误。 如果服务器处理大文件上传,则该指令非常重要。
  client_body_buffer_size 128k;#在接收HTTP包体时,如果包体的大小大于client_body_buffer_size,则会以一个递增的整数命名并存放到client_body_temp_path指定的目录中
  
  #超时设置   client_header_timeout 3m;#指定等待client发送一个请求头的超时时间(例如:GET / HTTP/1.1).仅当在一次read中,没有收到请求头,才会算成超时。如果在超时时间内,client没发送任何东西,nginx返回HTTP状态码408(“Request timed out”)   client_body_timeout 3m;#该指令设置请求体(request body)的读超时时间。仅当在一次readstep中,没有得到请求体,就会设为超时。超时后,nginx返回HTTP状态码408(“Request timed out”)   #send_timeout 3m;#这个超时时间是发送响应的超时时间,即Nginx服务器向客户端发送了数据包,但客户端一直没有去接收这个数据包。如果某个连接超过send_timeout定义的超时时间,那么Nginx将会关闭这个连接。

  #gzip压缩   gzip on;   gzip_min_length 1100;#设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩。建议设置成大于1K。如果小于1K可能会越压越大。   gzip_buffers 4 16k;#压缩缓冲区大小。表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
  gzip_comp_level 9;##压缩比率。用来指定GZIP压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源。
  gzip_types text/plain application/x-javascript text/css application/xml;#用来指定压缩的类型,“text/html”类型总是会被压缩   output_buffers 1 32k;#设置从磁盘读取缓冲区响应的数量和大小。如果可能,客户端数据传输将被延迟,直到 Nginx 汇集到适合的数据大小。   postpone_output 1460;   sendfile on;#设置为on可以启用Linux上的sendfile系统调用来发送文件,它减少了内核态与用户态之间的两次内存复制,这样就会从磁盘中读取文件后直接在内核态发送到网卡设备,提高了发送文件的效率。  
  tcp_nopush on;#对keepalive连接是否使用TCP_NODELAY选项,true的话,会禁用Nagle算法,尽快发送数据,而不论包的大小。   tcp_nodelay on;#激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能   send_lowat 12000;#当设置为非零值时,nginx就会试图减少对客户端socket的发送操作,默认设置为零   keepalive_timeout 75 20;#一个keepalive连接在闲置超过一定时间后(默认的是75秒),服务器和浏览器都会去关闭这个连接。0表示禁用客户端的keep-alive连接   #lingering_time 30;   #lingering_timeout 10;   #reset_timedout_connection on;
  ##FastCGI相关参数:为了改善网站性能:减少资源占用,提高访问速度
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;

   ##-------proxy后端的设置---------##
   proxy_buffering on; #默认是on
   proxy_connect_timeout 10; #控制连接超时,如果连接不上,直接502,Connection refused
   proxy_read_timeout 60; #控制连续两次读取后端响应的超时,如果后端长时间未响应则504,Connection timed out
   proxy_send_timeout 10; #控制连续两次向后端发送请求的超时,一般比较少发生
   proxy_buffer_size 128k; #缓存response的第一部分,通常是header,默认proxy_buffer_size 被设置成 proxy_buffers 里一个buffer 的大小,当然可以设置更小些。
   proxy_buffers 128 128k; #前面一个是num,后面一个是一个buffer的size,因此总共的buffers大小为=128*128k.Nginx将会尽可能的读取后端服务器的数据到buffer,直到proxy_buffers设置的所有buffer们被写满或者数据被读取完(EOF),此时Nginx开始向客户端传输数据,会同时传输这一整串buffer们。如果数据很大的话,Nginx会接收并把他们写入到temp_file里去,大小由proxy_max_temp_file_size 控制。
     proxy_max_temp_file_size 1024m; ##默认情况下proxy_max_temp_file_size值为1024MB,也就是说后端服务器的文件不大于1G都可以缓存到nginx代理硬盘中,如果超过1G,那么文件不缓存,而是直接中转发送给客户端.如果proxy_max_temp_file_size设置为0,表示不使用临时缓存。
     proxy_busy_buffers_size 128k; ##一旦proxy_buffers设置的buffer被写入,直到buffer里面的数据被完整的传输完(传输到客户端),这个buffer将会一直处 在busy状态,我们不能对这个buffer进行任何别的操作。所有处在busy状态的buffer size加起来不能超过proxy_busy_buffers_size,所以proxy_busy_buffers_size是用来控制同时传输到客户端的buffer数量的。
     proxy_temp_file_write_size 128k; ##指定每次写temp file的大小
   proxy_temp_path proxy_temp; ##默认值为/usr/local/openresty/nginx/proxy_temp

  server {
    listen        one.example.com;
    server_name   one.example.com  www.one.example.com;

    access_log   /var/log/nginx.access_log  main;

    location / {
      proxy_pass         http://127.0.0.1/;
      proxy_redirect     off;

      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
      #proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

      client_max_body_size       10m;
      client_body_buffer_size    128k;

      client_body_temp_path      /var/nginx/client_body_temp;

      proxy_connect_timeout      90;
      proxy_send_timeout         90;
      proxy_read_timeout         90;
      proxy_send_lowat           12000;

      proxy_buffer_size          4k;
      proxy_buffers              4 32k;
      proxy_busy_buffers_size    64k;
      proxy_temp_file_write_size 64k;

      proxy_temp_path            /var/nginx/proxy_temp;

      charset  koi8-r;
    }        error_page 404 /404.html;     location /404.html {       root /spool/www;       charset on;       source_charset koi8-r;     }     location /old_stuff/ {       rewrite ^/old_stuff/(.*)$ /new_stuff/$1 permanent;     }     location /download/ {       valid_referers none blocked server_names *.example.com;       if ($invalid_referer) {         #rewrite ^/ http://www.example.com/;         return 403;       }       #rewrite_log on;       # rewrite /download/*/mp3/*.any_ext to /download/*/mp3/*.mp3       rewrite ^/(download/.*)/mp3/(.*)\..*$       /$1/mp3/$2.mp3 break;       root /spool/www;       #autoindex on;       access_log /var/log/nginx-download.access_log download;     }     location ~* ^.+\.(jpg|jpeg|gif)$ {       root /spool/www;       access_log off;       expires 30d;     }   } }

 

posted @ 2019-01-15 15:29  CandyChen  阅读(918)  评论(0)    收藏  举报