阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx性能优化指南

166次阅读
没有评论

共计 3899 个字符,预计需要花费 10 分钟才能阅读完成。

Nginx 性能优化指南

Nginx 是世界知名的高性能 Web 服务器和负载均衡器,本 Nginx 性能优化指南旨在帮助大家快速进行 Nginx 服务器性能优化,以便快速向用户交付网站内容。

配置 Worker

最简单的优化便是修改 Worker 和配置连接数。

Worker 进程

如果你在同一台服务器上运行 Nginx 和数据库,而且网站流量较少的话,可以在 nginx.conf 配置文件中设置 worker_processes 1;

如果你网站流量较大或 Nginx 作为单服务器运行,便可以为每 CPU 核心分配 Worker,worker_processes auto;

如果你不想自动配置而要手动设置的话,可以使用如下命令查看 CPU 核心数并更改 worker_processes 数量。

  1. grep ^processor /proc/cpuinfo | wc l

Worker 连接数

worker_connections 设置可以配置每 Worker 进程在同一时间的最大连接数。默认情况下,Worker 连接数被限制为 512,但事实上系统可以处理更多在连接。

Worker 连接数设置为多少其实可以通过查看系统核心的限制找到,只需使用如下命令即可:

  1. ulimit n

我们还可以设置使用 use epoll 机制,该选项为 I/O 事件通知机制可确保最大化的 I/O 利用能力。

最后,我们可以使用 multi_accept 让 Worker 能够在同一时间接受所有新的连接。

以上事件机制配置好之后 /etc/nginx/nginx.conf 配置文件类似如下:

  1. events {
  2. worker_connections 66536;
  3. use epoll;
  4. multi_accept on;
  5. }

HTTP 和 TCP 优化

Keep Alive

Keep Alive 可以实现客户端浏览器较少的重连:

  • keepalive_timeoutkeepalive_requests 控制 keep alive 设置
  • sendfile 用户优化静态文件
  • tcp_nodelay 允许 Nginx 将多个 buffer 作为单独数据包发送
  • tcp_nopush 用于激活 TCP 栈的 TCP_CORK 选项

配置好之后 /etc/nginx/nginx.conf 配置文件类似如下:

  1. keepalive_timeout 65;
  2. keepalive_requests 100000;
  3. sendfile on;
  4. tcp_nopush on;
  5. tcp_nodelay on;

Buffer 大小

Buffer 的相关配置用于调整缓冲区大小,如果 Buffer 配置过低,Nginx 将需要写入临时文件,则会发到过多的磁盘 I/O。

  • client_body_buffer_size 用于处理客户端的缓冲区大小,大多数客户端 buffer 来自由 POST 方式提交的表单,因此将其设置为 128K 是个不错的选择。
  • client_max_body_size 用于限定缓冲区大小的最大值,如果请求大小超过所配置的值,则会给客户端返回 413 错误(浏览器一般不会显示 413 错误)。
  • client_header_buffer_size 用于处理客户端 header 大小,使用默认的 1K 便可。
  • large_client_header_buffers 显示大客户端 header 的最大值和大小,4 header 和 4k buffer 应该够用。
  • output_buffers 设置从磁盘读取缓冲区响应的数量和大小。如果可能,客户端数据传输将被延迟,直到 Nginx 汇集到适合的数据大小。

配置好之后 /etc/nginx/nginx.conf 配置文件类似如下:

  1. client_body_buffer_size 128k;
  2. client_max_body_size 10m;
  3. client_header_buffer_size 1k;
  4. large_client_header_buffers 44k;
  5. output_buffers 132k;
  6. postpone_output 1460;

连接队列

/etc/sysctl.conf 配置文件选项可用于设置 Linux 连接队列和 buckets 大小,更改其 net.core.somaxconnnet.ipv4.tcp_max_tw_buckets 大小可以改变 Nginx 的等待时间。

配置好之后 /etc/sysctl.conf 配置文件类似如下:

  1. net.core.somaxconn =65536
  2. net.ipv4.tcp_max_tw_buckets =1440000

超时配置

超时配置其实也可以显著提高 Nginx 性能:

  • client_body_timeout 用于设置发送主体的超时时间
  • sent_timeout 用于设定客户端的超时响应时间
  • client_header_timeout 用于配置客户端 header 请求之后的发送时间

配置好之后 /etc/nginx/nginx.conf 配置文件类似如下:

  1. client_header_timeout 3m;
  2. client_body_timeout 3m;
  3. send_timeout 3m;

gzip 压缩

对于纯文本内容,Nginx 可以使用 gzip 压缩,我们可以使用如下参数指定需要压缩的类型。

配置好之后 /etc/nginx/nginx.conf 配置文件类似如下:

  1. gzip on;
  2. gzip_min_length 1000;
  3. gzip_types: text/html application/xjavascript text/css application/javascript text/javascript text/plain text/xml application/json application/vnd.msfontobject application/xfontopentype application/xfonttruetype application/xfontttf application/xml font/eot font/opentype font/otf image/svg+xml image/vnd.microsoft.icon;
  4. gzip_disable “MSIE [1-6]\.”;

静态文件缓存

如果你的网站在大量静态资源(如 CSS/JS/ 图片),Nginx 可以配置静态文件缓存。我们可以使用如下配置来设置缓存文件类型及缓存时间:

  1. location ~*.(woff|eot|ttf|svg|mp4|webm|jpg|jpeg|png|gif|ico|css|js)$ {
  2. expires 365d;
  3. }

文件系统优化

以下配置会提高系统对内存的管理能力,我们需要修改 /etc/sysctl.conf 配置文件。

当 Nginx 作为代理服务器使用时,每当连接到上游服务器都会使用一个临时的端口。我们可以使用如下命令将服务器本地 IPv4 端口限定在一个固定的区间:

  1. net.ipv4.ip_local_port_range 102465000

TCP FIN 超时的时候,端口必须处于非活动状态,才可以再次用于另一个连接。默认超时时间为 60 秒,我们可以将其减少为 30 秒甚至 15 秒:

  1. net.ipv4.tcp_fin_timeout 15

TCP 窗口的缩放选项可以将接收的窗口大小设置为最大 65535 bytes,该 TCP 选项可以使用如下命令来激活:

  1. net.ipv4.tcp_window_scaling =1

net.ipv4.tcp_max_syn_backlog 参数可以配置内核可积压的数据包大小,超过其值便会被丢弃,我们可以将其设置为如下参考值:

  1. net.ipv4.tcp_max_syn_backlog =3240000

我们可以配置在客户端丢失响应时关闭连接

  1. reset_timedout_connection on;

当然,管理员可以选择有条件的记录日志,以下配置示例将不记录 HTTP 响应代码为 2XX 和 3XX 的日志:

/etc/nginx/nginx.conf 配置文件添加

  1. map $status $loggable {
  2. ~^[23]0;
  3. default1;
  4. }

更多 Nginx 相关教程见以下内容

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-10/124365.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计3899字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中