Nginx 作为反向Proxy 的优化要点

简介: 常用优化要点当nginx用于反向代理时,每个客户端将使用两个连接:一个用于响应客户端的请求,另一个用于到后端的访问;如果机器是两核CPU,例如:?12...

 

常用优化要点

当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

目录
相关文章
|
16天前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
39 3
|
27天前
|
应用服务中间件 网络安全 nginx
轻松上手Nginx Proxy Manager:安装、配置与实战
Nginx Proxy Manager (NPM) 是一款基于 Nginx 的反向代理管理工具,提供直观的 Web 界面,方便用户配置和管理反向代理、SSL 证书等。本文档介绍了 NPM 的安装步骤,包括 Docker 和 Docker Compose 的安装、Docker Compose 文件的创建与配置、启动服务、访问 Web 管理界面、基本使用方法以及如何申请和配置 SSL 证书,帮助用户快速上手 NPM。
169 1
|
2月前
|
缓存 前端开发 JavaScript
|
2月前
|
缓存 监控 负载均衡
nginx相关配置及高并发优化
Nginx的高并发优化是一个综合性的过程,需要根据具体的业务场景和硬件资源量身定制。以上配置只是基础,实际应用中还需根据服务器监控数据进行持续调整和优化。例如,利用工具如ab(Apache Benchmarks)进行压力测试,监控CPU、内存、网络和磁盘I/O等资源使用情况,确保配置的有效性和服务的稳定性。
146 0
|
4月前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
65 2
|
4月前
|
缓存 前端开发 Java
"揭秘!SpringBoot携手Nginx,性能飙升秘籍大公开:轻松掌握配置优化,让你的应用快如闪电!"
【8月更文挑战第11天】随着微服务架构的发展,SpringBoot成为构建RESTful API的首选,Nginx则作为高性能的反向代理服务器提升应用性能。本文将探讨两者如何协同工作,包括Nginx的负载均衡策略、静态资源缓存及数据压缩配置;同时讨论SpringBoot的线程池优化、缓存策略及性能监控。通过这些方法,帮助开发者显著提高系统的整体性能和可用性。
185 1
|
5月前
|
应用服务中间件 网络安全 nginx
使用Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书
本文引导如何用Nginx Proxy Manager (NPM)配置Halo的反向代理与SSL证书。NPM简化了Nginx的配置流程,适合无Nginx基础的用户。安装NPM无需额外安装Nginx,避免端口冲突。通过`docker-compose.yaml`启动NPM服务,并映射必要的端口。配置Halo反向代理需登录NPM面板,添加代理主机,设置域名、转发IP等参数。NPM支持自动申请与续期SSL证书,确保网站安全访问。更多Halo安装细节,请参考[如何在Linux云服务器上通过Docker Compose部署安装Halo](https://zhangfeidezhu.com/?p=631).
304 0
使用Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书
|
5月前
|
缓存 负载均衡 应用服务中间件
Nginx反向代理优化
教你如何做好Nginx反向代理优化
112 5
|
6月前
|
监控 前端开发 应用服务中间件
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽(2)
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽
91 1
|
6月前
|
负载均衡 前端开发 应用服务中间件
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽(1)
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽
205 1