作者:niumd
Blog:http://ari.iteye.com
转蝲h明出处,谢谢
开发的应用采用F5负蝲均衡交换机,F5请求{发给5台hp unix服务器,每台服务器有多个webserver实例Q对外提供web服务和socket{接口服务。之初,曾有个小的疑问Z不采用开源的apache、Nginx软g负蝲QF5讑֤动辄几十万,h昂贵Q自׃个比较幼E的问题Q后l明白:F5是操作于IOS|络模型的传输层QNginx、apache是基于http反向代理方式Q位于ISO模型的第七层应用层。直白些是TCP UDP 和http协议的区别,Nginx不能为基于TCP协议的应用提供负载均衡?/p>
了解了二者之间的区别于应用场景,对Nginx产生厚的兴,阅读张宴?lt;实战Nginx>Q这?5q的伙子年L为M?妒忌Q,搞明白了大致原理和配|,Ubuntu10.10Qwindow下对Nginx+tomcat负蝲均衡做了配置试Q将全部h转发到tomcatQƈ未做静态,动态分开Q图片防盗链{配|?br />
Nginx 介绍
Nginx Q发韛_ engine xQ是一ƾ轻量的Web 服务器/反向代理服务器及电子邮gQIMAP/POP3Q代理服务器Qƈ在一个BSD-like 协议下发行?nbsp; 其特Ҏ占有内存,q发能力强,事实上nginx的ƈ发能力确实在同类型的|页伺服器中表现较好.目前中国大陆使用nginx|站用户有:新浪、网易?腾讯,另外知名的微|志Plurk也用nginx?/p>
上面的全是Nginx介绍基本上是废话Q下面{入正题,图文l合展示基本配置Q首先是window环境、其ơ是Ubuntu环境QVbox虚拟Q。本文主要基于Nginx下配|两台tomcatQ结构如下图Q?br />
Window xp环境QNginx+Tomcat6
1、下载地址
http://nginx.org/en/download.html Q这里我们推荐下载稳定版Qstable versionsQ,本文采用nginx-0.8.20?/p>
2、目录结?/strong>
Nginx-
|_ conf 配置目录
|_ contrib
|_ docs 文档目录
|_ logs 日志目录
|_ temp 临时文g目录
|_ html 静态页面目?/p>
|_ nginx.exe ȝ?/p>
window下安装Nginx极其单,解压~到一个无I格的英文目录即可(个h习惯Q担心中文出问题Q,双击nginx启动Q这里我安装刎ͼD:\server目录Q下面涉及到的tomcat也安装在此目录?/p>
DOS环境启动
若果惛_止nginxQdos环境q行命oQnginx -s stop
3、nginx.conf配置
Nginx配置文g默认在conf目录Q主要配|文件ؓnginx.confQ我们安装在D:\server\nginx-0.8.20、默认主配置文g为D:\server\nginx-0.8.20\nginx.conf。下面是nginx作ؓ前端反向代理服务器的配置?/p>
#Nginx所用用户和l,window下不指定 #user niumd niumd; #工作的子q程数量Q通常{于CPU数量或?倍于CPUQ? worker_processes 2; #错误日志存放路径 #error_log logs/error.log; #error_log logs/error.log notice; error_log logs/error.log info; #指定pid存放文g pid logs/nginx.pid; events { #使用|络IO模型linuxepollQFreeBSD采用kqueueQwindow下不指定? #use epoll; #允许最大连接数 worker_connections 2048; } http { include mime.types; default_type application/octet-stream; #定义日志格式 #log_format main '$remote_addr - $remote_user [$time_local] $request ' # '"$status" $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log off; access_log logs/access.log; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; client_header_buffer_size 1k; large_client_header_buffers 4 4k; sendfile on; tcp_nopush on; tcp_nodelay on; #keepalive_timeout 75 20; include gzip.conf; upstream localhost { #Ҏip计算请求分配各那个后端tomcatQ许多h误认为可以解决session问题Q其实ƈ不能? #同一机器在多|情况下Q\由切换,ip可能不同 #ip_hash; server localhost:18081; server localhost:18080; } server { listen 80; server_name localhost; location / { proxy_connect_timeout 3; proxy_send_timeout 30; proxy_read_timeout 30; proxy_pass http://localhost; } } }
代理讄如下Q?/p>
proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k;
gzip压羃相关配置如下Q?/p>
gzip on; gzip_min_length 1000; gzip_types text/plain text/css application/x-javascript;
4、Tomcat配置
对于tomcat大家都很熟悉Q只需要修改server.xml配置文g卛_Q这里我们以apache-tomcat-6.0.14ZQ分别在server目录Q解压羃q命名ؓQapache-tomcat-6.0.14_1、apache-tomcat-6.0.14_2?/p>
W一处端口修改:
<!-- 修改port端口Q?8006 俩个tomcat不能重复Q端口随意,别太?-> <Server port="18006" shutdown="SHUTDOWN">
W二处端口修改:
<!-- port="18081" tomcat监听端口Q随意设|,别太?--> <Connector port="18081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
W三处端口修改:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
Engine元素增加jvmRoute属性:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
两个tomcat的端口别重复Q保证能启动hQ另一个tomcat配置希捷省略Q监听端口ؓ18080Q附件中我们上传所有的配置信息?/p>
5、验证配|与试负蝲均衡
首先试nginx配置是否正确Q测试命令:nginx -t (默认验证:conf\nginx.conf),也可以指定配|文件\径?/p>
此例nginx安装目录QD:\server\nginx-0.8.20Qdos环境下图画面成功CZQ?br />
其次验证tomcatQ启动两个tomcatQ不出现端口冲突即ؓ成功Qtomcat依赖的java{搞“挨踢”的就废话不说了)Q?/p>
最后验证配|负载均衡设|,http://localhost/ ?a href="http://localhost/index.jsp" mce_href="http://localhost/index.jsp">http://localhost/index.jsp 。我修改了index.jsp面Q增加日志输Z息,便于观察。注意:左上角小猫头上的Qaccess tomcat2、access tomcat1。说明访问了不同的tomcat?/p>
xwindow下nginx+tomcat负蝲均衡配置l束Q关于tomcat Session的问题通常是采用memcachedQ或者采用nginx_upstream_jvm_route Q他是一?Nginx 的扩展模块,用来实现Z Cookie ?Session Sticky 的功能。如果tomcatq多不徏议session同步Qserver间相互同步session很耗资源,高ƈ发环境容易引起Session风暴。请Ҏ自己应用情况合理采纳session解决Ҏ?/p>
作者:niumd
Blog:http://ari.iteye.com
Ubuntu10.10环境QNginx+Tomcat6
我们下面单说下ubuntu10.10下如何安装配|,主要以图片ؓ主,单解释?/p>
1、下载Nginx
地址Q?a mce_>http://nginx.org/en/download.html Qlinux版本Qnginx-0.8.20.tar.。解压羃命oQ?/p>
tar -zxvf nginx-0.8.20.tar.gz
2、编译安装Nginx
Nginx依赖一些其他PCRE、opensslQ依赖libssl-devQ,本hW记本Ubuntu环境已经安装PCREQ仅需安装依赖的opensslQ下面我们简单说下如何安装PCRE和openssl{?/p>
PCRE下蝲地址Q?a href="ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/" mce_href="ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/">ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
tar zxvf pcre-8.01.tar.gz cd pcre-8.01 sudo ./configure sodu make sodu make install
openssl通过apt-get install安装Q命令、截囑֦下:
sudo apt-get install openssl sudo apt-get install libssl-dev //如缺其他包Q请采用此方法安装,ubuntu有依赖提C?
依赖的Y件包安装完毕Q下面来~译NginxQ?/p>
#window׃n目录软g拯到当前工作目? cp /mnt/fileshare/nginx-0.8.20.tar.gz ./ #解压~Y件包 tar zxvf nginx-0.8.20.tar.gz cd nginx-0.8.20 //~译源码,默认使用nobodyQ指定本机已存在的用Pl,启用nginx-status功能Q监控nginx状态。启动debug sudo ./configure --user=niumd --group=niumd --with-debug --with-http_stub_status_module sudo make sudo make install
截图 如下Q?br />
安装l果截图如下Q?/p>
~译安装正确l束Q按照上qwindow下方法检查默认配|,然后在默认配|下启动nginxQ访?a mce_>http://127.0.0.1 Q如下图说明成功
Nginx配置成功后我们对window下nginx.conf做修改Q如下:
#Nginx所用用户和l? user niumd niumd; #工作的子q程数量Q通常{于CPU数量或?倍于CPUQ? worker_processes 2; #错误日志存放路径 #error_log logs/error.log; #error_log logs/error.log notice; error_log logs/error.log info; #指定pid存放文g pid logs/nginx.pid; events { #使用|络IO模型linuxepollQFreeBSD采用kqueue use epoll; #允许最大连接数 worker_connections 2048; } http { include mime.types; default_type application/octet-stream; #定义日志格式 #log_format main '$remote_addr - $remote_user [$time_local] $request ' # '"$status" $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log off; access_log logs/access.log; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; client_header_buffer_size 1k; large_client_header_buffers 4 4k; sendfile on; tcp_nopush on; tcp_nodelay on; #keepalive_timeout 75 20; include gzip.conf; upstream localhost { #ip_hash #ip_hash; server localhost:18081; server localhost:18080; } server { listen 80; server_name localhost; location / { proxy_connect_timeout 3; proxy_send_timeout 30; proxy_read_timeout 30; proxy_pass http://localhost; } } }
对于上面关于ubuntu下Nginx配置和window下基本相同,区别在用的IO|络模型Qlinux下徏议用epollQ另外就是运行所用的用户和组Q?/p>
3、配|tomcat
请参考window下配|,完全相同?/p>
4、启动停止nginx
ubuntu下启动nginx与windowE有不同Q大致启动停止方法如下?/p>
#nginx目录执行 sbin/nginx 或通过-c 指定配置文g sbin/nginx -c usr/local/nginx8.20/conf/nginx/conf
niumd@niumd-laptop:/usr/local/nginx$ pwd /usr/local/nginx niumd@niumd-laptop:/usr/local/nginx$ sudo sbin/nginx -t the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok configuration file /usr/local/nginx/conf/nginx.conf test is successful niumd@niumd-laptop:/usr/local/nginx$ sudo sbin/nginx -v nginx version: nginx/0.8.20 niumd@niumd-laptop:/usr/local/nginx$ sudo sbin/nginx -V nginx version: nginx/0.8.20 built by gcc 4.4.3 (Ubuntu 4.4.3-4ubuntu5) configure arguments: --user=niumd --group=niumd --with-debug --with-http_sub_module niumd@niumd-laptop:/usr/local/nginx$ sudo sbin/nginx niumd@niumd-laptop:/usr/local/nginx$ ps -ef|grep nginx root 5158 1 0 22:32 ? 00:00:00 nginx: master process sbin/nginx niumd 5159 5158 0 22:32 ? 00:00:00 nginx: worker process niumd 5161 1577 0 22:32 pts/0 00:00:00 grep --color=auto nginx niumd@niumd-laptop:/usr/local/nginx$
我们通过ps -ef|grep nginx,看到如下l果:
注意Q在启动时linux提示一句警告【warn?#8230;…Q是因ؓ我们讄?#允许最大连接数 worker_connections 2048Q超qlinux默认1024的限制?/p>
停止Qkill -信号cd pid
nginx/logs目录下有个nginx。pid的文Ӟ此文件记录了每次q行的pidQ也可以通过ps命o查询?/p>
信号cd如下Q?/p>
信号cd | 描述 |
RERM.INT | 快速关?/td> |
HUP | qx重启Q加载配|?/td> |
USR1 | 重新加蝲日志 |
USER2 | qx升执行E序 |
WINCH | 从容关闭工作q程 |
QUIT | 从容关闭 |
参考资料:
http://www.oschina.net/bbs/thread/9301
oschina.net 生配置Q此|站采用java语言QnginxQtomcat服务器?/p>
张宴Q?lt;<实战Nginx>>
Ubuntu11.04一发布p不及待的鲜Q虚拟机环境不支持Unity 3D,试了下Unity 2DQ效果很炫。安装很单,l大家分享下?/p>
Terminal 键入如下命oQ?/span>
sudo add-apt-repository ppa:unity-2d-team/unity-2d-daily sudo apt-get update sudo apt-get install unity-2d
q三行命令就不解释,Ubuntu新手老手都应该清楚,l过10-20分钟的等待(取决你的|速和选择更新源)QUbuntu安装Unity-2d和依赖包Q安装完毕,log outQ这Ҏwindows强,xp都是提示重启的?/p>
上图Q登陆界面选择Unity 2D?/p>
上图U桌面Q?/span>
Linux提供了用h制例行Q务的命ocrontabQ常用于每间隔一定时间@环执行一些脚本,此处我们暂时UCؓQLinux定时d?/p>
#问下男hcrontab的用? man crontab crontab [ -u user ] { -l | -r [ -i ] | -e } 参数Q? -uQ只有root才可以执行此d -l Q查看crontab工作内容 -eQ编辑crontab工作内容 -r Q删除crontab工作内容
crontab应用场景举例Q定旉集远E服务器文g
手机发送短信,短信回以文本形式记录在交换机上Ş成短信话单,短信话单通常是达?MQ如果不?m则每五分钟Ş成一个话单(不同的交换机可能存在差异Q。如果对话单计费Q当焉要对短信话单q行采集Q然后进行后l计费工作。我们假N用shell或者python脚本采集Q暂且用shell举例Q假N集shell为acquisition.sh Q每间隔1分钟采集一ơ?/p>
命ol端执行Q?/p>
#标示~辑例行d crontab -e
然后我们会看到如下画面Q?/p>
已经q入VI ~辑模式Q在里面输入下面q行Q按下ESC->Q?>wq׃存了
#每间隔一分钟执行一ơ采集脚? */1 * * * * crontab /路径/acquisition.sh
crontab的格式ؓQ?/p>
分钟 时 ?nbsp; ??crontab 待执行命令或者脚?nbsp;
其中Q? 代表M旉都接受,如上例小时、日期、月份、周都ؓ*
Q代表分割时间段Q如分钟修改为:0,1,2,3,4,5 即Q何小时地1,2Q?#8230;…6分钟都执?/p>
- 代表旉D上面的每间隔一分钟可以标示?-59Q?/p>
/n 代表每间隔,分钟位置Q?/5标示每间隔五分钟
注意Q??之间只有一个空|
EOF