歡迎您光臨本站 註冊首頁

nginx在openBSD下跑反向代理負載均衡

←手機掃碼閱讀     火星人 @ 2014-03-03 , reply:0

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.log  crit;
pid        /var/run/nginx.pid;
#這裡的nginx是用OpenBSD自己pkg 包管理系統裝上去的,所以log等信息位置和編譯安裝的不太一樣。

worker_rlimit_nofile 51200;
events
{
     use kqueue;
#epoll是linux最優模式,經實驗,在openBSD下不可用這種模式。百度之發現有如下模式:
#
#nginx以module的方式提供了select語義的多種實現:poll   devpoll  epoll  eventport  kqueue  rtsig後面4種,都是BSD/Linux為加速IO操作而提供的非同步IO模型
#
#我不知道該用哪個模式,就隨便亂試,發現用kqueue可以跑起來,就用這種模式了。如果有大俠知道哪個模式效率更高更適合OpenBSD,請高手賜教
     worker_connections 51200;
}
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 3;
#為了做測試,故意把keepalive改小的,生產環境設置60s吧。
     tcp_nodelay on;
     #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;
     upstream  test1.com  {
         server   192.168.118.136:80;
         server   192.168.118.137:80;
      
     }

    upstream  test2.com  {
         server   192.168.118.136:80 weight=10;
         server   192.168.118.137:80;
   # weight是權重的意思,默認權重是1,
         
     }

    upstream  test3.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_header  X-Real-IP  $remote_addr;
         }
         }



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

server {
         listen   80;
         server_name test3.com;
         location /{
         proxy_pass              http://test3.com;
         proxy_set_header  X-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貼出來分享給大家。
《解決方案》

謝謝分享

[火星人 ] nginx在openBSD下跑反向代理負載均衡已經有573次圍觀

http://coctec.com/docs/service/show-post-1141.html