nginx配置详解

Posted fanshehu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx配置详解相关的知识,希望对你有一定的参考价值。

环境: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类型,不根据mime.types文件来。作用域为 location

    在下载请求时,服务器响应的文件,不需要被浏览器展示和播放,设置MIME类型为application/octet-stream

4. 客户端相关配置

  client_max_body_size 10m; #客户端请求服务器时发送的请求主体最大值。该配置项作用域http,server,location

  值为0,则不受限制

  client_header_buffer_size;

  large_client_header_buffers 4 64k; #设定请求缓

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

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. 设置超时时间
  (1)客户端请求头超时时间
    client_header_timeout
  (2)客户端请求体超时时间
    client_body_timeout
  (3)lingering_timeout
  (4)resolver_timeout  #设置DNS解析超时时间
  (5)proxy_connect_timeout
  (6)proxy_read_timeout
      proxy_send_timeout
      proxy_upstream_fail_timeout(fail_timeout)
  (7)fail_timeout和max_fails
  (8)send_timeout  #向客户端发送响应报文的超时时长
  (9)keepalive_timeout 65;  #一次http连接持续最长时间,默认75s
  (10)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. 请求数目配置
  keepalive_requests 120;  #一次http连接中,服务器接收请求的最大次数,超过则关闭连接
 
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. 端口设置
  
keepalive_disable
 
 
 
 

以上是关于nginx配置详解的主要内容,如果未能解决你的问题,请参考以下文章

nginx配置文件详解

Nginx 核心配置详解

Nginx配置文件详解

nginx配置文件详解

Nginx详解

Nginx配置文件(nginx.conf)配置详解