nginx 配置调优参数 参考
语法: sendfile on | off;
默认值: sendfile off;
上下文: http,server,location,if in location
}
指定是否使用sendfile系统调用来传输文件。
sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝。
参考文章:https://www.jianshu.com/p/70e1c396c320
Syntax: tcp_nopush on | off;
Default: tcp_nopush off;
Context: http, server, location
TCP_NOPUSH 是 FreeBSD 的一个 socket 选项,对应 Linux 的 TCP_CORK,Nginx 里统一用 tcp_nopush 来控制它,并且只有在启用了 sendfile 之后才生效。启用它之后,数据包会累计到一定大小之后才会发送,减小了额外开销,提高网络效率。
Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context: http, server, location
TCP_NODELAY 也是一个 socket 选项,启用后会禁用 Nagle 算法,尽快发送数据,某些情况下可以节约 200ms(Nagle 算法原理是:在发出去的数据还未被确认之前,新生成的小数据先存起来,凑满一个 MSS 或者等到收到确认后再发送)。Nginx 只会针对处于 keep-alive 状态的 TCP 连接才会启用 tcp_nodelay。当连接转换为keep-alive状态时,启用该选项。此外,它在SSL连接上启用,用于无缓冲代理和WebSocket代理。
可以看到 TCP_NOPUSH 是要等数据包累积到一定大小才发送,TCP_NODELAY 是要尽快发送,二者相互矛盾。实际上,它们确实可以一起用,最终的效果是先填满包,再尽快发送。
官方文档参考:http://nginx.org/en/docs/http/ngx_http_core_module.html#tcp_nodelay
Syntax: keepalive_timeout timeout [header_timeout];
Default: keepalive_timeout 75s;
Context: http, server, location
第一个参数设置一个超时,在这个超时期间,保持活动的客户端连接将在服务器端保持打开。0值禁用保持连接的客户端连接。第二个可选参数在Keep-Alive: timeout=time响应报头字段中设置一个值。两个参数可能不同。Keep-Alive: timeout=time报头字段被Mozilla和Konqueror识别。MSIE会在大约60秒内自行关闭保持连接。
keepalive_timeout 60;
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 256k;
fastcgi_intercept_errors on;
fastcgi模块参数
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
开启gzip压缩
server_tokens off;
启用或禁用在错误页面和服务器响应报头字段中发出nginx版本。build参数(1.11.10)允许随nginx版本一起发出build名称。此外,作为我们商业订阅的一部分,从版本1.9.13开始,错误页面上的签名和服务器响应头字段值可以使用变量字符串显式设置。空字符串禁止发送Server字段。
map $http_x_forwarded_for $clientRealIp {
"" $remote_addr;
~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr;
}
过CDN,获取真实客户端IP,$clientRealIp
====
其它待补充