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

[经验分享] Nginx(三):nginx.conf配置文件说明 【1】 配置参数说明

[复制链接]

尚未签到

发表于 2018-11-9 09:33:25 | 显示全部楼层 |阅读模式
#nginx的worker进程用哪个用户和组进行登录,如果在编译时指定了,这里是禁用的,而且不会显示  
#你的设置,为了便于识别,在保持禁用的同时你修改为实际用户和组
  
#user  nginx nginx;
  

  
#【和优化有关】
  
#启动几个worker进程,从Nginx1.9.10开始可以使用auto值,进行自动设置
  
#每个worker进程都是单线程进程,所以你叫它进程或者线程都行。这个值最大设置
  
#为系统显示的CPU核心总数-1,当然你超过也行,但是这样就出现CPU的进程切换,影响性能
  
worker_processes  2;
  

  
#【和优化有关】
  
#设定nginx的worker进程工作在哪几个CPU核心上,上面的worker进程数量最好和这里的数量对应
  
#也就是1对1,也可以2对1,2对2,2对4。下面0和1表示CPU掩码,4核心就是4位,2核心就是2位
  
#如果是4核心的话,0001表示第一个核心 0010表示第二个核心,如果你是2核心呢,就用 01 10 来表示
  
#几核心就是几位数,1表示使用,0表示不使用,从Nginx1.9.10可以使用auto值,进行自动设置
  
#你这样绑定只是说明每个CPU只运行一个Nginx进程,但是并不能保证其他进程不会跑到这些CPU核心上去
  
#再说白一点就是你现在了worker进程的范围,但是你没有限制其他进程,如果想限制这些CPU核心不能被其他进程使用
  
#你就只能做CPU隔离,在操作系统启动的时候就隔离出去。但这样对于内核级别的进程比如中断还是可能会跑过去,所以
  
#真正做到严格隔离也可以,就是比较麻烦。
  
worker_cpu_affinity 0100 1000;
  

  

  
#【和优化有关】
  
#用于指定单个worker进程可以打开最大文件描述符数量,每个连接都会打开一个文件,所以对于并发非常大的
  
#场景这个值应该设置的大一点,默认配置文件中没有,但是受限于Linux系统设置,默认是1024个,所以你
  
#可以修改,比如改成10000个。
  
worker_rlimit_nofile 5000;
  

  
#【和优化有关】
  
#worker进程的优先级,指的是系统的nice值,-20到+19.默认是0,nice值越小,优先级越高。
  
worker_priority -10;
  

  
#定义SSL硬件加速器,如果支持HTTPS的话,每一个都创建SSL会话,加密、解密、会话建立和断开等这些对CPU的占用率
  
#非常高,一个服务器可以承载的HTTPS会话大概是HTTP会话的1/5左右。服务器可以安装硬件的SSL会话加速器,那么
  
#你这里就可以指定,这样SSL会话就不会占用CPU资源。这个就跟高端服务器网卡带特殊芯片一样都是为了减轻CPU负担。
  
#ssl_engine device;
  

  
#时间解析度,默认情况下每次内核事件的调用,在返回时都会执行一次gettimeofday(),表示获取一下系统当前时间
  
#也就是自1970年1月1日到现在,而且是微秒级别的。以实现内核时钟来更新Nginx缓存时钟的,
  
#早期Linux系统执行gettimeofday()的代价很大,所以频繁执行则会导致系统性能降低,
  
#这里这个值就是设置多久调用一次gettimeofday(),而不管这段时间内有多少次系统事件调用。不过现在的计算机
  
#在执行gettimeofday()时代价已经很小了,所以可以不用设置。
  
#timer_resolution 100ms;
  

  
# 错误日志路径,这个error_log变量可以设置在任何地方,可以在main主配置文件中
  
#可以在http配置段中,可以在location配置段中,可以在stream配置段中以及server和mail配置段中
  
#这个如果在编译时指定了,那么也是禁用的,而且不会显示具体路径,所以为了便于识别你最好保持禁用
  
#同时把后面的值设置为你实际的路径,后面为日志级别,debug级别必须在编译安装时要--with-debug启用debug功能
  
#它有debug、info、notice、warn、error、crit、alert、emerg,默认级别是error。
  
#error级别包括error、crit、alert、emerg级别的信息。
  
error_log  /var/log/nginx/error.log error;
  
#error_log  logs/error.log  notice;
  
#error_log  logs/error.log  info;
  

  
#PID文件,Nginx进程作为系统的守护进程运行,就需要在某个文件中保存进程的ID号。
  
#路径编译时指定则这里会被禁用,同时不会显示实际路径,为了便于识别在保持禁用的同时你修改为实际路径
  
#pid        /var/run/nginx/nginx.pid;
  

  
#锁文件,这个和events中的accept_mutex有关,如果这个参数是off,那么就不会出现锁文件。这个文件位置
  
#如果在编译安装时指定,则配置文件中就不会出现这个lock_file参数。不过为了便于识别,你可以加上但是
  
#请保持注释状态。
  
#lock_file /var/lock/nginx.lock
  

  
#【和调试有关】
  
#设置Nginx是否工作在单进程模式下,默认为on,通常Nginx工作在一个master进程和N个worker进程模式中
  
