nginx 全面优化 负载均衡
修改nginx.conf文件,它保存有nginx不同模块的全部设置。如果是原生安装的话应该在服务器的 /etc/nginx 目录找到 nginx.conf ,使用其它安装包的话也可以自行查找nginx.conf所在目录。
下面我以原生安装来解读nginx优化,其它安装包可参考。
顶层配置
在 nginx.conf 文件中,有一些在模块之外的顶层配置。
user www-data;
pid /var/run/nginx.pid; worker_processes auto; worker_rlimit_nofile ;
user 和 pid 应当使用默认值——由于它对我们的目的没有任何影响,所以我们不会修改这部分。
worker_processes 定义了 nginx 在为你的网站提供服务时,worker 进程的数量。最佳值受到包括(但不限于)CPU 核心数、存储数据的磁盘数、负载值在内的许多因素的影响。如果不确定的话,将其设置为可用的 CPU 内核的数量是一个不错的开始(设置为“auto”,将会尝试自动检测可用的值)。
worker_rlimit_nofile 修改了 worker 进程打开文件数的最大值限制。如果不设置,操作系统会限制它。当操作系统和 nginx 处理超过“ulimit -n”的数量的文件的情况时产生报告,因此将这个数值调大,这样 nginx 就不会遇到“too many open files”的问题。
# bump up our hard limit
sudo sh -c ulimit -HSn
为了让这个设置(在重启以后)永久生效,需要修改系统的配置文件。添加(如果已经有了,就修改)下面的行
运行vim /etc/security/limits.conf添加如下内容 * soft nofile
* hard nofile
然后务必重启,或者通过其他途径让 limits 生效。
events 模块
events 模块包括了 nginx 中处理链接的全部设置。
events {
worker_connections ; multi_accept on; use epoll;
}
worker_connections 设置了一个 worker 进程可以同时打开的链接数。由于已经调整了 worker_rlimit_nofile,所以可以安全的将这个数值调整得很大。记住,最大客户数也由系统的可用socket连接数限制,所以设置不切实际的高没什么好处。
multi_accept 告诉 nginx 在收到新链接的请求的通知时,尽可能接受链接。
use 设置告诉服务器由哪个线程方法来执行(轮询)。如果使用 Linux 2.6+,应当设置为 epoll。如果使用 *BSD,应当设置为 kqueue。
(需要注意的是,如果没有指定 nginx 使用哪个,它将会根据操作系统选择最合适的那个)
HTTP 模块
HTTP 模块控制了 nginx 的 http 处理的核心功能。虽然这里只有很少的设置项,但我们还是要简单的了解一下。每个配置的片段都应当放在 http 模块中,后面不再特别说明。
http {
server_tokens off;
sendfile on; tcp_nopush on;
tcp_nodelay on; ...
}
server_tokens 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。
sendfile 激活了 sendfile()。sendfile()可以在 磁盘 和 TCP端口 之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效
tcp_nopush 告诉 nginx 在一个包中发送全部的头文件,而不是一个一个发送。
tcp_nodelay 告诉 nginx 不要缓存数据,应该快速的发送小数据——这仅仅应该使用在那些频繁发送小的碎片信息而无需立刻获取响应的,需要实时传递数据的应用中。
access_log off; error_log /var/log/nginx/error.log crit;
access_log 确定了 nginx 是否保存访问日志。将这个设置为关闭可以提升硬盘IO速度(换句话说,你只有一条命)。
error_log告诉 nginx 应当记录严重道的错误。
keepalive_timeout ; client_header_timeout ;
client_body_timeout ; reset_timedout_connection on; send_timeout ;
keepalive_timeout 指定了与客户端的 keep-alive 链接的超时时间。服务器会在这个时间后关闭链接。我们会降低这个值,以避免让 worker 过长时间的忙碌。
client_header_timeout和 client_body_timeout (分别)设置了请求头和请求体的超时时间。这个值也应该设置得较低。
reset_timedout_connection 告诉 nginx 当客户端失去相应时关闭链接。这将会释放为该客户端分配的所有内存。
send_timeout 指定了响应客户端的超时时间。这个时间并不是指整个传输时间,而是在客户端两次读操作之间的间隔。如果客户端在这个时间内没有准备好再次读取数据,nginx 会关闭链接。
limit_conn_zone $binary_remote_addr zone=addr:5m; limit_conn addr ;
limit_conn_zone 设置用于保存各种key(比如当前连接数)的共享内存的参数。5m就是5兆字节,这个值应该被设置的足够大以存储(32K*5)32byte状态或者(16K*5)64byte状态
limit_conn 设置了指定key的最大连接接数。这里键为 addr,值为 100,因此将只允许每个 IP 100 个并发连接。
include /etc/nginx/mime.types; default_type text/html; charset UTF-;
include 会直接包含其他文件的内容到当前文件。这里加载了 MIME 的列表以待使用。
default_type 设置文件默认的 MIME-type 类型。
charset 设置了头中包含的默认的字符集。
下面的两个性能改进的选项在 WebMasters StackExchange 的这个伟大问题中给予了说明。
gzip on;
gzip_disable "msie6"; # gzip_static on; gzip_proxied any; gzip_min_length ; gzip_comp_level ; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip 告诉 nginx gzip 压缩发送的数据。这会减少需要发送的数据的数量。
gzip_disable为指定的客户端禁用gzip功能。禁止IE6使用gzip以使我们的方案能够广泛兼容
gzip_static告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。这要求你预先压缩你的文件(在这个例子中被注释掉了),从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了
gzip_proxied 允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。
gzip_min_length 设置了 gzip 数据的最小的字节数。由于 gzip 压缩会降低处理请求的速度,所以如果一个请求小于 1000 字节,将不对其进行压缩。
gzip_comp_level 设置了数据压缩的等级。等级可以是 1-9 的任意一个值,9 表示最慢但是最高比例的压缩。设置为 4 是一个不错的折中选择。
gzip_types 设置进行 gzip 压缩的类型。上面列了一些,你还可以自己添加更多。
# cache informations about file descriptors, frequently accessed files
# can boost performance, but you need to test those values
open_file_cache max= inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses ;
open_file_cache_errors on; ##
# Virtual Host Configs
# aka our settings for specific servers
## include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
open_file_cache 打开缓存并且指定了缓存最大数目,以及缓存的时间。我们可以设置一个相对高的最大时间,这样我们可以在它们不活动超过20秒后清除掉。
open_file_cache_valid 指定了检查 open_file_cache 中信息的有效性的时间间隔。
open_file_cache_min_uses 定义了 open_file_cache 中在指定时间间隔里,闲置文件的最小使用次数。
open_file_cache_errors 指定了在搜索一个文件的时候是否缓存错误,
include 再次向配置添加了一些文件,如果你的服务器模块不在这些位置,你就得修改下面路径来指定正确的位置。
完整的配置文件:
user www-data;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile ; events {
worker_connections ;
multi_accept on;
use epoll;
} http {
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on; access_log off;
error_log /var/log/nginx/error.log crit; keepalive_timeout ;
client_header_timeout ;
client_body_timeout ;
reset_timedout_connection on;
send_timeout ; limit_conn_zone $binary_remote_addr zone=addr:5m;
limit_conn addr ; include /etc/nginx/mime.types;
default_type text/html;
charset UTF-; gzip on;
gzip_disable "msie6";
gzip_proxied any;
gzip_min_length ;
gzip_comp_level ;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; open_file_cache max= inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses ;
open_file_cache_errors on; include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
在编辑完配置后,请确保重新加载/重启(reload/restart)nginx,以便使用新的配置文件。
sudo service nginx restart
nginx 全面优化 负载均衡的更多相关文章
- nginx配置优化+负载均衡+动静分离详解
nginx配置如下: #指定nginx进程运行用户以及用户组user www www;#nginx要开启的进程数为8worker_processes 8;#全局错误日志文件#debug输出日志最为详细 ...
- [转] nginx配置优化+负载均衡+动静分离(附带参数解析)
#指定nginx进程运行用户以及用户组user www www;#nginx要开启的进程数为8worker_processes 8;#全局错误日志文件#debug输出日志最为详细,而crit输出日志 ...
- 【翻译】Nginx的HTTP负载均衡
本文为翻译文,原文地址:http://nginx.org/en/docs/http/load_balancing.html 介绍 将请求负载均衡到多个应用实例是一个常用的技术,它起到优化资源使用率.最 ...
- Nginx服务器部署 负载均衡 反向代理
Nginx服务器部署负载均衡反向代理 LVS Nginx HAProxy的优缺点 三种负载均衡器的优缺点说明如下: LVS的优点: 1.抗负载能力强.工作在第4层仅作分发之用,没有流量的产生,这个特点 ...
- 第十五章 nginx七层负载均衡
一.Nginx负载均衡 1.为什么做负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到 ...
- nginx安装及负载均衡配置
Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第二 ...
- Nginx 简单的负载均衡配置示例(转载)
原文地址:Nginx 简单的负载均衡配置示例(转载) 作者:水中游于 www.s135.com 和 blog.s135.com 域名均指向 Nginx 所在的服务器IP. 用户访问http://www ...
- 观nginx与lvs负载均衡的较量
在技术工作者中,常用到的就是lvs负载均衡和Nginx负载均衡了.这两者也是比较普及的.那么,根据不同的需求,两者存在着不同的优势.具体选择哪一个,还要看您的要求了.那么我们在此为大家分享一篇文章,对 ...
- 如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器
Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...
随机推荐
- 【Linux】crontab定时任务用用法
cron是unix或者linux下用来定时任务的命令,大致的用法如下: 1.服务的启动和关闭 /sbin/service crond start //启动服务 /sbin/service cron ...
- intellijidea 设置字体等
http://blog.csdn.net/asmcvc/article/details/17144951 1.下载安装AndroidStudio:http://developer.android.co ...
- Mac os下设置国内镜像加速站
无法忍受国外pip 仓库的龟速地址,安利一波国内高速镜像地址... 首推阿里云 repository 马爸爸 I ❤ u $ vim ~/.pip/pip.conf 在config中做如下配置: [ ...
- python slot
每个实例包含一个字典,slot 让实例变成tup 或list,减少内存,但不能再增加属性 For classes that primarily serve as simple data structu ...
- C++ win32 dll 引用外部CLR,加载托管程序集异常-Error 10 error LNK2019: unresolved external symbol _CLRCreateInstancet
异常: Error 10 error LNK2019: unresolved external symbol _CLRCreateInstance@12 referenced in function ...
- 115、TensorFlow变量的使用
# To use the value of a tf.Variable in a Tesnorflow graph , simply treat it like a normal tf.Tensor ...
- 通过注册表修改IE的Internet选项
Internet Explorer 安全区域设置存储在以下注册表子项下面: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\I ...
- Html5 学习笔记 --》布局
不推荐: 浮动布局: footer 设置 clear : both 清理浮动 | header | |边 | | |内 | 内容 ...
- 删除文件时提示“找不到该项目”,怎么解决? 转摘自:http://jingyan.baidu.com/article/e4d08ffdf5ab470fd2f60df4.html
故障现象:在使用Windows系统删除文件或者文件夹的时候,有时会出现“找不到该项目”的错误提示,可能再次“重试”也无济于事. 那么,接下来T库小编就为库友们简单概括一下出现该问题的原因. 故障原因: ...
- 【牛客网-剑指offer】矩形覆盖
题目: 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形.请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 分析: 假设2为高,n为宽 因为高为2固定,会出现固定情况,即无论 ...