原文地址:http://my.oschina.net/hyperichq/blog/405421

常用优化要点

当nginx用于反向代理时,每个客户端将使用两个连接:

一个用于响应客户端的请求,另一个用于到后端的访问;

如果机器是两核CPU,例如:

1
2
grep ^proces /proc/cpuinfo wc -l
2

那么,可以从如下配置起步:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# One worker per CPU-core.
worker_processes  2;
events {
    worker_connections  8096;
    multi_accept        on;
    use                 epoll;
}
worker_rlimit_nofile 40000;
http {
    sendfile           on;
    tcp_nopush         on;
    tcp_nodelay        on;
    keepalive_timeout  15;
}

标准的代理配置

下面是一个基本的反向代理配置模板,将所有请求都转发给指定的后端应用。

例如,到http://your.ip:80/的请求都将重定向到 http://127.0.0.1:4433/ 私有服务器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# One process for each CPU-Core
worker_processes  2;
# Event handler.
events {
    worker_connections  8096;
    multi_accept        on;
    use                 epoll;
}
http {
     # Basic reverse proxy server
     upstream backend  {
           server 127.0.0.1:4433;
     }
     # *:80 -> 127.0.0.1:4433
     server {
            listen       80;
            server_name  example.com;
            ## send all traffic to the back-end
            location / {
                 proxy_pass        http://backend;
                 proxy_redirect    off;
                 proxy_set_header  X-Forwarded-For $remote_addr;
            }
     }
}

下面,我们将在此基础上进行优化。

缓冲控制

如果禁止缓冲,那么当Nginx一收到后端的反馈就同时传给客户端。

nginx 不会从被代理的服务器读取整个反馈信息。

nginx可从服务器一次接收的最大数据大小由  proxy_buffer_size 控制。

1
2
3
proxy_buffering    off;
proxy_buffer_size  128k;
proxy_buffers 100  128k;

缓存和过期控制

上面的配置是将所有请求都转发给后端应用。为避免静态请求给后端应用带来的过大负载,我们可以将nginx配置为缓存那些不变的响应数据。

这就意味着nginx不会向后端转发那些请求。

下面示例,将 *.html*.gif, 等文件缓存30分钟。:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
http {
     #
     # The path we'll cache to.
     #
     proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache:60m max_size=1G;
}
            ## send all traffic to the back-end
            location / {
                 proxy_pass  http://backend;
                 proxy_redirect off;
                 proxy_set_header        X-Forwarded-For $remote_addr;
                 location ~* \.(html|css|jpg|gif|ico|js)$ {
                        proxy_cache          cache;
                        proxy_cache_key      $host$uri$is_args$args;
                        proxy_cache_valid    200 301 302 30m;
                        expires              30m;
                        proxy_pass  http://backend;
                 }
            }

这里,我们将请求缓存到 /tmp/cache,并定义了其大小限制为1G。同时只允许缓存有效的返回数据,例如:

1
proxy_cache_valid  200 301 302 30m;

所有响应信息的返回代码不是 "HTTP (200|301|302) OK" 的都不会被缓存。

对于例如workpress的应用,需要处理cookies 和缓存的过期时间,通过只缓存静态资源来避免其带来的问题。

验证

优化配置的效果需要实践检验,建议部署一个监控工具,监控的内容应包括:

Nginx:开源版提供的监控指标,仅有如下7个指标:

Connections,Accepts,Handled,Requests,Reading,Writing,Waiting,

为便于分析统计,在Hyperic中可扩展为10个指标,增加了三个派生指标,每分钟的接收,请求和处理的数量:

Accepts per Minute,Handled per Minute,Requests per Minute

从操作系统的角度:应包括Nginx进程的CPU使用率,内存占用,整体CPU使用率,交换区使用率等指标。

如果是在虚拟机上运行,还应关注 操作系统的 ST( Steal Time)指标,判断是否有超卖,过载等现象;

超卖:超卖是指主机商在一台服务器上放了太多的VPS账户,如果遇到所有的VPS账户同时使用所有的资源,就会出现服务器无法访问的情况,严重时硬件瘫痪 、数据丢失。但超卖很难察觉。有时通过 ST 指标可以看到。

参考资源:

http://tweaked.io/guide/nginx-proxying/

