杭州自助建站模板,口碑营销策略和技巧,漂流瓶说自己是做网站的,美橙表业手表网站文章目录 1. sendfile 指令2. tcp_nopush 指令3. tcp_nodelay 指令 1. sendfile 指令
请求静态资源的过程#xff1a;客户端通过网络接口向服务端发送请求#xff0c;操作系统将这些客户端的请求传递给服务器端应用程序#xff0c;服务器端应用程序会处理这些请求#xff… 文章目录 1. sendfile 指令2. tcp_nopush 指令3. tcp_nodelay 指令 1. sendfile 指令
请求静态资源的过程客户端通过网络接口向服务端发送请求操作系统将这些客户端的请求传递给服务器端应用程序服务器端应用程序会处理这些请求请求处理完成以后操作系统还需要将处理得到的结果通过网络适配器传递回去。 sendfile 指令是用于将文件内容发送到客户端的指令。它可以让 Nginx 直接将文件内容发送给客户端而不需要将文件内容先读入内存再发送。这样可以减少 CPU 和内存的使用提高文件传输的效率。
sendfile 指令的语法如下
sendfile on | off;默认情况下sendfile 指令是启用的。如果您想禁用它可以将其设置为off。请注意sendfile指令只适用于静态文件对于动态生成的内容仍然需要将其读入内存并通过Nginx发送。
2. tcp_nopush 指令
tcp_nopush 指令必须在 sendfile 打开的状态下才会生效主要是用来提升网络包的传输效率。
① 语法tcp_nopush on | off;
② 默认值tcp_nopush off;
③ 作用控制是否启用TCP的TCP_CORK选项对应Linux内核选项该选项用于延迟发送TCP数据包直到缓冲区填满或者达到一定的时间阈值。当tcp_nopush设置为on时表示启用TCP_CORK选项Nginx会等待缓冲区填满后再发送数据包以减少网络传输的次数提高效率。当tcp_nopush设置为off时表示禁用TCP_CORK选项Nginx会立即发送数据包适用于实时性要求较高的场景。
总结当 tcp_nopush 设置为on时Nginx 会将数据缓存起来直到缓存区满或者达到一定的时间后再发送。这样可以减少发送的次数提高传输效率。
3. tcp_nodelay 指令
tcp_nodelay 指令必须在keep-alive连接开启的情况下才生效来提高网络包传输的实时性。
① 语法tcp_nodelay on | off;
② 默认值tcp_nodelay on;
③ 作用控制是否启用TCP的TCP_NODELAY选项对应Linux内核选项该选项用于禁用Nagle算法即禁止TCP延迟发送小数据包。当tcp_nodelay设置为on时表示启用TCP_NODELAY选项Nginx会立即发送小数据包适用于实时性要求较高的场景。当tcp_nodelay设置为off时表示禁用TCP_NODELAY选项Nginx会等待一定时间或者缓冲区填满后再发送数据包以减少网络传输的次数提高效率。
总结当 tcp_nodelay 设置为on时 Nginx 会立即发送数据而不管数据量的大小。这样可以减少延迟提高传输效率。
tcp_nopush 和 tcp_nodelay 看起来是互斥的那么为什么要将这两个值都打开
三个指令都开启的好处是sendfile可以开启高效的文件传输模式tcp_nopush开启可以确保在发送到客户端之前数据包已经充分“填满” 这大大减少了网络开销并加快了文件发送的速度。 然后当它到达最后一个可能因为没有“填满”而暂停的数据包时Nginx会忽略tcp_nopush参数 然后 tcp_nodelay 强制套接字发送数据。由此可知TCP_NOPUSH可以与TCP_NODELAY一起设置它比单独配置TCP_NODELAY具有更强的性能。
所以我们可以使用如下配置来优化Nginx静态资源的处理
[root192 conf]# cat nginx.conf
worker_processes 1;
events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;sendfile on;tcp_nopush on;tcp_nodelay on;server {listen 8080;server_name localhost;}
}