如何优化 Nginx 配置
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
Nginx
Nginx 是一个快速且轻量级的替代品,有时会比 Apache 2 更为繁重。然而,就像任何服务器或软件一样,Nginx 也必须进行调优以实现最佳性能。
要求
-
完成初始设置的全新 Debian 7 droplet。
-
droplet 上必须安装并配置好运行的 Nginx 服务器。可以尝试 Debian LEMP Stack 教程,或者更基础一些的 Debian Nginx Server Blocks 教程。
-
对 Linux 基础知识有很好的理解。
Worker 进程和 Worker 连接
我们需要调整的第一个两个变量是 worker 进程和 worker 连接。在我们深入了解每个设置之前,我们需要了解每个指令控制的内容。worker_processes 指令是 Nginx 的坚实支柱。该指令负责让我们的虚拟服务器知道一旦绑定到适当的 IP 和端口后需要生成多少个 worker。通常的做法是每个核心运行 1 个 worker 进程。超过这个数量不会伤害系统,但通常会留下一些空闲的进程。
要确定需要将 worker_processes 设置为多少,只需查看您的设置中有多少个核心。如果您使用的是 DigitalOcean 512MB 设置,那么可能是一个核心。如果您最终快速调整到更大的设置,则需要再次检查您的核心并相应调整此数字。我们可以通过查找 cpuinfo 来实现:
grep processor /proc/cpuinfo | wc -l
假设返回值为 1。那么这就是我们机器上的核心数!
worker_connections
指令告诉我们的 worker 进程 Nginx 可以同时为多少人提供服务。默认值为 768;然而,考虑到每个浏览器通常会打开至少 2 个连接/服务器,这个数字可以减半。这就是为什么我们需要将我们的 worker 连接调整到最大潜力。我们可以通过发出 ulimit 命令来检查我们核心的限制:
ulimit -n
在较小的机器上(512MB droplet),这个数字可能会读取 1024,这是一个很好的起始数字。
让我们更新我们的配置:
sudo nano /etc/nginx/nginx.conf
worker_processes 1;
worker_connections 1024;
请记住,可以为客户端提供服务的客户端数量可以乘以核心数量。在这种情况下,我们可以每秒为 1024 个客户端提供服务。然而,这还会受到 keepalive_timeout
指令的进一步调节。
缓冲区
我们可以进行的另一个非常重要的调整是缓冲区大小。如果缓冲区大小太低,那么 Nginx 将不得不写入临时文件,导致磁盘不断读写。在做出任何决定之前,我们需要了解一些指令。
client_body_buffer_size
:这处理客户端缓冲区大小,意味着发送到 Nginx 的任何 POST 操作。POST 操作通常是表单提交。
client_header_buffer_size
:类似于前一个指令,只是它处理客户端标头大小。在所有情况下,1K 通常是一个不错的大小。
client_max_body_size
:客户端请求的最大允许大小。如果超过最大大小,那么 Nginx 将会返回 413 错误或 请求实体太大。
large_client_header_buffers
:大客户端标头的最大缓冲区数和大小。
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;
超时
超时也可以极大地提高性能。
client_body_timeout
和 client_header_timeout
指令负责服务器等待客户端发送请求后的客户端主体或客户端标头的时间。如果没有发送主体或标头,服务器将返回 408 错误或 请求超时。
keepalive_timeout
为客户端分配保持活动连接的超时时间。简单地说,Nginx 将在此时间后关闭与客户端的连接。
最后,send_timeout
不是在整个答案传输上建立的,而是在两次读取操作之间;如果在此时间后客户端什么也没收到,那么 Nginx 将关闭连接。
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
Gzip 压缩
Gzip 可以帮助减少 Nginx 处理的网络传输量。然而,要小心将 gzip_comp_level
设置得太高,因为服务器将开始浪费 CPU 周期。
gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/x-javascript text/xml text/css application/xml;
静态文件缓存
可以为那些不经常更改且经常提供服务的文件设置过期标头。该指令可以添加到实际的 Nginx 服务器块中。
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
根据您的 Nginx 服务器的文件类型,添加或删除上述数组中的任何文件类型以匹配。
日志记录
Nginx 将每个请求记录到日志文件中。如果您使用分析工具来监视此日志,可能希望关闭此功能。只需编辑 access_log
指令:
access_log off;
保存并关闭文件,然后运行:
sudo service nginx restart
结论
归根结底,一个正确配置的服务器是需要监控并相应地进行调整的。以上变量都不是固定的,需要根据每个独特的情况进行调整。甚至在更长远的未来,您可能会希望通过负载平衡和水平扩展的研究来进一步提高机器性能。这些只是一个优秀系统管理员可以为服务器做出的许多增强之一。