Nginx 作为反向Proxy 的优化要点
原文地址:http://my.oschina.net/hyperichq/blog/405421
常用优化要点
当nginx用于反向代理时,每个客户端将使用两个连接:
一个用于响应客户端的请求,另一个用于到后端的访问;
如果机器是两核CPU,例如:
|
1
2
|
$ grep ^proces /proc/cpuinfo | wc -l2 |
那么,可以从如下配置起步:
|
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-Coreworker_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/
Nginx 作为反向Proxy 的优化要点的更多相关文章
- java架构之路-(nginx使用详解)nginx的反向代理和优化配置
书接上回说,nginx我们学会了简单的配置.那么我今天来聊一下,我们ngxin的一些优化配置(我不是很懂,不敢谈高级配置).我先来看一下nginx的好处和正向代理. nginx的好处 1.可以高并发连 ...
- Nginx 作为反向代理优化要点proxy_buffering
当nginx用于反向代理时,每个客户端将使用两个连接:一个用于响应客户端的请求,另一个用于到后端的访问: 那么,可以从如下配置起步: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- Nginx反向代理缓冲区优化
内容目录 proxy_buffering proxy_buffer_size proxy_buffers proxy_busy_buffers_size proxy_max_temp_file_siz ...
- 【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器
一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从 ...
- Nginx搭建反向代理服务器过程详解
一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从 ...
- Nginx搭建反向代理服务器
[大型网站技术实践]初级篇:借助Nginx搭建反向代理服务器 一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受int ...
- Nginx 搭建反向代理服务器过程详解
1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet ...
- Nginx用作反向代理服务器
Nginx作为反向代理服务器时转发请求的流程 客户端请求处理 当客户端请求来时,Nginx并不会立刻转发到上游服务器,而是想完整的接收到Nginx所在的服务器, 然后再把缓存的客户端的请求转发到上游服 ...
- 【转】Nginx搭建反向代理服务器过程详解
阅读目录 1.1 反向代理初印象 1.2 反向代理的作用 2.1 Nginx是神马? 2.2 Nginx的应用现状 2.3 Nginx的核心特点 3.1 准备一个ASP.NET网站部署到IIS服务器集 ...
随机推荐
- gtk+学习笔记(七)
今天被一个文本框坑了,基本设置什么的都对,但是就是无法显示中文,按钮名称都可以显示中文,先介绍下文本框的基本函数吧. GtkWidget *gtk_text_view_new(void);新建一个文本 ...
- gtk+学习笔记(五)
今天继续做的是昨天那个界面对的优化,直接贴下代码, void click_radio(GtkWidget *widget,gpointer *data) { 3 GtkWidget *dialog; ...
- 通过构造系统服务分发实现拦截&过滤 (仿360游戏保险箱)
想写这个程序主要是因为看了KSSD的一篇帖子,http://bbs.pediy.com/showthread.php?t=108378 讲 的是360保险箱保护游戏账号的原理,实际上就是对各种请求的拦 ...
- 参数化SQL语句
避免SQL注入的方法有两种:一是所有的SQL语句都存放在存储过程中,这样不但可以避免SQL注入,还能提高一些性能,并且存储过程可以由专门的数据库管理员(DBA)编写和集中管理,不过这种做法有时候针对相 ...
- ElasticSearch实战概要
最近中美关系越来越紧张,国内经济下滑,股市一片惨淡,互联网行业越来越不景气,动不动都是跌掉几千亿市值,来写一些文档来抚慰这颗受伤的心吧... 随着互联网的发展,数据越来越重要,每个公司保存的数据也是越 ...
- MySQL慢查询优化
MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在大量数据进行比对或聚合时.磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的 ...
- javascript输入验证数字方法,适合充值时输入正整数验证
说明:用于验证正整数的输入,不允许输入其他字符. html: <input type="text" id="sell_jobNum" name=" ...
- linux 101 hacks 2date,grep,find
感觉挨个按着作者来的太蠢了,我还是放自己觉得不错的东西把 用特定格式显示当前时间 以下的方法可以用各种不同的格式来显示当前时间: $ date Thu Jan :: PST $ date --date ...
- 站点的安全防范都是后端的职责?非也,Web前端安全同样不可忽视
前言 随着网络的快速普及,网络安全问题的受害者不再只是政府.企业等集体,每一个接触网络的普通人都有可能成为网络攻击的受害者.随着网络的普及,黑客进行网络攻击的手段越来也多,越来越复杂.以网站的攻击为例 ...
- 构建第一个Spring Boot项目
1.启动IntelliJ IDEA,点击"Create New Project"  2.选择"Spring initializr",设定SDK及Spring ...