环境: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 步骤如下:
- 调用read函数,文件数据拷贝到内核缓冲区
- read函数返回,数据从内核缓冲区拷贝到用户缓冲区
- 调用write/send函数,将数据从用户缓冲区拷贝到内核socket缓冲区
- 数据从内核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配置详解
原文:https://www.cnblogs.com/fanshehu/p/11846092.html