环境:centos7  nginx1.16.1

以下配置均在配置文件中进行:/etc/nginx/nginx.conf

1.设置工作进程的所有者和所属组

  user  所有者  所属组;  

  设置后要在操作系统中设置该用户和用户组

  /usr/sbin/groupadd  www    /usr/sbin/useradd -g www www

2. 网络连接事件模型设置 

  event{

accept_mutex on;    #设置网路连接序列化,防止惊群现象发生,默认为on

multi_accept on;    #设置一个进程是否同时接受多个网络连接,默认为off

worker_connections  1024;    #每个工作进程的最大连接数,默认为512

       use epoll;     #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];

  }

3. 服务器返回文件的MIME类型设置

  include  mime.types;  #引入的mime.types文件用来帮助http协议判断网页文件的MIME类型,该项作用域 http  server

    mime.types文件:文件扩展名与文件类型映射表  服务器根据mime.types文件,由网页文件扩展名得到其MIME类型,并加在响应头中发送给浏览器

  default_type  application/octet-stream  #当文件类型未定义时,默认返回的MIME类型。作用域为 location  http

    注意:图片,音频,视频等文件要在html文件才能被浏览器展示和播放,但如果不设置default_type  application/octet-stream 这一项,服务器直接返回MIME类型为

    image/jpeg ,audio/mp4...的响应头,浏览器不会有任何动作,设置此类文件为二进制流后,浏览器接受到该响应头,会产生一个下载窗口,从而在客户端获取服务器文件

    设置MIME类型为application/octet-stream(二进制流文件,浏览器打开会出现下载)

4. 客户端相关配置

  client_max_body_size 10m; #客户端请求服务器时发送的请求主体最大容量。该配置项作用域http,server,location 。值为0,则不受限制

  client_header_buffer_size 32k; #用于指定来自客户端请求头缓冲区大小,对于大多数请求,1KB的缓冲区大小已经足够,如果自定义了消息头或有更大的cookie,可以增加缓冲区大小。

  large_client_header_buffers 4 64k; #设置客户端请求头的缓冲区的最大数目和大小。请求行不能超过一个缓冲区的大小,请求头字段也不能超过一个缓冲区的大小。缓冲区仅按需分配。

  默认情况下,缓冲区大小等于8K字节。如果在请求处理结束后,连接转换为keep alive状态,则释放这些缓冲区。

  client_body_temp_path  filename [level1] [level2 ] [lever3 ];  #设定服务器用于存储客户端请求报body部分的临时存储路径及子目录结构和数量

    level1:一级目录个数,1表示目录数不超过1位16进制数,故最大值为16

    level2:二级目录个数,2表示目录数不超过2位16进制数,故最大值为16*16=256

    level3:三级目录个数

  client_body_buffer_size  32k;  #设定服务器用于接收每个客户端请求报文的body部分的缓冲区大小;默认为16k;

5. 文件传输方式设置

  sendfile  on;  #以sendfile方式传输文件,默认开启。作用域:http  location  server

    指定是否使用sendfile系统调用来传输文件。sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),

    从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝。

    传统文件传输方式:read,write/send 步骤如下: 

    1. 调用read函数,文件数据拷贝到内核缓冲区
    2. read函数返回,数据从内核缓冲区拷贝到用户缓冲区
    3. 调用write/send函数,将数据从用户缓冲区拷贝到内核socket缓冲区
    4. 数据从内核socket缓冲区拷贝到协议引擎中

      在这个过程当中,文件数据实际上是经过了四次拷贝操作:
      硬盘—>内核缓冲区—>用户缓冲区—>内核socket缓冲区—>协议引擎

    sendfile传输方式:

      1. sendfile系统调用利用DMA引擎将文件数据拷贝到内核缓冲区,之后数据被拷贝到内核socket缓冲区中

      2. DMA引擎将数据从内核socket缓冲区拷贝到协议引擎中

      硬盘—>内核缓冲区—>内核socket缓冲区—>协议引擎

  sendfile_max_chunk 100k;  #每个进程调用sendfile传输数据的最大值