#在这种模式下定位问题比较困难,所以可以设置为off,这样让Nginx工作在单进程模式下。也就是不让worker
  
#在后台运行,也就是不让worker进程工作在守护进程模式,而是工作在前台,所有信息都输出到标准输出,也就是
  
#终端。
  
#daemon [on|off];
  

  
#【和调试有关】
  
#是否以一个master和多个worker模式运行,默认为on,正常情况下就是这样。为了调试和追踪问题,可以不启动
  
#master,而只开启一个worker,以方便追踪问题。然后在配合daemon off来让所有信息输出到前台。
  
#master_process [on|off];
  

  
#事件配置段,主要影响Nginx服务器与用户的网络连接。
  
events {
  
    #设置使用事件模型,一般不用设置,因为Nginx会自动选择当前系统中所支持的最有效率的IO模型。
  #select、poll是标准方法大多系统都支持。
  #kqueue:是FreeBSE 4.1+  OpenBSD 2.9+和Mac OS X上用的
  #epool:在Linux 2.6+开始支持
  #/dev/poll:这个和select、poll是同一种机制,在Solaris和HP Unix上select或者poll被称作/dev/poll
  
    #use [epoll|rtsig|select|poll|kqueue|/dev/poll]
  
    #一个worker可以接受多个请求,如果一下来了几百个请求,是否允许一个worker全接受。
  #如果该参数被设为OFF,那么一个worker process进程一次只接收一个请求,如果是ON,则一次接收所有请求
  #设置为on显然就快的多,如果是off,则还需要master进程额外调度。默认是off。
  
    multi_accept on;
  #是否打开负载均衡锁,一个master进程,多个worker进程,由master调度请求给worker,一个请求进来该分配给哪个worker呢?所以这个就
  #是实现多个worker进程负载均衡的,on为开启这个功能。但是做负载均衡调度是有开销的,主进程进行调度,CPU上下文切换,所以关闭虽然会导致
  #worker的负载不均衡,但是减少不必要的开销,反而会更快。此功能默认是OFF的。如果是OFF,也就关闭负载均衡,那么一个新请求进来时
  #所有的工作进程都会收到通知,如果连接数量小于工作进程数量时,则会出现资源争抢(惊群概念,抢的是互斥锁,持有锁的进程可以处理请求)。
  #如果设置为ON由于使用负载均衡所以就不会出现锁文件;如果设置为OFF,也就不均衡,则会出现锁,
  #那锁文件和worker接受请求有什么关系?锁文件只有一个,worker进程有多个
  #当前哪一个worker持有锁文件,那么哪一个worker就可以接收用户请求。所以关闭这个功能就不会有锁,那么任何
  #worker进程都可以接受请求,这样master才能针对worker进程做负载均衡。
  #所以这个参数设置为OFF时,都会把multi_accetp设置为on,避免争抢过度,尽量让一个工作进程接收请求,那么当一个worker所接受的连接数
  #达到其设置的最大值的7/8时,master进程就尽可能的把后续请求分配给其他worker进程。
  accept_mutex off;
  #因为只有一个锁,所以其他worker进程持有这个锁的时候,其他worker进程如果也想要这个锁,那么它就要等待
  #那么它最大等待多久呢?就是这个参数设定的。单位为毫秒。也就是说锁被别的worker进程持有,其他的worker
  #请求锁失败后,间隔多少毫秒可以发起第二次请求。默认500ms,不过如果accept_mutex是off,那就没有必要设置
  #这个参数了。
  #accept_mutex_delay NNms
  #设置每个worker进程最大连接数,一个连接就是一个socket套接字,一个套接字请求就需要打开一个文件,
  #如果Nginx作为web服务器,worker_rlimit_nofile要大于等于worker_connections,因为Nginx自己也要打开一些文件。
  #如果Nginx作为代理服务器,worker_rlimit_nofile要是worker_connections的2倍,原因是Nginx作为代理的时候
  #面向请求是一个套接字,面向后端应用服务器也是一个套接字,所以一个请求在Nginx上要使用2个套接字,所以
  #worker_rlimit_nofile要是worker_connections的2倍
  #你修改了这个值可能会收到一个错误信息就是open file resource limit:1024,虽然查看cat /proc/sys/fs/file-max看到
  #的值比较大,但是这个是针对系统来说的,系统可以打开最多的fd数量,默认的进程最大打开文件数还是1024,ulimit -n来查看。
  #你调高了系统的并不代表改变了进程可以打开的个数。修改方法可以在/etc/rc.local脚本,加上ulimit -n NUMBER来让系统启动后就
  #使用这个值。或者修改/etc/secrity/limits.conf,增加 noproc和nofile的值。如果不想修改系统,你就修改Nginx的worker_rlimit_nofile。
  
    worker_connections  4096;
  
}
  

  

  

  
#http配置段,用于定义web服务的一些重要属性,代理、缓存、日志以及其他HTTP有关的特性等。
  
