当前位置: > Linux服务器 > nginx >

Nginx作为反向Proxy的优化要点

时间:2017-02-03 17:04来源:linux.it.net.cn 作者:IT

原文地址: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




(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容