三里屯摇滚 发表于 2012-01-10 22:11

nginx在openBSD下跑反向代理负载均衡

nginx在openBSD下跑反向代理负载均衡






1,本文引用的资料:
         首先感谢张宴关于nginx.conf的详细配置的详解,http://blog.s135.com ,但我今天只做了最简单的,所以那些详细的日志啦、缓存啦什么都没有根据具体的虚拟主机做具体设定。
         然后感谢开发OpenBSD和Redhat的那些牛人,并感谢IBM提供的这个页面http://www.ibm.com/developerworks/cn/web/wa-lo-nginx/现在貌似打不开,我是看的本机另存的页面。
         感谢young_king,国内的OpenBSD资料少的可怜啊,还要谢谢您的搭建OpenBSD+Nginx+php+mysql的教程贴,希望您以后多发这类帖子哦?(在本站的转帖http://www.linuxtone.org/thread-1822-1-1.html)
         感谢论坛的地头蛇老曹大人NetSeek,想想这段时间里老曹可为小曹的一些幼稚问题郁闷个够呛,几欲拍桌子砸键盘,不要生气啊,俺基础差点,但总会有进步的。
         同时国际惯例感谢下小鱼儿、老冉、老高、老陈等牛银……感谢一下一直在使用但也一直未掏钱的Vmware      
2,本文的实验环境:
         当时做完了OpenBSD+Nginx+php+mysql的实验(在本站的转帖http://www.linuxtone.org/thread-1822-1-1.html)直接将该虚拟机克隆两份。如果对下文中的“二号机、三号机”配置有兴趣的童鞋可以看看那个帖子
         一号机,(192.168.118.135)将旧的和mysql/php有关系的nginx.conf干掉,重写nginx.conf。也就是说不启用php/mysql,只用本机的nginx做反向代理。
         二号机,(192.168.118.136)保持着原有的架构,并在/var/nginx/html下面新建一个index.php页面,页面内容自定啦,但必须和下面的三号机有所区别。
         三号机,(192.168.118.137)保持着原有的架构,并在/var/nginx/html下面新建一个index.php页面,页面内容自定啦,但必须和上面的二号机有所区别。      
      四号机,(192.168.118.132)以前做实验用过的一个redhat5的机器,是一个tomcat服务器,只装了jdk和tomcat并设置了环境变量(如何设置这个不用说了吧?)。
         客户机,本人的winxp,也是上面四个试验机的宿主机,改过了本机的hosts文件。C:\WINDOWS\system32\drivers\etc\hosts ,这个文件没后缀名,但可以用写字板或记事本打开。加入如下内容:
               192.168.118.135                test1.com
               192.168.118.135                test2.com
               192.168.118.135                test3.com
         也就是说,要把三个域名的IP都指到一号试验机上去。
3,首先启动二、三、四号机器,在测试机上打开这三台机器的web页面,确认各自的nginx、php、tomcat工作正常,其中二、三号机器是nginx+php,用的80端口,四号机器一个裸奔的tomcat,用的 8080端口。

4,如下是重写并可应用的一号机的nginx.conf文件。对部分内容我做了特殊标注,大部分配置可以参考张宴的blog或本站关于nginx设定的一些文章。 cat/etc/nginx/nginx.conf   
#user nobody;
worker_processes 1;

error_log/var/log/nginx/error.logcrit;
pid      /var/run/nginx.pid;
#这里的nginx是用OpenBSD自己pkg 包管理系统装上去的,所以log等信息位置和编译安装的不太一样。

worker_rlimit_nofile 51200;
events
{
   use kqueue;
#epoll是linux最优模式,经实验,在openBSD下不可用这种模式。百度之发现有如下模式:
#
#nginx以module的方式提供了select语义的多种实现:poll   devpollepolleventportkqueuertsig后面4种,都是BSD/Linux为加速IO操作而提供的异步IO模型
#
#我不知道该用哪个模式,就随便乱试,发现用kqueue可以跑起来,就用这种模式了。如果有大侠知道哪个模式效率更高更适合OpenBSD,请高手赐教
   worker_connections 51200;
}
http
{
   include       mime.types;
   default_typeapplication/octet-stream;
   #charsetgb2312;
   
    server_names_hash_bucket_size 128;
   client_header_buffer_size 32k;
   large_client_header_buffers 4 32k;
      
   sendfile on;
   tcp_nopush   on;
   keepalive_timeout 3;
#为了做测试,故意把keepalive改小的,生产环境设置60s吧。
   tcp_nodelay on;
   #gzip on;
   #gzip_min_length1k;
   #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;
   upstreamtest1.com{
         server   192.168.118.136:80;
         server   192.168.118.137:80;
      
   }

    upstreamtest2.com{
         server   192.168.118.136:80 weight=10;
         server   192.168.118.137:80;
   # weight是权重的意思,默认权重是1,
         
   }

    upstreamtest3.com
         {
               server   192.168.118.132:8080;

      }

server {
         listen   80;
         server_name test1.com;
               #这里的test1是监听的客户端访问的域名
         location /{
         proxy_pass            http://test1.com;
               #这里的test1是上文提到的upstream啦,别和客户访问的域名弄混了。
         proxy_set_headerX-Real-IP$remote_addr;
         }
         }



server {
         listen   80;
         server_name test2.com;
         location /{
         proxy_pass            http://test2.com;
         proxy_set_headerX-Real-IP$remote_addr;
         }
         }

server {
         listen   80;
         server_name test3.com;
         location /{
         proxy_pass            http://test3.com;
         proxy_set_headerX-Real-IP$remote_addr;
         }
         }____________________________________________________   
5,启动一号机的nginx,测试开始了。
在本机访问http://test1.com/ http://test2.com/http://test3.com/
请注意test1是否在二号、三号机之间不停切换?在上图中写到要让二号三号机上的index.php文件不太一样,就是为了区分两台web服务器的。如果不怎么切换,请考虑你的浏览器的缓存问题。如果还不切换,可以考虑down掉一台机器的nginx,看访问请求是否会转到另一台服务器上。
test2和test1的情况类似,只是test2做了权重设置,所以二号机应用的几率要比三号机大很多,如果总是轮不到三号机接任务,可以考虑更改权重实验一下,也可以考虑把二号机的nginx暂停一下。
test3的要求很简单,能转到四号机的8080端口,把tomcat的那个默认控制界面show出来就可以了。
6,测试暂告一段落,有时间研究一下张宴在CU线下活动发布的那个幻灯片上的那些高级参数,研究好了会把新的nginx.conf贴出来分享给大家。

阳光的扣子 发表于 2012-01-10 22:11

谢谢分享
页: [1]
查看完整版本: nginx在openBSD下跑反向代理负载均衡