http {
  
    #包含外部文件路径
  #include sites/.*  表示包含当前路径下的sites目录中的所有文件。
  
    include       mime.types;
  
    default_type  application/octet-stream;
  

  #定义日志格式,main是一个日志格式名称,后面都是服务器端变量组成的
  
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  
    #                  '$status $body_bytes_sent "$http_referer" '
  
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
  log_format detaile    '[$time_local] [$http_x_forwarded_for] [$http_x_via]'
  
                          '[$http_x_hm_trace_id] [$cookie_x_hm_tuid] [$http_x_hm_tuid] [$sent_http_x_damai_lk] [nginx] [$host] '
  
                          '[$server_addr] [$request_method] [$http_referer] [http://$host$uri] [$args] [$status] '
  
                          '[$body_bytes_sent] [$request_time] [$upstream_addr] [$upstream_status] [$upstream_response_time] '
  
                          '[$http_user_agent] [$http_rule_name]';
  #以下为主要变量说明
  # $http_x_forwarded_for:保存的就是X-Forwarded-For信息
  # $host:客户端请求的Host头域值
  # $server_add:服务器IP地址
  # $request_method:请求方法
  # $http_referer:表示从哪个链接跳转过来
  # $status:服务器响应代码
  # $request_time:从接受用户请求的第一个字节到发送完响应数据的实际,包括接受请求数据的实际、程序响应时间、输出数据时间
  # $upstream_add:后端被代理服务器的地址
  # $upstream_response_time:表示Nginx向被代理服务器建立连接开始到接收完数据然后断开连接的时间,这个时间肯定比$request_time的时间短
  

  #这个访问日志如果在编译时指定则这里会被禁用,同时不会显示实际路径,为了便于识别
  #在保持禁用的同时你修改为实际路径。这个访问日志格式使用的是上面定义的main格式。
  
    access_log  /var/log/nginx/access.log  detaile;
  #下面这个加了一个 buffer 参数,含义是日志先同步到缓存中,这样提升性能,避免每产生
  #一条日志都立即写入磁盘文件。
  #access_log /var/log/nginx/access.log  main buffer=32k
  

  #是否启用sendfile功能
  
    sendfile        on;
  #只有在sendfile启用时,改参数启用才生效
  #该参数可以定义在http{}段中,也可以定义在server{}段中、location{}段中
  
    #tcp_nopush     on;
  #是否启用AIO机制,默认是OFF,在Linux 2.6.22内核及后续版本才支持。
  #该参数可以定义在http{}段中,也可以定义在server{}段中、location{}段中
  #aio on|off
  

  
    #保持长连接的时长默认为75秒,指定客户端连接保持活动的超时时间,超过这个时间服务器就自动断开连接
  #这个选项有2个值 keepalive_timeout ARG1 ARG2;第二参数是可选项,其指定使用keep-alive消息头保持活动连接的有效时间
  #如果不设置第二个参数那么Nginx不会向客户端某些浏览器(如火狐)发送keep-alive消息头以保持活动连接,
  #超时之后客户端就自动断开连接。该参数可以定义在http{}段中,也可以定义在server{}段中、location{}段中
  
    keepalive_timeout  75;
  #一次长连接允许发起的最大请求数量,用户与服务器建立连接后,通过此连接可以发起的最多多少次请求
  #该参数可以定义在http{}段中,也可以定义在server{}段中、location{}段中
  keepalive_request 100;
  #对某些老版本的浏览器不使用长连接,none表示对老版本浏览器不做禁用 msie6 表示对微软的IE6禁用长连接
  #该参数可以定义在http{}段中,也可以定义在server{}段中、location{}段中
  #keepalive_disable [msie6|safari|none]
  

  #对keepalive连接是否使用TCP_NODELAY选项,因为TCP传输数据接收端没接收到一个报文都会发确认信息
  #这个确认信息很小,这个信息大小通常比tcp一个段还小,所以在一个TCP段中,没有被填充的就用0代替,
  #这样其实是比较浪费的,所以为了提升TCP性能,通常会采用延迟确认,也就是几个确认信息打包一起发送
  #如果你开启了keepalive那么就压禁用tcp_nodelay,因为一旦开启,浏览器请求
  #的内容发送到服务器,服务器不马上确认,那么浏览器就会以为资源找不到。
  #该功能是TCP不延迟确认,ON为启用,OFF是不启用。默认是启用,也就是不延迟确认。
  #该参数可以定义在http{}段中,也可以定义在server{}段中、location{}段中
  tcp_nodelay on
  #客户端请求首部超时时间,定义服务器读取客户端请求首部的最长时间,如果在段时间内
  #客户端无法完成发送完整的客户端请求首部信息,则返回给客户端408超时错误信息。默认60秒。
  #该参数可以定义在http{}段中,也可以定义在server{}段中。
  client_header_timeout 60s;
  #读取HTTP请求的包体的超时时长,道理和上面一样。默认也是60秒
  #该参数可以定义在http{}段中,也可以定义在server{}段中。
  client_body_timeout 60s;
  #发送响应超时时长,服务器端要发送响应数据给客户端,客户端不接收或者因某种原因客户端没有收到,那么服务端最多等多久
  #这个不是说整个响应的传输时长。这个超时时间生效条件是在客户端和服务器成功建立连接之后,
  #这个参数可以设置在在http{}段中、server{}段中以及location {}段中
  send_timeout 60s;
  #设置读取客户端请求头的缓冲区大小,通常来说1K就够用,但是如果客户端请求中包含一个比较大的cookies或者是来自WAP客户端,
  #那么1K就不够了,这是可能收到Nginx 400的错误,而且不是每次都收到,所以排查困难。一般这个大小都是系统分页的倍数。可用
  #getconf PAGESIZE来获取。
  client_header_buffer_size 4k;
  #设置允许的客户端最大请求包体大小,客户端发一个特别大的请求,服务器拒绝。默认1M。
  #这个参数可以设置在http{}段中、server{}段中以及location {}段中。
  #在允许用户上传时的场景下,设置这个很有用。用户上传时它的body首部中的Content-length就会
  #有上传的这个包的大小。
  client_max_body_size 1m;
  #限制客户端每秒上传的字节数量,就是为了避免把服务器带宽都占用了。默认0,无限制。
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中以及if in location中
  limit_rate 0;
  #nginx向客户端发送响应报文时,如果超出了设定的时长,那么就开始限速,这里限制的是
  #客户端的下载速率,这个速率是从limit_rate中获取的。所以这里不需要指定,只需要指定
  #超时时间就可以,默认是0,也就是没有时长限制。
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中以及if in location中
  limit_rate_after 0;
  #是否开启gzip功能,也就是在服务器响应客户端是是否把响应数据进行压缩,默认为off
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中
  
    gzip  on;
  #gzip实现压缩的时候使用缓冲的大小,第一个参数是缓存空间个数,第二个是缓存大小。默认情况下
  #size大小为一个内存页,4K或者8K,取决不同平台。
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中
  gzip_buffers 32 4k;
  #压缩级别,默认为1,表示压缩程度最低,压缩率高。9表示压缩程度最高,压缩率最低,也最浪费时间。
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中
  gzip_comp_level 1;
  #对哪种浏览器不压缩,因为有些不支持。
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中
  gzip_disable msie6;
  #对哪些格式内容使用压缩,默认为text/html,但实际上你开启压缩功能,Nginx会对所有text/html页面进行压缩。
  gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript
  #用于设置在使用压缩功能时,是否发送带有Vary:Accept-Econding头的响应信息。该参数主要是告诉数据接收方,数据经过了压缩
  #开启效果是客户端接收的响应头部中增加了 Accept-Ecoding:gzip的信息。
  gzip_vary on;
  #内容长度大于多少字节时才压缩,默认20。因为对于数据量大压缩才明显,小数据压缩不明显而且还消耗资源。也就是
  #当响应页面大于该值时才启用压缩。响应页面大小可以通过HTTP响应头中的Content-Length指令获取。不过由于ngx_http_gzip_module
  #通常使用Chunked动态编码压缩,所以Conten-Length或不存在或者被忽略,该指令不起作用。
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中
  gzip_min_length 20;
  #因为早期的浏览器不支持HTTP客户端不支持压缩,因此用户会看到乱码,可以针对不同HTTP协议版本选择性开启
  #默认是针对http 1.1协议开启。也就是只有客户端使用http 1.1及以上版本的才进行压缩。这个是针对客户端使用
  #的HTTP协议版本做选择性开启的。上面的gzip_disable是针对客户端。
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中
  gzip_http_version 1.1
  #当开启是,如果客户端浏览器不支持压缩,那么Nginx将返回解压后的数据;如果支持压缩将忽略此选项。
  gunzip_static on;
  #开启压缩功能的一些问题:很多WEB服务器都支持压缩比如IIS、Tomcat、Apache等。如果前端Nginx也开启了压缩,就相当于数据经过了
  #2层压缩,比如如果Nginx和Tomcat都开启对JavaScript脚本进行压缩的话,在很多浏览器都会出现脚本运行异常的情况,只有在chrome
  #浏览器正常。表现的现象是首次运行正常,再次刷新就304.你把其中一台服务器的压缩功能关闭就可以了。
  #是否打开文件缓存功能,它缓存的是文件描述符、大小、修改时间、目录结构以及查找文件时的错误,比如文件没有找到
  #如果要开启的话 open_file_cache max=N [inactive=time],设置一个最大缓存条目,如果满了则根据LNU算法进行置换,
  #以及每个缓存元素的活动时长,默认60秒,也就是说在指定时间内没有被访问过,就会被从缓存中移除。
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中
  open_file_cache off;
  #设置是否缓存在文件查找是出现的文件查找错误信息。这些错误信息是因为启用了open_file_cache功能才会有的
  #默认是OFF则表示不缓存错误信息,这个参数可以设置在在http{}段中、server{}段中、location {}段中
  #该参数要在open_file_cache on时才有意义
  open_file_cache_errors off;
  #设置多久检测一次缓存内容的是否有效,默认60秒,该参数要在open_file_cache on时才有意义
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中
  open_file_cache_valid 60s;
  #在非活动时长内,一个缓存条目被访问的次数超过这里定义的次数,那么这个条目即便超过了非活动时长
  #也不会被删除。这个非活动时长就是open_file_cache max=N inactive=60s;中定义的。
  open_file_cache_min_use 1;
  #控制如果客户端请求首部是一个无效信息,服务器是否忽略。默认是on,就是忽略。
  ignore_invalid_headers on;
  #当用户访问一个文件,如果该文件不存在,是否把这个信息记录到错误日志中。默认是开启。on。
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中
  log_not_found on;
  #设置Nginx使用的DNS服务器地址,默认使用本机网络中设置的
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中
  #resolver 127.0.0.1
  #设置DNS解析超时时长,默认是30秒。
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中
  #resolver_time 30s;
  #是否在错误页面中显示Nginx版本号,默认是显示的,也就是ON
  
    #这个参数可以设置在在http{}段中、server{}段中、location {}段中
  server_tokens off;
  #用于更改Nginx服务接收到的客户端请求的头信息,然后将新的请求头发送后端被代理服务器,
  #下面的含义是把请求发送给后端时,该请求的头中的Host,设置为客户端原始请求时的Host头
  proxy_set_header Host $host;
  #用客户端请求时的location返回响应头信息
  proxy_redirect default;
  #
  proxy_set_header X-Real-IP $remote_addr;
  #Nginx与后端被代理服务器尝试建立连接的超时时间,默认为60秒
  proxy_connect_timeout 600;
  #Nginx向后端被代理服务器发送read请求后,等待响应的超时时间,默认60秒
  
    proxy_read_timeout 600;
  #Nginx向后端被代理服务器发送write请求后,等待响应的超时时间,默认60秒
  
    proxy_send_timeout 600;
  #用于配置存放HTTP报文头的哈希表容量,默认为512个字符。一般都设置为1024,这个大小是哈希表的总大小,
  #并不是设定了这个参数Nginx就会一次全部申请出来。需要用的时候才会申请,但是当真正需要使用的时候也不是一次全部申请,
  #而是会设置一个单次申请最大值,就是后面的参数。
  proxy_headers_hash_max_size 1024;
  #用于设置Nginx服务器申请存放HTTP报文头的哈希表容量的单位大小,默认为64个字符。一般配置为128。
  #这个大小是单次申请最多申请多大,也就是每次用需要申请,但是每次申请最大申请多少,整个哈希表大小不可超过上面设置的值。
  proxy_headers_hash_bucket_size 128;
  #用于开启cache功能,同时给cache起一个名字。cache功能默认是关闭的。开启之后Nginx会检查被代理服务器响应数据HTTP头中的
  #Cache_Control、Expirex头域信息。当Cache_Control被设置为no-cache、no-store、private或者max-age=0时并且Expires包含一个
  #过期时间时,Nginx不会缓存这些数据。这个通常定义在某个location中,表示对特定location的开启缓存。
  proxy_cache mycache;
  #开启Cache功能后,客户端请求Nginx代理服务器先从本地Cache中查询,如果想忽略哪些数据不从缓存中查找,就可以设置这个参数。
  proxy_cache_bypass $cookie_nocache;
  #是否开启缓存锁功能。某些数据项可以同时被多个请求返回的响应数据填充。开启之后,Nginx服务器同时只能有一个请求填充缓存中
  #的某一项数据,不允许其他请求操作。其他请求如果也想填充就必须等到锁释放,可以这样理解就是多个客户端请求一个缓存中不存在
  #的内容,因为请求都要先去缓存中查找,没有才会去后端服务器,所以多个客户端同时请求一个内容,但是发现缓存缓存中没有,
  #如果开启这个参数,那么这些请求中只有第一个请求被允许发往后端服务器,当它得到返回结果后,缓存中这时候就有内容了,
  #然后Nginx用这个内容响应给其他请求。如果不启用的话,那么Nginx就会把请求相同内容的多个请求都代理到后端。
  proxy_cache_lock on;
  #设置上面那个锁定时长,默认5秒。
  proxy_cache_lock_time 5s;
  #设置用户请求相同内容达到多少次Nginx才缓存,默认是1次。
  proxy_cache_min_uses 2;
  #设置缓存路径和缓存策略。第一个参数是路径、第二个是缓存目录为几级,一般为2级、第三个参数是定义一个共享内存区用于存储键和元数据
  #检索键从内存中查找并定义内存大小,1M内存可以缓存8000个键、第四个参数是缓存数据的磁盘空间最大可使用多少、最后一个是定义非活动
  #时长,在该时长内一个数据没有被访问则进行删除而无论数据是否过期。
  proxy_cache_path /var/temp/nginx/ levels=1:2 key_zone=mycache:10m max_size=1g inactive=60m;
  #关闭把数据写入缓存前写入其他临时目录,关闭后则写入同一目录。建议关闭。
  use_temp_path off;
  

  #该指令设置后端服务器指令,NAME为自定义名称,默认是轮询方式调度,如果某个服务器出现错误,请求将会依次交给组内
  #下一个服务器进行处理,直到返回正常响应,如果都失败了,就返回最后一个服务器的响应。HTTP 404不算请求失败。
  #通常这些都配置在单独的文件中,通过include指令引入到主配置文件中。upstream只能配置在http段中。
  upstream UPSTREAM_NAME {
  #下面三种都是调度方式,默认不配置任何调度方式的话则为轮询,
  #ip_hash表示同一IP的调度到同一服务器,如果有此参数,则wight失效。不能一起使用。
  ip_hash;
  #最少连接负载算法,在考虑权重的同时也考虑后端哪个服务器当前连接最少,最少的优先,如果这样的服务器有多台,则按加权轮询,选择权重最大的
  least_conn;
  #按URL的哈希值来分配,相同的分配到同一服务器,如果有此参数,则wight失效。不能一起使用。
  url_hash;
  server IP:[PORT] weight=NUMBER max_fails=NMBER fail_timeout=NUMBER;
  #后端服务器2台,IP地址为50.1和50.2,权重均为10,如果30s内连续请求3次失败,则该服务器在之后的30秒内被认为是无效
  #也就是down状态。
  server 192.168.50.1 wight=10 max_fails=3 fail_timeout=30s;
  server 192.168.50.2 wight=10 max_fails=3 fail_timeout=30s;
  #max_fails=number:表示请求失败次数,在一定时间内(由fail_timeout指定),请求失败几次则该服务器被认定为无效。
  #fail_timeout=time:除了上面那个作用以为,还有一个作用就是,如果服务被认定无效,则无效时间为多久,在这个时长内则不进行检查。
  #backup:标记该服务器为备用服务器,其他服务器正常是被标记为backup的服务器不做请求处理,只有其他都失效或者繁忙时才会分配到这里
  #down:标记该服务器为永久失效
  #resolve:
  #route=string:设置路由名称
  #service=name:设置SRV记录名称
  }
  #用于自行设定健康标准,该参数与health_check配合使用,在health_check中指定
  match MATCH_NAME {
  #status 、header这些都是设定测试标准的,如果设置了多条,那么只有全部满足才算健康
  #表示状态码是什么
  status 200;
  status ! 500;
  status 200 204;
  status ! 301 302;
  status 301-303 307;
  #表示响应头中的字段包含什么值
  header Content-Type = text/html;
  header Connection ~ close;
  header Host;
  #表示响应body中包含什么内容
  body ~ "Welcome to nginx";
  body !~ "maintenance mode";
  }
  #虚拟主机配置,Nginx中没有Apache那种中心主机概念,它所有的主机都是虚拟主机,如果是多站点
  
    #我们通常会把主配置文件中的server {}全部注释,把虚拟主机单独建立配置文件,里面只需要包含
  #server {}段即可,然后在主配置文件中引用。至于所有虚拟主机共享的配置,就放在主配置文件的
  #http{}段中定义。如果要单独为某个虚拟主机设置,那么你就写在server}{}中。
  
    server {
  #监听端口 格式 IP:PORT PORT *:PORT,另外端口后面还可以加一些其他参数
  #default_server,定义此server为http中的默认server
  #ssl,表示建立连接的时候必须使用ssl,这个一般定义在443上
  #http2 ,表示支持http2
  #rcvbuf=size sndbuf=sized  接收和发送缓冲大小
  #backlog=num 设置监听函数listen()允许多少连接处于挂起状态也就是SYN队列有多大,FreeBSD默认为-1,其他为511
  #listen 80 default_server rcvbuf=1024 sndbuf=1024
  #reuseport 允许多个套接字监听在同一IP+PORT上,内核能够在这些套接字中对连接请求进行负载均衡。原有的模式是一个套接字连接请求
  #所有工作进程进行争抢锁(当accept_mutex off时),也就是多个工作进程都盯着这一个套接字,当使用reuseport时,每个工作进程都盯着
  #属于自己的套接字,这样就减少了争抢锁,然后系统内核决定把连接请求分配给哪个工作进程。设置了该项,accept_mutex会无效。
  
        listen       80;
  #主机名称,后面可以配置多个主机名
  #server_name www.a.com www.b.com www.c.com 那么多个名称如何匹配呢?首先取出请求首部信息,然后进行
  #精确匹配,匹配到了就响应。支持使用通配符和正则表达式。比如 *.a.com  www.a.* 但是通配符只能用在
  #三或者两段字符串组成的域名的首部或者尾部。
  
        server_name  localhost;
  #这里的root和location中的root是一个意思,就是去哪里找资源。但是如果定义在http段中,
  #那么这个root对所有location都是有效,也就是会继承。但是通常都会定义在location中。
  #root html;
  #为了实现快速主机名查找,Nginx使用HASH来保存主机名,这里就是定义HASH表的大小
  #server_names_hash_bucket_size 32|64|128;
  

  
        #charset koi8-r;
  

  
        #access_log  logs/host.access.log  main;
  

  #定义location段。
  #location后面写的匹配规则,而{}里面写的是匹配后怎么办。
  # = 表示精确匹配,用于匹配标准URI,也就是不带正则的URI换句话说URI是以正常字符出现;^~ 非精确匹配,用户匹配标准URI,也就是不带正则的URI
  # ~ 表示匹配带正则的URI,但是区分大小写; ~* 表示匹配带正则的URI,但是不区分大小写。
  # = 大于 没有修饰符的 大于 ^~ 大于 ~ 或 ~*
  
        location / {
  #匹配location之后,去本地哪里找请求资源,默认是/usr/nginx/html/
  #root /var/html; 你自己也可以指定路径而不用默认的。但是你要知道 / 符号表示的是
  #root所指定的路径, / 符号后面的路径你还需在 root所定义的路径下面再建立。
  
            root   html;
  #定义主页文件名称
  
            index  index.html index.htm;
  #是否允许目录形式显示,默认是OFF为不允许。除非你是一个可以让下载的网址。
  #这个参数可以设置在在http{}段中、server{}段中、location {}段中
  autoindex off;
  #在一个location内用于限定客户端可以使用的HTTP方法,get、head是安全方法通常不做限制,但是对于其他的
  #比如PUT、POST、DELETE等都是危险方法,通常只允许特定主机使用这些方法访问服务器。
  #下面的意思是说除了GET、POST方法其他都拒绝,但是来自192.168.154.0网段的可以使用任何方法,换句话说
  #就是除了来自192.168.154.0网段的请求可以使用任何HTTP方法之外,其他网络只能使用GET POST 方法
  limit_except GET POST {
  #访问控制,由于默认是允许,所以你设置白名单的时候,最后一定要加deny all; 它子上而下进行匹配
  #allow deny 可以用在location{}段中,server{}段中,limit_except GET POST{}段中。
  allow 192.168.154.0/24;
  deny all;
  }
  
        }
  location /aaa {
  #针对match配置段中的服务器组做健康检查,如果不加参数在均保持默认值,该功能只能设置在location中
  health_check [可选参数];
  health_check match=MATCH_NAME;
  # interval=time 表示2次健康检查之间的时间间隔,默认5秒
  # jitter=time   表示
  # fails=number  表示检查几次失败,则标记该服务器为不健康的,默认1次
  # uri=uri   表示定义健康检查的uri,默认为/
  # passes=number 表示几次检查成功后,则标记该服务器为健康的,默认为1次
  # match=name   表示设置用哪个标准来确定服务器健康与否,默认为状态码2xx或3xx,这个NAME是标准名称,为match段定义的名字。
  # port=number  表示健康检查时用哪个端口去检查后端服务器的健康状态,默认和server里的端口相同
  #代理到UPSTREAM_NAME中所定义的后端服务器上
  proxy_pass http://UPSTREAM_NAME;
  #X-Real-Ip和X-Forwarded-For没有具体含义,实际上叫什么名字都是行
  #获取用户真实IP放到X-Real-IP变量中,传递给被代理服务器
  proxy_set_header X-Real-IP $remote_addr;
  #再设置一次X-Forwarded-For头,让后端被代理服务器可以获取这个头域信息。
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
  location ^~ /documents/ {
  #配置根,访问http://www.a.com/documents 对应实际磁盘路径为/web/documents
  root /web/;
  #一次查找,如果都找不到就使用最后定义的uri来响应用户,$uri表示用户请求的任何内容
  #/404.html表示最后的uri,这个必须存在。
  try_files $uri /documents/bbb.html /404.html
  }
  location ^~ /book/ {
  root /web;
  #所有请求/book/任意内容并且以.doc .docx .pdf 的都重定向到/libary下面,一般在location中
  #使用rewrite会使用break作为标识符,避免死循环,另外还可以写在IF字句中。
  rewrite ^/book/(.*\.(doc|docx|pdf))$ /libary/$1 break;
  #访问/book/下面的任何内容都重定向到/libary/下面
  rewrite ^/book/(.*)$ /libary/$1 break;
  #这个的意思其实可以上面的意义,但是不同的是它没有具体匹配什么东西,只要是/结尾就重定向
  #这个一般用在反向代理比较多,或者用在 location / {} 里面,比如80强制443访问。
  #rewrite ^/.*$ http://www.a.com
  #是否把重写内容写入错误日志,默认为notice级别,默认是OFF
  #在很繁忙的服务器不建议打开,拍错的时候可以。
  rewrite_log on;
  #给这个location配置一个错误日志输出文件,于此location有关的错误日志都输出到这里
  #因为上面开启了 rewrite_log 所以重定向的也会到这里,但日志级别需要是notice才可以。如果
  #是error则不会记录,因为重定向这种事件本身就达不到error这个级别,所以不会记录。
  error_log /var/log/nginx/error1.log notice;
  }
  location ^~ /images/ {
  #配置别名,访问http://www.a.com/images/ 对应实际磁盘路径为/web
  alias /web/;
  }
  

  
        error_page  404  /404.html;
  location = /404.html {
  root /web/error_page;
  }
  

  
        # redirect server error pages to the static page /50x.html
  
        #重定向错误页面用的,这里定义错误代码 以及定向为那个页面
  
        error_page   500 502 503 504  /50x.html;
  #定义错误代码页面资源存放位置,精确匹配/50x.html
  
        location = /50x.html {
  
            root   html;
  
        }
  

  #启用状态页面
  location /status {
  stub_status;
  #对状态页的访问不记录到
  access_log off;
  }
  
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  
        #
  
        #location ~ \.php$ {
  
        #    proxy_pass   http://127.0.0.1;
  
        #}
  

  
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  
        #
  #表示定义处理任何以.php结尾的请求
  
        location ~ \.php$ {
  #这里这个root是你实际php页面或者程序存放的目录,如果你的Nginx和PHP-FPM不在一台服务器上
  #那这里的root就是你PHP-FPM服务器上存放php文件的目录。如果Nginx和PHP-FPM在一台服务器上
  #这里的root也是你PHP页面存放目录,这里只是让你概念上有个明确的区分。
  
            root           /srv/phpScripts;
  #后端PHP-FPM服务器地址和端口
  
            fastcgi_pass   127.0.0.1:9000;
  #启用或禁用响应缓冲区,默认为on
  fastcgi_buffering on;
  #定义用Nginx用多大的缓冲区来接收FastCGI的应答头,也就是响应的第一部分,这部分通常包含很小的头信息
  #,默认情况下这个大小等于一个内存页,4K或者8K,取决不同平台,当然也可以设置的更小一点。
  #可以配置在http、server、location段中
  fastcgi_buffer_size 4K;
  #这个和上面的有区别,这里有数量和大小。这个是设置从FastCGI来的应答,本地用多少和多大缓冲区读取。
  #这样可以处理大部分请求,比较的请求将被缓冲到磁盘。fastCGI_buffer=fastcgi_buffer_size+number*size
  fastcgi_buffers 8 4k;
  #定义一个共享内存区域用于做缓存。相同区域可以分布在不同的地方。参数值可以包含变量。
  #默认为off。可以配置在http、server、location段中,这里只定义缓存名称,没有定义大小。
  fastcgi_cache zone1;
  #定义缓存关键字,针对这些关键字进行缓存,关键字也可以包含变量。默认为none.
  fastcig_cache_key none;
  #定义缓存路径(磁盘),levels设置的是缓存目录的目录分级和子目录数量。keys_zone的值是
  #fastcgi_cache定义的共享内存,用于存放所有活动的关键字以及数据。这里10m表示共享内存大小
  #为10M。非活动数据是指10分钟内没有用到的。这个时间可以设置 inactive=time
  fastcgi_cache_path /data/nginx/cache levels=1:2 keys_zone=zone1:10m;
  #设置用户请求的URL请求几次才被缓存,默认为1次
  fastcgi_cache_min_uses 1;
  #设置建立与fastcgi的连接时的超时时间默认60秒,最大不能设置超过75秒。
  fastcgi_connect_timeout
  #这里是定义默认fastcig的默认主页,也就是自动在用户请求的路径后面添加index.php,这个值将
  #存储在变量$fastcgi_script_name中
  
            fastcgi_index  index.php;
  #这里是脚本文件请求的路径,$document_root则表示用户请求的uri。
  #SCRIPT_FILENAME这是参数,后面的是值,参数可以被PHP所读取。所以fastcgi_parm就是为了
  #给PHP内置的这些参数传递变量的。
  
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  #请求参数
  fastcgi_param  QUERY_STRING    $query_string;
  #请求头中的方法
  
            fastcgi_param  REQUEST_METHOD  $request_method;
  #请求头中的Content-Type字段
  
            fastcgi_param  CONTENT_TYPE    $content_type;
  #请求头中的Content-length字段
  
            fastcgi_param  CONTENT_LENGTH  $content_length;
  #客户端IP
  fastcgi_param  REMOTE_ADDR     $remote_addr;
  #客户端端口
  
            fastcgi_param  REMOTE_PORT     $remote_port;
  
            #服务器IP地址
  
            fastcgi_param  SERVER_ADDR     $server_addr;
  #服务器端口
  
            fastcgi_param  SERVER_PORT     $server_port;
  
            #服务器名,域名在server配置中指定的server_name
  
            fastcgi_param  SERVER_NAME     $server_name;
  
            include        fastcgi_params;
  
        }
  

  
        # deny access to .htaccess files, if Apache's document root
  
        # concurs with nginx's one
  
        #
  
        #location ~ /\.ht {
  
        #    deny  all;
  
        #}
  
    }
  

  

  
    # another virtual host using mix of IP-, name-, and port-based configuration
  
    #
  
    #server {
  
    #    listen       8000;
  
    #    listen       somename:8080;
  
    #    server_name  somename  alias  another.alias;
  

  
    #    location / {
  
    #        root   html;
  
    #        index  index.html index.htm;
  
    #    }
  
    #}
  

  

  
    # HTTPS server
  
    #
  
    #server {
  
    #    listen       443 ssl;
  
    #    server_name  localhost;
  
    #    SSL证书
  
    #    ssl_certificate      cert.pem;
  #    SSL证书的私钥
  
    #    ssl_certificate_key  cert.key;
  

  
    #    ssl_session_cache    shared:SSL:1m;
  #    支持什么协议,下面这些也都是默认支持的
  #    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  #    SSL超时时间,如果服务器性能比较好可以把时间调整长一点。但是也要看具体应用
  #因为SSL建立和释放更消耗资源,可以评估一下,是频繁的建立和断开更消耗资源,还是长一点
  #的超时时间更消耗。通常也要看具体场景,如果用户打开网站通常都是需要浏览一会儿,比如购物网站
  #那么超时时间建议设置长一点,但是付款环节通常都是比较快速,通常这个页面没有长时间浏览的必要,
  #另外为了安全考虑这个阶段的超时时间要短一点。
  
    #    ssl_session_timeout  5m;
  

  #    加密选项
  
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
  #    是否允许服务器来挑选使用什么加密
  
    #    ssl_prefer_server_ciphers  on;
  

  
    #    location / {
  
    #        root   html;
  
    #        index  index.html index.htm;
  
    #    }
  
    #}
  

  
}



运维网声明 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.iyunv.com/thread-632676-1-1.html 上篇帖子: nginx1.15安装(一) 下篇帖子: nginx+lua+image实现上传图片裁剪和加水印
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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