6. 设置超时
  a.  nginx与客户端的超时设置
  (1)客户端请求头超时时间
    client_header_timeout  60s; #一次TCP连接中,nginx服务器接收到客户端一个完整请求头的最长时间,超过则断开tcp连接,并返回408
  (2)客户端请求体超时时间
    client_body_timeout  60s;  #一次TCP连接中,nginx服务器接收到客户端一个完整请求体的最长时间,超过则断开tcp连接,并返回408
  (3)send_timeout  60s;     #一次TCP连接中,2次向客户端发送响应报文的间隔最大时间,超过这个时间则断开TCP连接
  b.  nginx与代理服务器的超时设置
   proxy_connect_timeout 65s;  #默认60s,不能超过75秒,发起握手到等候响应的时间(建立请求的时间)

   proxy_read_timeout  60s;  #建立tcp连接后,等候服务器响应的时间(处理请求的时间),大于这个时间则断开连接
   proxy_send_timeout 60s;  #upstream服务器从开始响应到响应结束的时间,大于这个时间则断开连接
   server  主机地址  [fail_timeout=30]  [max_fails=1]; #可选项不写则默认 10s  1, 作用域upstream
   在fail_timeout时间内,某个server连接失败了max_fails次,则认为这个主机不工作了,并在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server
  c.其它超时设置
  (1)设置延迟关闭连接时间
    lingering_timeout  5s;  #默认值5s,作用域 http serverr location。在关闭连接前,会检测是否有用户发送的数据到达服务器,
    如果超过lingering_timeout时间后还没有数据可读,就直接关闭连接;否则,必须在读取完连接缓冲区上的数据并丢弃掉后才会关闭连接。
  (2)设置DNS解析超时时间
    resolver_timeout  5s;    #默认值30s
  (3)设置长连接的时间
    keepalive_timeout 65s;    #一个http请求完成之后,保持TCP连接的时长,默认75s
  (4)504 Gateway Time-out     
      一般看来, 这种情况可能是由于nginx默认的fastcgi进程响应的缓冲区太小造成的, 这将导致fastcgi进程被挂起, 如果你的fastcgi服务对这个挂起处理的不好,
    那么最后就极有可能导致504 Gateway Time-out。现在的网站, 尤其某些论坛有大量的回复和很多内容的, 一个页面甚至有几百K默认的fastcgi进程响应的缓冲区是8K,
    我们可以设置大点在nginx.conf里, 加入:fastcgi_buffers 8 128k 这表示设置fastcgi缓冲区为8×128k,当然如果您在进行某一项即时的操作, 可能需要nginx的超时参数调大点,
    例如设置成60秒: send_timeout 60;
   (  
7. 长连接配置
  (1)一次长连接的请求数
  keepalive_requests 60;  #一次tcp连接中,服务器接收请求的最大次数,超过则关闭连接
  (2)浏览器长连接设置
  keepalive_disable none | 浏览器名; #对哪种浏览器禁用长连接,none表示所有浏览器都开启
    Mozilla--火狐  Opera--欧鹏 MSIE--IE浏览器
8. 错误页配置
  error_page 404 [200]  https://www.baidu.com;  #发生404错误时显示的页面。作用域server  location http 
  可选参数为发生错误时,返回给客户端的状态码,防止返回404后页面被劫持
  
9. 引入配置文件
  include 文件名;  #引入额外配置文件到主配置文件。作用域 http
  
10. TCP相关设置
  tcp_nodelay  on | off;  #请求是否延迟发送。作用域http server  location
  当为off时,延迟发送,合并多个请求后再发送,凑齐多个请求后在发送给后台处理,但是这个情况可能会导致客户端等待,会比较慢,所以一般是不延迟发送,默认on时,不延迟发送
  tcp_nopush on;     #防止网络阻塞
 
11. 监听端口设置
  listen address[:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [ssl] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];    #监听的主机及端口,不写端口默认80,网络数据都是通过该监听的端口传输

   address   监听的主机,即web服务主机

   default_server  该虚拟主机设定为默认虚拟主机

   ssl    限制仅能够通过ssl连接提供服务,即只能以https访问

   backlog=number   超过并发连接数后,新请求进入后援队列的长度

   rcvbuf=size      接收缓冲区大小

   sndbuf=size           发送缓冲区大小

 
12. 响应报文的设置
  server_tokens  on | off | build | string;  #是否在响应报文的首部显示nginx版本,默认是on,建议设置为off,隐藏版本号
 
13. 
 
 
 

最新文章

  1. Android Weekly Notes Issue #233
  2. 域名解析与多域名绑定多个Tomcat项目
  3. Apple Watch PSD 源文件【免费素材下载】
  4. (转载)让XCode运行时自动更新资源
  5. IIS负载均衡-Application Request Route详解第一篇: ARR介绍(转载)
  6. 数组名的含义.xml
  7. 和阿文一起学H5——H5工具、素材
  8. C#语法糖之第三篇: 匿名类 & 匿名方法
  9. Solr4.8.0源码分析(15) 之 SolrCloud索引深入(2)
  10. Makefile学习(二)条件判断和内嵌函数
  11. select语句后面加上for update的作用
  12. MySQL之字符串函数
  13. 20151211--EL表达式语言
  14. BZOJ 1106: [POI2007]立方体大作战tet
  15. c++/cmake /Android NDK 动态链接库交叉编译笔记
  16. Codeforces Round #331 (Div. 2) _A. Wilbur and Swimming Pool
  17. Blue Path(基于cocos2dx 3.0)
  18. mapbox.gl文字标注算法基本介绍
  19. HDOJ 5639 Transform
  20. MD1——2 Corner

热门文章

  1. jupyterlab数据处理
  2. JavaScript插件开发
  3. python总结七
  4. git 学习网站
  5. 在GitHub中创建目录
  6. putty常用配置修改
  7. Flutter 宽高比(比率)控件 AspectRatio
  8. teacher笔记
  9. 关于暗网需要关闭JS的处理
  10. ELK学习笔记之Kibana权限控制和集群监控