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貼出來分享給大家。
《解決方案》
謝謝分享