`
langzhiwang888
  • 浏览: 185805 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

nginx 负载均衡,缓存

 
阅读更多

 

nginx 负载均衡,缓存

本来想总结一份文档,看到netseek的nginx指南已经整理的很详细,没必要再整了。理论就不废话了,nginx主要配置都在nginx.conf配置文件中. 希望能给正学习ing的童鞋一个参考... 有误的还请指出..

一、nginx框架结构说明

  •    .......  定义运行nginx worker进程的用户/组,worker进程数,可以打开的最大文件描述符数.Log/pid path
  • events{                      事件模块,控制nginx处理连接的方式
  •       ……………….
  • }
  • http {                 nginx处理http的核心模块
  •       ……………….            
  •    upstrearm 负载组名{        负载均衡模块,可以有多个均衡组.
  •      …………………….                   nginx作反向代理方式有:轮询,权重,ip_hash,url_hash,fair
  •    }
  •    Server{                  定义虚拟主机模块,可以有多个
  •        ………………
  •    }
  •    Server{
  •     ………………….
  •      Location ~ /purge(/.*) {     location匹配访问目录/文件的控制模块
  •           ………..
  •      }
  •      Location ~  .*\.(ico\mp3\avi\jpg\jpeg\swf\.......) {
  •          ………..
  •      }
  •      Location ~  .*\.(thtml|thtm)$  {
  •        ………..
  •      }
  •      Location  ./  {
  •        ………..
  •      }
  •      Location ~ .*\.(php|jsp|cgi)$  {
  •          ………..
  •      }
  •      Location  /unlimit/  {
  •         ………..
  •      }
  •     ………………….
  •    }
  •    Server{
  •         ……………….
  •      Location ~  .*\.(ico\mp3\avi\jpg\jpeg\swf\.......) {
  •        ………..
  •      }
  •      Location  ./  {
  •         ………..
  •       }
  •         …………………….
  •    }
  • }
二、nginx作反向代理,利用upstream负载均衡模块说明参考:
  •  
  • user nginx nginx;
  •  
  • worker_processes 10;         工作进程数一般是cpu核数*2
  • error_log    /var/log/nginx/error.log  crit;
  • pid  /var/run/nginx.pid;
  • worker_rlimit_nofile 51200;    文件描述符,每个进程所能打开的最大文件数量/socket.
  •  
  • events  
  • {
  • use epoll;    使用的I/O网络模型
  • worker_connections  51200;
  • }
  •  
  • http
  • {
  •     includ  mime.types;
  •     default_type  application/octet-stream;
  •     #charset uft-8;         如果有多个字符类型,最好在程序中定义
  •         log_format main  '$remote_addr - $remote_user [$time_local] $request '
                          '"$status" $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"' ' up_ip: $upstream_addr '
                          'up_type $upstream_http_content_type' ' gzip "$gzip_ratio"';
       注:添加header头信息x_forwarded_for获取客户端真实IP。 $remote_addr.....nginx内部变量
        access_log /var/log/nginx/access.log  main;
  •  
  •     server_names_hash_bucket_size   128;
  •     client_header_buffer_size   32k;
  •     large_client_header_buffer 4 32k;
  •  
  •     sendfile on;
  •     tcp_nopush  on;
  •     tcp_nodelay on;
  •     keepalive_timeout 65;
  •  
  •     gzip on;          开启gzip压缩
  •     gzip_min_length 1k;
  •     gzip_buffers  4 16k;
  •     gzip_http_version  1.1;
  •     gzip_comp_level 2;
  •  
  •     limit_zone myzone  $binary_remote_addr  10m;  nginx限制并发各速率。 将myzone区域分配10M,1M可含约16000个会话状态。
  •  
  •   client_max_body_size 50m;     允许客户端请求的最大单个字节数
  •     client_body_buffer_size 256k; 缓冲区代理缓冲客户端请求的最 大字节数
  •     proxy_connect_timeout 190;     后端server超时时间
  •     proxy_send_timeout 290;      后端server回传时间
  •     proxy_read_timeout 290;      后端server响应时间
  •     proxy_buffer_size 4k;  缓存区保护的用户头信息大小,供nginx进行规则处理.
  •     proxy_buffers 4 32k;      几个buffer最大用多大空间
  •     proxy_busy_buffers_size 64k;   忙时可申请更大的空间
  •     proxy_temp_file_write_size 64k;  proxy缓存临时文件的大小
  •     proxy_next_upstream  error timeout invalid_header http_500 http_503 http_404;  如遇500,503,404状态码转发到后端另一服务器。
  •   proxy_max_temp_file_size 128m;
  •  
  •    upstream  mysvr {    定义负载均衡池,可以有多个,这里后端是squid-server组
  •      server   192.168.1.10;
  •      server   192.168.1.11;
  •      hash  $http_host$request_uri;
  •         根据url来hash,后端为缓存server的如squid,可提高命中率
  •  
  •    upstream  websvr{  定义后端websrv的均衡池,这里后端是web-server组
  •      server  192.168.1.20;
  •      server  192.168.1.21;
  •     }       采用轮询
  •   注:nginx负载均衡方式:轮询,权重,ip_hash,url_hash,fair.具体解释下面有说明。
  •  
  •      upstream  message_server{  定义后端message_server的均衡池
  •      server  192.168.1.30;
  •      server  192.168.1.31;
  •     }
  •   
  •   server {          定义虚拟主机,第一个虚拟主机,反向代理mysrv负载组
  •       listen 80;
  •       server_name www.domain.com
  •    location ~.*\.(ico|mp3|avi|wma|wmv|asf|mpg|mov|mid|js|css|jpg|ping|gif|swf|flv)$
  •    {
  •     proxy_set_header Host $host;
  •     proxy_set_header  X-Real-IP  $remote_addr;
  •     proxy_set_header  X-Forwarded-For  $proxy_add_x_forwaded_for;自定义变量获取原客户端真实IP。
  •     
  •      proxy_pass http://mysrv; 反向代理到mysrv负载池。
  •     root html;     网页文件根目录,后端server 默认路径。
  •    }
  •    location ~.*\.(php|jsp|cgi)?${
  •      动态可直接proxy_pass到后端web池.http://websrv;
  •    }
  •  
  •    location /                      匹配以/开头的url
  •    {
  •     proxy_next_upstream http_502 http_504 error timeout invalid_header;
  •    如果后端服务器返回502,504,执行超时错误,自动请求转发到后端另一台server,故障切换。
  •     proxy_pass http://mysrv;
  •     proxy_set_header Host $host;
  •     proxy_set_header X-Forwarded-For $remote_addr;
  •      }
  •      limit_conn  myzone 100;    限制单个IP的100个并发访问数.
  •    access_log /var/log/nginx/access.log  main;
  •    }
  •  
  •     server{                第二个虚拟主机,反向代理websrv负载组
  • listen 80;
  • server_name www1.domain.com;
  •       访问http://www1.domain.com/message/...地址,反向代理到message_server池
  •    

  • location /message/
  •       {
  •        proxy_pass http://message_server;
  •        proxy_set_header Host $host;
  •       }
  •  
  •       访问除了/message/之外的http://www1.domain.com/.....地址,反向代理到websrv

  • location /
  •       {
  •          proxy_pass http://websrv;
  •          proxy_set_header  Host $host;
  •          proxy_set_header  X-Forwarded-For $remote_addr;
  •       }
  •       access_log /var/log/nginx/message.access;
  •     }
  •  
  •  
  • }  
Nginx作为反向代理,利用upstream模块支持多组负载均衡,方式:
a)   轮询:每个请求按时间顺序依次分配到不同后端server.如何后端server down掉,能自动排除。
b)   权重: 根据weight值越大的后端server优先。指定轮询机率。
c)   Ip_hash:如客户端IP第一次访问后端A-server,输入用户名密码后第二次可能分发到后端B-server,ip_hash利用hash_key值按访问ip的hash结果分配即进行哈希算法使其同一IP第二次会话保持访问至同一后端server. 此种方式能解决session问题,每个访客固定访问一个后端server.
d)   利用hash算法此种方式无法进行负载均衡。
e)   url_hash:按访问url的hash结果分配,使每个url定向到同一后端server.如果后端是缓存server比较长有效,,如squid,可以增加squid命中率。
f)   Fair:按后端服务器响应时间来分配请,响应时间短的优先分配。

Location 对url进行匹配,可以进行重定向或新的代理,负载均衡。


三、nginx缓存模块proxy_cache说明参考(这里省去全局配置部分,只列http标签部分):
  • http{
  •     ....
  •    proxy_temp_path  /data/proxy_temp_path;
  •    proxy_cache_path /data/proxy_cache_path  levels=1:2 keys_zone=cache_one:200m inactive=1d
    max_size=30g;
  •   proxy_temp_path,proxy_cache_path路径须在同一分区下。
  •  设置web缓存区名cache_one,内存缓存空间大小200M,自动清除超过1天没有访问的缓存数据,硬盘缓存空间大小30G。
  •  .....
  •   upstream my_srv{
  •   server  ....
  •   server  ....
  •   }
  •   server{
  •   ........
  •   location /
  •   {
  •     proxy_set_header Host $host;
  •     proxy_set_header X-Forwarded-For $remote_addr;
  •     proxy_pass http:mysrv;
  •  
  •    location ~.*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
  •    {
  •     proxy_cache cache_one;    使用缓存区
  •  
  •      proxy_cache_valid 200 304 12h;
  •     proxy_cache_valid 301 302 1m;
  •     proxy_cache_valid any 1m;
  •     对不同状态码缓存时间不一样。
  •  
  •     proxy_cache_key $host$uri$is_args$args;
  •    nginx根据key值md5哈希存储缓存,一般根据域名,URL,参数组成key.
  •  
  •     proxy_set_header Host $host;
  •     proxy_set_header X-Forwarded-For $remote_addr;
  •     proxy_pass http:mysrv;
  •     反向代理,访问后端.
  •  
  •    location ~/purge(/.*)   清除缓存http://.../purge/..
  •    {
  •    allow  127.0.0.1;     允许执行清除的IP段
  •    allow  192.168.1.0/16;
  •    deny  all;
  •    proxy_cache_purge  cache-one  $host$1$is_args$args;
  •    }
  •   access_log /var/log/nginx/purge.access main;
  •  
  •   }
  • }
四、nginx作web服务器,相关网上nginx+php(利用fastcgi技术)实现高性能WEB服务器的博文已经很多,不作总结了....



配置只是现学现卖,知其然,知其所以然,了其原理,有个清晰的思路才是最重要的...
如上只是个人博客总结文, 若有误,欢迎指正...

nginx相关模块可参考nginx官方或nginx中文手册,张宴的那本nginx书写的很不错,很详细可以参考....
分享到:
评论

相关推荐

    nginx 负载均衡与缓存服务器标准配置文件

    nginx 负载均衡与缓存服务器标准配置文件

    Nginx负载均衡配置

    下面详细解释Nginx负载均衡的配置方法以及负载均衡策略。 首先,要配置Nginx与Tomcat实现负载均衡,需要准备两个Tomcat实例,每个实例可以部署一个简单的Web项目,例如通过在页面上标注不同的端口号,以便区分它们...

    nginx负载均衡配置文件demo

    **Nginx负载均衡配置详解** 在高并发的互联网应用环境中,服务器的性能优化和负载分发至关重要。这里我们探讨的是如何使用Nginx作为反向代理和负载均衡器,来提升系统的整体处理能力,特别是在处理静态内容和优化...

    Nginx的负载均衡入门

    Nginx 负载均衡入门 Nginx 是一款高性能的 HTTP 和反向代理服务器,由俄罗斯人 Igor Sysoev 编写。Nginx 已经在俄罗斯最大的门户网站 Rambler Media 上运行了 3 年时间,同时俄罗斯超过 20% 的虚拟主机平台采用 ...

    nginx 负载均衡与反向代理资源

    3. **反向代理高级配置**:还可以设置缓存、负载均衡策略、健康检查等,以优化反向代理性能。 ### 三、Nginx的负载均衡 1. **负载均衡原理**:通过将来自客户端的请求分发到多个后端服务器,负载均衡可以防止单一...

    Nginx负载均衡搭建及配置技术

    Nginx 支持多种操作系统,包括 CentOS 7.2,本文将介绍如何在 CentOS 7.2 上搭建 Nginx 负载均衡配置。 在开始之前,确保系统网络正常、yum 可用,并关闭 iptables 和 selinux,因为这些因素可能对 Nginx 的安装和...

    nginx负载均衡教程

    ### Nginx负载均衡教程详解 #### 一、Nginx与负载均衡概念介绍 - **Nginx简介**:Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行。其特点是占有内存少,...

    nginx负载均衡配置

    ### Nginx负载均衡配置详解 #### 一、负载均衡概念与原理 负载均衡(Load Balancing)是指将网络中的工作负载分散到多个计算资源上处理的技术,旨在提高响应速度和服务质量,同时确保系统的稳定性和可靠性。在Web...

    nginx tomcat负载均衡缓存服务器集群.docx

    【Nginx + Tomcat 负载均衡缓存服务器集群】 在面对高访问量和复杂业务需求时,构建一个高效的服务器集群是必要的。这里介绍的是使用Nginx作为负载均衡和缓存服务器,后端搭配Tomcat作为应用服务器的架构。这种架构...

    nginx 负载均衡

    3. **多级负载均衡**:结合DNS负载均衡和Nginx负载均衡,实现更精细的流量控制。 通过深入理解并灵活运用Nginx的负载均衡策略,我们可以构建出强大且可靠的分布式系统,应对各种复杂的网络环境。无论是在小型网站...

    nginx+tomcat7负载均衡+redis缓存session

    在构建高性能、高可用性的Web应用系统时,"nginx+tomcat7负载均衡+redis缓存session"是一种常见的架构模式。这种模式结合了Nginx的反向代理和负载均衡能力,Tomcat作为Java应用服务器处理业务逻辑,而Redis则用于...

    "优雅的SSM框架"进行完善(页面分离+nginx负载均衡+tomcat集群)

    Maven Spring(IOC DI AOP 声明式事务处理) SpringMVC(支持Restful风格) ...Nginx静态加载、负载均衡 基于keepalived的nginx高可用方案 Tomcat集群(Redis共享Session) Sping Shiro权限控制(待完善)

    nginx反向代理、均衡负载、缓存静态资源、URL重定向、读写分离.zip

    nginx反向代理、负载均衡、缓存静态资源、URL重定向、读写分离.zip

    nginx负载均衡

    【Nginx负载均衡】是网络服务器架构中的一个重要概念,主要目的是通过分散网络流量来提高系统的可用性和响应速度。Nginx作为一个高性能的HTTP和反向代理服务器,它能够有效地处理高并发请求,并且可以同时支持Rails...

    redis+tomcat+nginx负载均衡配置

    在构建高性能、高可用性的Web服务时,"redis+tomcat+nginx负载均衡配置"是一个常见且有效的架构模式。这个组合充分利用了各个组件的优势,确保系统稳定、响应快速,并能够处理大量的并发请求。以下是关于这个配置的...

    FreeBSD下用nginx配置简单web负载均衡

    #### 二、在FreeBSD 8.1下配置Nginx负载均衡步骤 ##### 安装Nginx 在FreeBSD环境下,Nginx的安装过程相对简单,可通过ports系统完成: ``` cd /usr/ports/www/nginx make install clean ``` ##### 配置Nginx.conf...

    Nginx与Tomcat配置实现负载均衡.zip

    以下是配置Nginx负载均衡的基本步骤: 1. **安装Nginx**:在你的服务器上安装Nginx,确保它能够正常启动和运行。 2. **配置Nginx**:打开Nginx的配置文件(通常为`/etc/nginx/nginx.conf`或`/usr/local/nginx/conf...

    Nginx配置负载均衡和缓存详解

    ### Nginx配置负载均衡和缓存详解 #### 负载均衡概念解析 随着互联网技术的迅猛发展,网络服务的访问量与日俱增,单一服务器已经难以满足大规模访问需求。为此,**负载均衡**作为一种高效且经济的解决方案应运而生...

    nginx应用部署和负载均衡应用

    【Nginx应用部署与负载均衡】 Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于互联网领域,提供高效稳定的服务。它以其轻量级的进程模型、强大的并发处理能力以及优秀的性能表现,成为许多企业的首选Web...

    Nginx-配置负载均衡的几种方式

    首先,我们需要了解Nginx负载均衡的基本配置步骤: 1. **创建Upstream块**:在`http`节点下添加`upstream`节点,该节点用于定义一组后端服务器,Nginx将根据配置策略将请求分发给这些服务器。 ```nginx upstream ...

Global site tag (gtag.js) - Google Analytics