nginx配置

针对CPU的nginx配置优化

  1. worker_processes
    设置nginx服务的进程数,一般设置为cpu核数的倍数.设置完需要设置worker_cpu_affinity指令.

  2. worker_cpu_affinity
    为每个进程分配cpu的工作内核.
    如cpu是4核,设置 worker_processes 4; 那么worker_cpu_affinity就可以这样配置
    worker_cpu_affinity 0001 0100 1000 0010
    上述四组二进制分别对应4个进程,第一个进程对应0001,表示使用第一个cpu内核,第二个进程对应0100 表示使用第三个cpu内核,要注意的是 二进制位排列顺序和cpu的顺序是相反的,0表示不使用 1表示使用.所以0100 =>第三个cpu 0010表示第二个cpu内核
    如cpu是4核,设置 worker_processes 8; 那么worker_cpu_affinity就可以这样配置
    worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000
    如cpu是8核,设置 worker_processes 8; 那么worker_cpu_affinity就可以这样配置
    worker_cpu_affinity 00000001 00000010 ...... 10000000
    worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了

网络相关的配置

  1. keepalive_timeout
    设置nginx服务器与客户端保持连接的超时时间.
    keepalive_timeout 60 50;
    60表示 nginx服务器和客户端连接保持活动的时间是60s,之后断开连接;
    50表示使用keep-alive消息头保持与客户端浏览器的连接时间为50s,之后浏览器主动与服务器断开连接.

  2. send_timeout
    指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接。
    send_timeout 10s;
    nginx服务器与客户端建立连接后,某次会话中服务器等待客户端响应超过10s,就自动关闭连接

  3. client_header_buffer_size
    设置nginx服务器允许的客户端请求头部的缓冲区大小,可根据系统分页大小来设置.
    使用 getconfig PAGESIZE 返回linux服务器的分页大小
    出现400错误,大部分原因是因为此设置太小了.
    client_header_buffer_size 4k;

  4. multi_accept
    设置服务器是否尽可能多的接收客户端的网络请求.默认值off,一般设置为on
    multi_accept on;

事件驱动

  1. use
    指定nginx服务器使用的事件驱动
    use epoll;

  2. worker_connections
    设置niginx服务器上每个工作进程允许同时连接客户端的最大数量,此配置和linux系统有关 有个open file resouse limit 指令设置linux进程可以打开的文件句柄数量. worker_connections 不能超过 open file resouse limit 的值.
    cat /proc/sys/fs/file-max 命令可以查看linux进程最大文件句柄
    worker_connections 65535
    可以计算出允许最大连接数量 = worker_processes * worker_connections/2

  3. worker_rlimit_sigpending
    设置linux平台的事件信号队列长度上限
    worker_rlimit_sigpending 1024;

Gzip压缩配置

  1. gzip
    开启或者关闭Gzi功能,
    gzip on |off
    默认off 仅当on时下面所有gzip配置才有效

  2. gzip_buffers
    设置gzip压缩文件使用的缓存大小
    gizp_buffers 32 4k;
    32 表示ngixn服务器向系统申请缓存空间的个数 number
    4k 指定每个缓存空间的大小 size
    size的值取系统内存页一页的大小.一般为4k或者8k;

  3. gzip_comp_level
    指定gzip的压缩级别1压缩程度最低 9压缩程度最高 压缩效率最低 最费时间.默认为1
    gzip_comp_level 1

  4. gzip_disable
    针对不同的User-Agent 选择性的开启和关闭 gzip,IE6以下浏览器gzip功能有问题,需要使用该配置关闭

  5. gzip_http_version
    针对不同的http版本,选择性的开启或者关闭gzip功能.
    gzip_http_version 1.0|1.1;
    默认为1.1版本,表示只有客户端使用1.1版本以上的http协议时才使用gzip,一般不需要配置.几乎都支持的.

  6. gzip_min_length
    gzip_min_length 1024;
    当页面的Content-Length >= 1024字节的时候才启用gzip.
    gzip_min_length 0;
    设置为0表示不管响应页面的大小,统统压缩.

  7. gzip_proxied
    在使用nginx服务器的反向代理功能时有效,具体配置参见手册咯

  8. gzip_types
    nginx服务器可以根据相应也的MIME类型选择性的开启gzip压缩功能
    gzip_types text/html;
    表示对MIME类型的页面数据进行gzip压缩,也可以写* 表示所有类型的MIME都进行压缩

  9. gzip_vary
    使用gzip功能时是否发送 Vary:Accept-Encoding 头域的响应头部.该头域的主要功能是告诉接收方发送的数据经过了压缩功能.

Gzip压缩功能配置实例
全局块
events块
http
    {
        ...
        gzip on;
        gzip_min_length  1k;  #也可以写1024
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
        gzip_vary on;
        
        gunzip_static  on;
        gzip_disable   "MSIE [1-6]\.";   #为了解决IE6不兼容的问题
        ...
        server块
}

也可以在server块中单独为虚拟主机配置gzip,ngixn配置采用就近原则.

nginx服务器组配置

  1. upstream
    upstream backend { ....}
    upstream是配置服务器组的主要指令.和http块 server块类似. 花括号内是具体的配置;

  2. server
    设置组内的服务器.和upstream组合使用

upstream backend 
{
    server backend1.com weight 5;
    server 127.0.0.1:8080 max_fails=3 fail_timeout=30s
    server unix:/tmp/backend3
}

设置了backend组,基于域名的backend1.com,基于ip地址的127.0.0.1:8080,基于进程间通信的unix Domain Socket;
backend1.com 权重为5 (不写默认为1) 为组内最大,优先接收和处理请求.
127.0.0.1:8080 中 max_fails=3 fail_timeout=30s 表示状态检查设置 如果在30s(默认10s)内连续产生3次请求失败(http 404不认为是请求失败),那么该服务器之后的30s内被认为是无效的(down状态).

  1. ip_hash
    不能和权重同时配置.
    实现了某个客户端多次请求定向到一台服务器上,保证客户端和服务器之间会话的稳定. 只有服务器处于down状态,才会转移请求到其他服务器.
upstream backend 
{
    ip_hash;
    server backend1.com ;
    server backend2.com ;
}

如果没有ip_hash,将会轮流响应请求.导致会话不稳定.

  1. **keepalive **
    keepalive 指定的 数值 是 Nginx 每个 worker 连接后端的最大长连接数,而不是整个 Nginx 的。 而且这里的后端指的是「所有的后端」,而不是每一个后端。

  2. least_conn
    nginx的负载均衡 - 最少连接
    我们知道轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同。这有个前提,就是每个请求所占用的后端时间要差不多,如果有些请求占用的时间很长,会导致其所在的后端负载较高。在这种场景下,把请求转发给连接数较少的后端,能够达到更好的负载均衡效果,这就是least_conn算法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容