SlideShare ist ein Scribd-Unternehmen logo
1 von 24
使用 Nginx 轻松实现开源负载
         均衡


            张宴
     ( http://blog.s135.com)

          2008.9.20 北
          京
个人简介

• 张宴,曾在新浪等公司任系统工程师、系统架
  构师。工作内容主要涉及:服务器系统架构设
  计与部署、系统运维与调优、网络故障解决、
  网站后端以及接口类 PHP 程序开发、 Unix 开
  源软件二次开发、服务器监控系统开发等。具
  有 CDN 部署,跨 IDC 的数据传输,电信网通南
  北互通,以及门户类 FLV 视频分享网站──新
  浪播客架构设计经验。
什么是 Nginx ?

• Nginx (“engine x”) 是俄罗斯人 Igor
  Sysoev( 塞索耶夫 ) 编写的一款高性能的 HTTP
  和反向代理服务器。
• Nginx 已经在俄罗斯最大的门户网站──
  Rambler Media ( www.rambler.ru)上运行了
  3 年时间,同时俄罗斯超过 20% 的虚拟主机平台
  采用 Nginx 作为反向代理服务器。
• 在国内,已经有 新浪博客、新浪播客、网易新
  闻、六间房、 56.com 、 Discuz! 、水木社区、
  豆瓣、 YUPOO 、海内、迅雷在线 等多家网站使
  用 Nginx 作为 Web 服务器或反向代理服务器
  。
使用 Nginx 做七层负载均衡的理由

• 1 、高并发连接:官方测试能够支撑 5 万
  并发连接,在实际生产环境中跑到 2 ~ 3
  万并发连接数。
• 2 、内存消耗少:在 3 万并发连接下,开
  启的 10 个 Nginx 进程才消耗 150M 内存
  ( 15M*10=150M )。
• 3 、配置文件非常简单:风格跟程序一样
  通俗易懂。
• 4 、成本低廉: Nginx 为开源软件,可以
  免费使用。而购买 F5 BIG-
  IP 、 NetScaler 等硬件负载均衡交换机
使用 Nginx 做七层负载均衡的
                       理由

• 5 、支持 Rewrite 重写规则:能够根据
  域名、 URL 的不同,将 HTTP 请求分到
  不同的后端服务器群组。
• 6 、内置的健康检查功能:如果 Nginx
  Proxy 后端的某台 Web 服务器宕机了
  ,不会影响前端访问。
• 7 、节省带宽:支持 GZIP 压缩,可以
  添加浏览器本地缓存的 Header 头。
• 8 、稳定性高:用于反向代理,宕机的概
  率微乎其微。
Nginx 负载均衡的典型应用
硬件、软件七层
负载均衡对比:
NetScaler
与
Nginx
硬件、软件七层
负载均衡对比:
NetScaler
与
Nginx
五分钟搞定 Nginx 负载均衡
编译安装 Nginx

1 、创建供 Nginx 使用的组和帐号:
/usr/sbin/groupadd www -g 48
/usr/sbin/useradd -u 48 -g www www

2 、编译安装 rewrite 模块支持包
wget
   ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.7.t
   ar.gz
tar zxvf pcre-7.7.tar.gz
cd pcre-7.7/
./configure
make && make install
cd ../
编译安装 Nginx

3 、编译安装 Nginx
wget http://sysoev.ru/nginx/nginx-0.7.17.tar.gz
tar zxvf nginx-0.7.17.tar.gz
cd nginx-0.7.17/
./configure --user=www --group=www --prefix=/usr/local/nginx
   --with-http_stub_status_module --with-http_ssl_module
make && make install
cd ../

4 、备份默认 nginx.conf 配置文件
mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.old
创建 nginx.conf 配置文件 (1)

1 、创建 Nginx 配置文件
vi /usr/local/nginx/conf/nginx.conf

2 、输入配置文件内容
user www www;
worker_processes 8;

error_log /usr/local/nginx/logs/nginx_error.log crit;
pid     /usr/local/nginx/logs/nginx.pid;

worker_rlimit_nofile 51200;
events
{
  use epoll;
  worker_connections 51200;
}
创建 nginx.conf 配置文件 (2)

http
{
   include    mime.types;
   default_type application/octet-stream;
   #charset gb2312;

  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;

  sendfile on;
  tcp_nopush on;
  keepalive_timeout 60;

  tcp_nodelay on;
创建 nginx.conf 配置文件 (3)

#gzip on;
#gzip_min_length 1k;
#gzip_buffers 4 16k;
#gzip_http_version 1.0;
#gzip_comp_level 2;
#gzip_types     text/plain application/x-javascript text/css application/xml;
#gzip_vary on;
创建 nginx.conf 配置文件 (4)

upstream   web.abc.com {
  server   192.168.1.10:80;
  server   192.168.1.11:80;
  server   192.168.1.12:80;
  server   192.168.1.13:81;
}

upstream   squid.abc.com {
  server   192.168.1.20:80 weight=3;
  server   192.168.1.21:80;
  server   192.168.1.22:80;
}
创建 nginx.conf 配置文件 (5)
server
{
   listen 80;
   server_name www.abc.com *.abc.com;
   proxy_redirect off;

  # 后端的 Web 服务器可以通过 X-Forwarded-For 获取用户真实 IP
  proxy_set_header X-Forwarded-For $remote_addr;

  if ($request_uri ~* ".*.(js|css|gif|jpg|jpeg|png|bmp|swf)$")
  {
        proxy_pass http://squid.abc.com;
  }
  if ($request_uri ~* "^/view/(.*)$")
  {
        proxy_pass http://squid.abc.com;
  }
  proxy_pass http://web.abc.com;
创建 nginx.conf 配置文件 (6)

 # 定义日志格式
log_format access '$remote_addr - $remote_user [$time_local] $request '
       '"$status" $body_bytes_sent "$http_referer" '
       '"$http_user_agent" "$http_x_forwarded_for"';
# 打日志
access_log /usr/local/nginx/logs/access.log access;
创建 nginx.conf 配置文件 (7)

# 允许客户端请求的最大的单个文件字节数
client_max_body_size 10m;

 # 缓冲区代理缓冲用户端请求的最大字节数 可以理解为先保存到本地再传给用
户
 client_body_buffer_size 128k;

# 跟后端服务器连接的超时时间 _ 发起握手等候响应超时时间
proxy_connect_timeout 600;

 # 连接成功后 _ 等候后端服务器响应时间 _ 其实已经进入后端的排队之中等候处
理
 proxy_read_timeout 600;

 # 后端服务器数据回传时间 _ 就是在规定时间之内后端服务器必须传完所有的数
据
 proxy_send_timeout 600;
创建 nginx.conf 配置文件 (8)

         # 代理请求缓存区 _ 这个缓存区间会保存用户的头信息以供 Nginx 进行规则处理
        _ 一般只要能保存下头信息即可
         proxy_buffer_size 8k;

        # 同上 告诉 Nginx 保存单个用的几个 Buffer 最大用多大空间
        proxy_buffers  4 32k;

        # 如果系统很忙的时候可以申请更大的 proxy_buffers 官方推荐 *2
        proxy_busy_buffers_size 64k;

        #proxy 缓存临时文件的大小
        proxy_temp_file_write_size 64k;
    }
}

                                    配置文件编写完毕
启动 Nginx

/usr/local/nginx/sbin/nginx –t

如果屏幕显示以下两行信息,说明配置文件正确:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/nginx/conf/nginx.conf was tested
   successfully

那么,则可以启动 Nginx 服务:

ulimit -SHn 51200
/usr/local/nginx/sbin/nginx
不中断服务平滑修改 Nginx 配
                                                置
① 、修改 /usr/local/nginx/conf/nginx.conf 配置文件后,请执行以下命令检查配
    置文件是否正确:
/usr/local/nginx/sbin/nginx -t
如果屏幕显示以下两行信息,说明配置文件正确:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully

② 、这时,输入以下命令查看 Nginx 主进程号:
ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'
屏幕显示的即为 Nginx 主进程号,例如:
6302
这时,执行以下命令即可使修改过的 Nginx 配置文件生效:
kill -HUP 6302

或者用更简便的方法:
kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
编写每天定时切割 Nginx 日志的脚
                                      本
1 、创建脚本 /usr/local/nginx/sbin/cut_nginx_log.sh ,输入以下内容:
#!/bin/bash
# This script run at 00:00

# The Nginx logs path
logs_path="/usr/local/nginx/logs/"

mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d
     "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

2 、设置 crontab ,每天凌晨 00:00 切割 nginx 访问日志
crontab -e
输入以下内容:
00 00 * * * /bin/bash /usr/local/nginx/sbin/cut_nginx_log.sh
总结
1 、对于中、小型企业,如果没有资金去购买昂贵的四 / 七层负载均衡交换机,那么
   Nginx 是不错的七层负载均衡选择,并且可以通过 Nginx + Keepalived 实现
   Nginx 负载均衡器双机互备,任意一台机器发生故障,对方都能够将虚拟 IP 接
   管过去。




2 、对于有资金购买四 / 七层负载均衡交换机的大型网站, Nginx 也有其用武之地。
   以门户类网站为例, F5 BIG-IP 等四 / 七层交换机由于负责了全站多个产品的
   服务,并发数非常高,而内容转发规则等七层交换业务,用不到 F5 BIG-IP 的四
   层硬件芯片,极大地消耗了 F5 的 CPU 和内存资源,成为高并发应用的制约条件。
   而 Nginx 的出现,成为了 F5 BIG-IP 七层交换的有力补充。
结束




谢谢各位!

Weitere ähnliche Inhalte

Was ist angesagt?

聊聊我接触的集群管理
聊聊我接触的集群管理聊聊我接触的集群管理
聊聊我接触的集群管理rfyiamcool
 
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018Will Huang
 
课题三:Nginx基础知识
课题三:Nginx基础知识课题三:Nginx基础知识
课题三:Nginx基础知识Liu Allen
 
Node.js长连接开发实践
Node.js长连接开发实践Node.js长连接开发实践
Node.js长连接开发实践longhao
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建Liyang Tang
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用hugo
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on praticeKenny (netman)
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast sharerfyiamcool
 
Nodejs api server_implement
Nodejs api server_implementNodejs api server_implement
Nodejs api server_implementChi-wen Sun
 
Apache trafficserver
Apache trafficserverApache trafficserver
Apache trafficserverDin Dindin
 
Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程Simon Su
 
Squid安装配置
Squid安装配置Squid安装配置
Squid安装配置Yiwei Ma
 
Traffic server overview
Traffic server overviewTraffic server overview
Traffic server overviewqianshi
 
基于Fuel的超融合一体机
基于Fuel的超融合一体机基于Fuel的超融合一体机
基于Fuel的超融合一体机EdwardBadBoy
 
构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接 构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接 Renaun Erickson
 
基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送OpenRestyCon
 
Docker初识
Docker初识Docker初识
Docker初识hubugui
 
nodejs在微博前端开发中的应用
nodejs在微博前端开发中的应用nodejs在微博前端开发中的应用
nodejs在微博前端开发中的应用dong yuwei
 

Was ist angesagt? (19)

聊聊我接触的集群管理
聊聊我接触的集群管理聊聊我接触的集群管理
聊聊我接触的集群管理
 
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
 
课题三:Nginx基础知识
课题三:Nginx基础知识课题三:Nginx基础知识
课题三:Nginx基础知识
 
Node.js长连接开发实践
Node.js长连接开发实践Node.js长连接开发实践
Node.js长连接开发实践
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建
 
Docker應用
Docker應用Docker應用
Docker應用
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on pratice
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast share
 
Nodejs api server_implement
Nodejs api server_implementNodejs api server_implement
Nodejs api server_implement
 
Apache trafficserver
Apache trafficserverApache trafficserver
Apache trafficserver
 
Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程
 
Squid安装配置
Squid安装配置Squid安装配置
Squid安装配置
 
Traffic server overview
Traffic server overviewTraffic server overview
Traffic server overview
 
基于Fuel的超融合一体机
基于Fuel的超融合一体机基于Fuel的超融合一体机
基于Fuel的超融合一体机
 
构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接 构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接
 
基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送
 
Docker初识
Docker初识Docker初识
Docker初识
 
nodejs在微博前端开发中的应用
nodejs在微博前端开发中的应用nodejs在微博前端开发中的应用
nodejs在微博前端开发中的应用
 

Andere mochten auch

Learning Outcomes: Assessment of Multicultural Engagement at Puget Sound
Learning Outcomes: Assessment of Multicultural Engagement at Puget SoundLearning Outcomes: Assessment of Multicultural Engagement at Puget Sound
Learning Outcomes: Assessment of Multicultural Engagement at Puget SoundMichael Mage
 
Saadi vakhri hai shaan
Saadi vakhri hai shaanSaadi vakhri hai shaan
Saadi vakhri hai shaanPunjabi Movies
 
Unidad 9
Unidad 9Unidad 9
Unidad 9melmomi
 
Learning Outcomes: Coordinator for Student Engagement in International Programs
Learning Outcomes: Coordinator for Student Engagement in International ProgramsLearning Outcomes: Coordinator for Student Engagement in International Programs
Learning Outcomes: Coordinator for Student Engagement in International ProgramsMichael Mage
 
NAFSA Presentation
NAFSA PresentationNAFSA Presentation
NAFSA PresentationMichael Mage
 
El paso,tx presentation_rev
El paso,tx presentation_revEl paso,tx presentation_rev
El paso,tx presentation_revraffavillegas
 
Unidad 4 historia universal
Unidad 4 historia universalUnidad 4 historia universal
Unidad 4 historia universalmelmomi
 
In-Class Activity: Fighting Institutional Racism
In-Class Activity: Fighting Institutional RacismIn-Class Activity: Fighting Institutional Racism
In-Class Activity: Fighting Institutional RacismMichael Mage
 
Redeemer christ
Redeemer christRedeemer christ
Redeemer christvslides21
 

Andere mochten auch (17)

Resumes mw 2
Resumes mw 2Resumes mw 2
Resumes mw 2
 
Learning Outcomes: Assessment of Multicultural Engagement at Puget Sound
Learning Outcomes: Assessment of Multicultural Engagement at Puget SoundLearning Outcomes: Assessment of Multicultural Engagement at Puget Sound
Learning Outcomes: Assessment of Multicultural Engagement at Puget Sound
 
Saadi vakhri hai shaan
Saadi vakhri hai shaanSaadi vakhri hai shaan
Saadi vakhri hai shaan
 
Soal un bahasa indonesia smp 2012
Soal  un bahasa indonesia smp 2012Soal  un bahasa indonesia smp 2012
Soal un bahasa indonesia smp 2012
 
Prueba
PruebaPrueba
Prueba
 
Softskill umii
Softskill umiiSoftskill umii
Softskill umii
 
Puerto berrio
Puerto berrioPuerto berrio
Puerto berrio
 
Unidad 9
Unidad 9Unidad 9
Unidad 9
 
Learning Outcomes: Coordinator for Student Engagement in International Programs
Learning Outcomes: Coordinator for Student Engagement in International ProgramsLearning Outcomes: Coordinator for Student Engagement in International Programs
Learning Outcomes: Coordinator for Student Engagement in International Programs
 
Resume
ResumeResume
Resume
 
NAFSA Presentation
NAFSA PresentationNAFSA Presentation
NAFSA Presentation
 
Resume
ResumeResume
Resume
 
El paso,tx presentation_rev
El paso,tx presentation_revEl paso,tx presentation_rev
El paso,tx presentation_rev
 
Unidad 4 historia universal
Unidad 4 historia universalUnidad 4 historia universal
Unidad 4 historia universal
 
Distemper
DistemperDistemper
Distemper
 
In-Class Activity: Fighting Institutional Racism
In-Class Activity: Fighting Institutional RacismIn-Class Activity: Fighting Institutional Racism
In-Class Activity: Fighting Institutional Racism
 
Redeemer christ
Redeemer christRedeemer christ
Redeemer christ
 

Ähnlich wie 使用Nginx轻松实现开源负载均衡

高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践self study
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用redhat9
 
Nginx使用和模块开发
Nginx使用和模块开发Nginx使用和模块开发
Nginx使用和模块开发qingpiao1983
 
康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)Yiwei Ma
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newYiwei Ma
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Yiwei Ma
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Gelis Wu
 
