Nginx 优化
本文介绍的最佳 Nginx 配置。再来一次
简要浏览已知参数并添加一些新参数
直接影响 TTFB。
化合物
首先我们需要定义 Nginx 的“worker”数量。
worker_processes Nginx 每个工作流能够处理许多
连接并链接到物理处理器内核。如果你知道的话
您的服务器中有多少核心,您可以指定数量
你自己,或者相信 Nginx:
worker_processes auto;
# Determination of the number of working processes
另外,你必须指定连接数:
worker_connections 1024;
# Quantification of compounds by one working process, ranging from 1024 to 4096
请求
到Web服务器可以处理的最大请求数,它是
必须使用默认关闭的指令 multi_accept :
multi_accept on;
# Workflows will accept all connections
值得注意的是,该功能只有在大
同时请求的数量。如果要求不是很多,它
优化工作流程是有意义的,这样他们就不会在
徒劳的:
accept_mutex on;
# Workflows will take turns Connection
提高 TTFB 和服务器响应时间取决于指令
tcp_nodelay 和 tcp_nopush :
on tcp_nodelay;
tcp_nopush on;
# Activate directives tcp_nodelay and tcp_nopush
如果你不深入细节,这两个函数可以让你
禁用 TCP 的某些在 90 年代相关的功能,
当互联网刚刚获得动力,但没有意义
现代世界。第一个指令一旦发送数据
可用(绕过 Nagle 算法)。第二个允许你
发送标题响应(网页)和文件的开头,
等待填充包(即,包括 TCP_CORK )。所以
浏览器之前可以开始显示网页。
乍一看,功能是矛盾的。因此,
指令 tcp_nopush 应该与 sendfile 一起使用。
在这种情况下,包装在装运前按照指示填充
比 read + the 的方法更快、更优化
写 。包满后Nginx自动禁用
tcp_nopush 和 tcp_nodelay 使套接字发送数据。
启用 sendfile 很简单:
sendfile on;
# Enable more effective, compared to read + write, file sending method
因此所有三个指令的组合减少了
网络并加快文件的发送速度。
缓冲区
另一个重要的优化影响缓冲区的大小 - 如果
它们太小了,Nginx 经常会提到磁盘太大——
将很快填满 RAM。 Nginx 缓冲区为此,您需要
设置四个指令。 Client_body_buffer_size 和
client_header_buffer_size 设置正文的缓冲区大小并读取
客户端请求标头,分别。 client_max_body_size 集
客户端请求的最大大小,以及
large_client_header_buffers 指定最大数量和大小
用于读取大型请求标头的缓冲区。
最佳缓冲区设置如下所示:
10K client_body_buffer_size;
client_header_buffer_size 1k;
of client_max_body_size 8m;
large_client_header_buffers 2 1k;
# 10k buffer size on the body of the request, 1 KB per title, 8MB to the query buffer and 2 to read large headlines
超时和保活
适当配置待机时间和keepalive也可以
显着提高服务器响应能力。
指令client_body_timeout和client_header_timeout设置延时
在正文上并读取请求标头:
client_body_timeout 10;
client_header_timeout 10;
# Set the waiting time in seconds
在客户端没有响应的情况下使用
reset_timedout_connection 你可以指定 Nginx 禁用此类
化合物:
reset_timedout_connection on;
# Disable connections timed-out
指令keepalive_timeout设置停止前的等待时间
connection 和 keepalive_requests 限制了
来自同一客户端的 keepalive-requests:
keepalive_timeout 30;
keepalive_requests 100;
# Set the timeout to 30 and limitations 100 on client requests
好吧 send_timeout 设置传输响应中的等待时间
两次写操作之间:
send_timeout 2;
# Nginx will wait for an answer 2
缓存
启用缓存可显着缩短服务器响应时间。 Nginx 缓存
方法在关于缓存的材料中有更详细的介绍
Nginx,但在这种情况下包含重要的缓存控制。
Nginx 能够发送请求到 redkoizmenyaemyh 缓存数据,
通常在客户端使用。为此,服务器
您要添加一行的部分:
. Location ~ * (jpg | jpeg | png | gif | ico | css | js) $ {expires 365d;}
目标文件格式和持续时间缓存
缓存常用文件的信息也没有什么坏处:
open_file_cache max = 10000 = 20s the inactive;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
# Enables the cache tags 10 000 files in 30 seconds
open_file_cache 指定文件的最大数量
信息被存储,以及存储时间。 open_file_cache_valid
设置您需要检查的相关性的时间
信息,open_file_cache_min_uses 指定最小数量
客户对文件的引用和
open_file_cache_errors 包括缓存故障排除文件。
日志记录
这是另一个会显着降低性能的功能
整个服务器以及相应的响应时间和 TTFB。所以
最好的解决方案是禁用基本日志并存储有关
仅限严重错误:
off the access_log;
the error_log /var/log/nginx/error.log crit;
# Turn off the main logging
Gzip 压缩
Gzip 的用处再怎么夸大也不为过。压缩可以
显着减少流量,缓解通道。但他有一个
缺点 - 需要压缩时间。所以它必须关闭
改善 TTFB 和服务器响应时间。 Gzip 在这个阶段,我们不能
建议关闭 Gzip,因为压缩会提高 Time To Last Byte,即
整个页面加载所需的时间。这在大多数情况下是
更重要的参数。关于 TTFB 和改进服务器响应时间
极大地影响了 HTTP/2 的大规模实施,其中包含
用于报头压缩和多路复用的内置方法。所以在
未来可能会禁用 Gzip 不会像现在这样突出。
PHP 优化:Nginx 中的 FastCGI
所有网站都使用现代服务器技术。以 PHP 为例,它是
优化也很重要。通常,PHP 打开一个文件,验证并
编译代码,然后执行。可以设置这样的文件和进程,
因此 PHP 可以使用 OPcache 缓存 redkoizmenyaemyh 文件的结果
模块。和 Nginx,使用 FastCGI 模块连接 PHP 可以存储
将 PHP 脚本的结果发送给用户。
最重要的
资源优化和网络服务器的正确设置
- 主要影响 TTFB 和服务器响应时间的因素。也不要忘记稳定版本的定期软件更新,这
是为了优化和提高性能。