网络管理软件hyperic hq监控和管理Nginx

Hyperic 监控 Nginx1.6 配置过程

下载免费开源Hyperic

Nginx 作为反向Proxy 的优化要点的更多相关文章

  1. java架构之路-(nginx使用详解)nginx的反向代理和优化配置

    书接上回说,nginx我们学会了简单的配置.那么我今天来聊一下,我们ngxin的一些优化配置(我不是很懂,不敢谈高级配置).我先来看一下nginx的好处和正向代理. nginx的好处 1.可以高并发连 ...

  2. Nginx 作为反向代理优化要点proxy_buffering

    当nginx用于反向代理时,每个客户端将使用两个连接:一个用于响应客户端的请求,另一个用于到后端的访问: 那么,可以从如下配置起步: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  3. Nginx反向代理缓冲区优化

    内容目录 proxy_buffering proxy_buffer_size proxy_buffers proxy_busy_buffers_size proxy_max_temp_file_siz ...

  4. 【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器

    一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从 ...

  5. Nginx搭建反向代理服务器过程详解

    一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从 ...

  6. Nginx搭建反向代理服务器

    [大型网站技术实践]初级篇:借助Nginx搭建反向代理服务器   一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受int ...

  7. Nginx 搭建反向代理服务器过程详解

    1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet ...

  8. Nginx用作反向代理服务器

    Nginx作为反向代理服务器时转发请求的流程 客户端请求处理 当客户端请求来时,Nginx并不会立刻转发到上游服务器,而是想完整的接收到Nginx所在的服务器, 然后再把缓存的客户端的请求转发到上游服 ...

  9. 【转】Nginx搭建反向代理服务器过程详解

    阅读目录 1.1 反向代理初印象 1.2 反向代理的作用 2.1 Nginx是神马? 2.2 Nginx的应用现状 2.3 Nginx的核心特点 3.1 准备一个ASP.NET网站部署到IIS服务器集 ...

随机推荐

  1. CVE-2013-0025

    Microsoft IE ‘SLayoutRun’释放后重用漏洞(CNNVD-201302-197) Microsoft Internet Explorer是微软Windows操作系统中默认捆绑的WE ...

  2. 《精通Python设计模式》学习之工厂方法

    小书,在我以前作数据库的连接时,就用了这个工厂方法的. 归纳总结一下,更有利于成长吧. import xml.etree.ElementTree as etree import json class ...

  3. 微信小程序 跳一跳 外挂 C# winform源码

    昨天微信更新了,出现了一个小游戏“跳一跳”,玩了一下 赶紧还蛮有意思的 但纯粹是拼手感的,玩了好久,终于搞了个135分拿了个第一名,没想到过一会就被朋友刷下去了,最高的也就200来分把,于是就想着要是 ...

  4. Python类和人类

    Python中的类 俗话说,物以类聚,人以群分,类是什么,类就是一组相同属性的集合.下面来结合人,探讨Python中类和人类的关系. 首先,我们定义一个人的类,如下: class People(obj ...

  5. babel使用中不想使用 严格模式 如何去除?

    使用babel进行es6转es5时,默认转化之后是严格模式,有些时候我们想去除严格模式. 解决方法如下 安装 babel-plugin-transform-remove-strict-mode 依赖 ...

  6. 转:springboot(二):web综合开发

    web开发 spring boot web开发非常的简单,其中包括常用的json输出.filters.property.log等 json 接口开发 在以前的spring 开发的时候需要我们提供jso ...

  7. Kafka/Metaq设计思想学习笔记

    http://my.oschina.net/geecoodeer/blog/194829

  8. Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match

    最近在用python做数据挖掘,在聚类的时候遇到了一个非常恶心的问题.话不多说,直接上代码: from sklearn.cluster import KMeans from sklearn.decom ...

  9. iOS 11开发教程(七)编写第一个iOS11代码Hello,World

    iOS 11开发教程(七)编写第一个iOS11代码Hello,World 代码就是用来实现某一特定的功能,而用计算机语言编写的命令序列的集合.现在就来通过代码在文本框中实现显示“Hello,World ...

  10. Mysql表连接查询

    原文地址: https://www.cnblogs.com/qiuqiuqiu/p/6442791.html 1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等 ...