Varnish简介
Varnish简介Varnish简介
Varnish简介fangdeng
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档xuebao_zx
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
 
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)acqua young
 
2012 php conf slide PIXNET 如何使用 php
2012 php conf slide   PIXNET 如何使用 php2012 php conf slide   PIXNET 如何使用 php
2012 php conf slide PIXNET 如何使用 phpronnywang_tw
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制maclean liu
 
icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介Kito Cheng
 
0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)Timothy Chen
 

Ähnlich wie 使用Nginx轻松实现开源负载均衡 (20)

高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用
 
Nginx使用和模块开发
Nginx使用和模块开发Nginx使用和模块开发
Nginx使用和模块开发
 
康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 new
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革
 
1~60
1~601~60
1~60
 
Varnish简介
Varnish简介Varnish简介
Varnish简介
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档
 
Berserk js
Berserk jsBerserk js
Berserk js
 
-Nginx book
 -Nginx book -Nginx book
-Nginx book
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
 
2012 php conf slide PIXNET 如何使用 php
2012 php conf slide   PIXNET 如何使用 php2012 php conf slide   PIXNET 如何使用 php
2012 php conf slide PIXNET 如何使用 php
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介
 
Html5
Html5Html5
Html5
 
0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)
 

使用Nginx轻松实现开源负载均衡

  • 1. 使用 Nginx 轻松实现开源负载 均衡 张宴 ( http://blog.s135.com) 2008.9.20 北 京
  • 2. 个人简介 • 张宴,曾在新浪等公司任系统工程师、系统架 构师。工作内容主要涉及:服务器系统架构设 计与部署、系统运维与调优、网络故障解决、 网站后端以及接口类 PHP 程序开发、 Unix 开 源软件二次开发、服务器监控系统开发等。具 有 CDN 部署,跨 IDC 的数据传输,电信网通南 北互通,以及门户类 FLV 视频分享网站──新 浪播客架构设计经验。
  • 3. 什么是 Nginx ? • Nginx (“engine x”) 是俄罗斯人 Igor Sysoev( 塞索耶夫 ) 编写的一款高性能的 HTTP 和反向代理服务器。 • Nginx 已经在俄罗斯最大的门户网站── Rambler Media ( www.rambler.ru)上运行了 3 年时间,同时俄罗斯超过 20% 的虚拟主机平台 采用 Nginx 作为反向代理服务器。 • 在国内,已经有 新浪博客、新浪播客、网易新 闻、六间房、 56.com 、 Discuz! 、水木社区、 豆瓣、 YUPOO 、海内、迅雷在线 等多家网站使 用 Nginx 作为 Web 服务器或反向代理服务器 。
  • 4. 使用 Nginx 做七层负载均衡的理由 • 1 、高并发连接:官方测试能够支撑 5 万 并发连接,在实际生产环境中跑到 2 ~ 3 万并发连接数。 • 2 、内存消耗少:在 3 万并发连接下,开 启的 10 个 Nginx 进程才消耗 150M 内存 ( 15M*10=150M )。 • 3 、配置文件非常简单:风格跟程序一样 通俗易懂。 • 4 、成本低廉: Nginx 为开源软件,可以 免费使用。而购买 F5 BIG- IP 、 NetScaler 等硬件负载均衡交换机
  • 5. 使用 Nginx 做七层负载均衡的 理由 • 5 、支持 Rewrite 重写规则:能够根据 域名、 URL 的不同,将 HTTP 请求分到 不同的后端服务器群组。 • 6 、内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了 ,不会影响前端访问。 • 7 、节省带宽:支持 GZIP 压缩,可以 添加浏览器本地缓存的 Header 头。 • 8 、稳定性高:用于反向代理,宕机的概 率微乎其微。
  • 10. 编译安装 Nginx 1 、创建供 Nginx 使用的组和帐号: /usr/sbin/groupadd www -g 48 /usr/sbin/useradd -u 48 -g www www 2 、编译安装 rewrite 模块支持包 wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.7.t ar.gz tar zxvf pcre-7.7.tar.gz cd pcre-7.7/ ./configure make && make install cd ../
  • 11. 编译安装 Nginx 3 、编译安装 Nginx wget http://sysoev.ru/nginx/nginx-0.7.17.tar.gz tar zxvf nginx-0.7.17.tar.gz cd nginx-0.7.17/ ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module make && make install cd ../ 4 、备份默认 nginx.conf 配置文件 mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.old
  • 12. 创建 nginx.conf 配置文件 (1) 1 、创建 Nginx 配置文件 vi /usr/local/nginx/conf/nginx.conf 2 、输入配置文件内容 user www www; worker_processes 8; error_log /usr/local/nginx/logs/nginx_error.log crit; pid /usr/local/nginx/logs/nginx.pid; worker_rlimit_nofile 51200; events { use epoll; worker_connections 51200; }
  • 13. 创建 nginx.conf 配置文件 (2) http { include mime.types; default_type application/octet-stream; #charset gb2312; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on;
  • 14. 创建 nginx.conf 配置文件 (3) #gzip on; #gzip_min_length 1k; #gzip_buffers 4 16k; #gzip_http_version 1.0; #gzip_comp_level 2; #gzip_types text/plain application/x-javascript text/css application/xml; #gzip_vary on;
  • 15. 创建 nginx.conf 配置文件 (4) upstream web.abc.com { server 192.168.1.10:80; server 192.168.1.11:80; server 192.168.1.12:80; server 192.168.1.13:81; } upstream squid.abc.com { server 192.168.1.20:80 weight=3; server 192.168.1.21:80; server 192.168.1.22:80; }
  • 16. 创建 nginx.conf 配置文件 (5) server { listen 80; server_name www.abc.com *.abc.com; proxy_redirect off; # 后端的 Web 服务器可以通过 X-Forwarded-For 获取用户真实 IP proxy_set_header X-Forwarded-For $remote_addr; if ($request_uri ~* ".*.(js|css|gif|jpg|jpeg|png|bmp|swf)$") { proxy_pass http://squid.abc.com; } if ($request_uri ~* "^/view/(.*)$") { proxy_pass http://squid.abc.com; } proxy_pass http://web.abc.com;
  • 17. 创建 nginx.conf 配置文件 (6) # 定义日志格式 log_format access '$remote_addr - $remote_user [$time_local] $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # 打日志 access_log /usr/local/nginx/logs/access.log access;
  • 18. 创建 nginx.conf 配置文件 (7) # 允许客户端请求的最大的单个文件字节数 client_max_body_size 10m; # 缓冲区代理缓冲用户端请求的最大字节数 可以理解为先保存到本地再传给用 户 client_body_buffer_size 128k; # 跟后端服务器连接的超时时间 _ 发起握手等候响应超时时间 proxy_connect_timeout 600; # 连接成功后 _ 等候后端服务器响应时间 _ 其实已经进入后端的排队之中等候处 理 proxy_read_timeout 600; # 后端服务器数据回传时间 _ 就是在规定时间之内后端服务器必须传完所有的数 据 proxy_send_timeout 600;
  • 19. 创建 nginx.conf 配置文件 (8) # 代理请求缓存区 _ 这个缓存区间会保存用户的头信息以供 Nginx 进行规则处理 _ 一般只要能保存下头信息即可 proxy_buffer_size 8k; # 同上 告诉 Nginx 保存单个用的几个 Buffer 最大用多大空间 proxy_buffers 4 32k; # 如果系统很忙的时候可以申请更大的 proxy_buffers 官方推荐 *2 proxy_busy_buffers_size 64k; #proxy 缓存临时文件的大小 proxy_temp_file_write_size 64k; } } 配置文件编写完毕
  • 20. 启动 Nginx /usr/local/nginx/sbin/nginx –t 如果屏幕显示以下两行信息,说明配置文件正确: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully 那么,则可以启动 Nginx 服务: ulimit -SHn 51200 /usr/local/nginx/sbin/nginx
  • 21. 不中断服务平滑修改 Nginx 配 置 ① 、修改 /usr/local/nginx/conf/nginx.conf 配置文件后,请执行以下命令检查配 置文件是否正确: /usr/local/nginx/sbin/nginx -t 如果屏幕显示以下两行信息,说明配置文件正确: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully ② 、这时,输入以下命令查看 Nginx 主进程号: ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}' 屏幕显示的即为 Nginx 主进程号,例如: 6302 这时,执行以下命令即可使修改过的 Nginx 配置文件生效: kill -HUP 6302 或者用更简便的方法: kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
  • 22. 编写每天定时切割 Nginx 日志的脚 本 1 、创建脚本 /usr/local/nginx/sbin/cut_nginx_log.sh ,输入以下内容: #!/bin/bash # This script run at 00:00 # The Nginx logs path logs_path="/usr/local/nginx/logs/" mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/ mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` 2 、设置 crontab ,每天凌晨 00:00 切割 nginx 访问日志 crontab -e 输入以下内容: 00 00 * * * /bin/bash /usr/local/nginx/sbin/cut_nginx_log.sh
  • 23. 总结 1 、对于中、小型企业,如果没有资金去购买昂贵的四 / 七层负载均衡交换机,那么 Nginx 是不错的七层负载均衡选择,并且可以通过 Nginx + Keepalived 实现 Nginx 负载均衡器双机互备,任意一台机器发生故障,对方都能够将虚拟 IP 接 管过去。 2 、对于有资金购买四 / 七层负载均衡交换机的大型网站, Nginx 也有其用武之地。 以门户类网站为例, F5 BIG-IP 等四 / 七层交换机由于负责了全站多个产品的 服务,并发数非常高,而内容转发规则等七层交换业务,用不到 F5 BIG-IP 的四 层硬件芯片,极大地消耗了 F5 的 CPU 和内存资源,成为高并发应用的制约条件。 而 Nginx 的出现,成为了 F5 BIG-IP 七层交换的有力补充。