Linux系統(tǒng)上配置Nginx+Mongrel cluster
Nginx不僅是一個(gè)小巧且高效的HTTP服務(wù)器,也可以做一個(gè)高效的負(fù)載均衡反向代理,通過(guò)它接受用戶的請(qǐng)求并分發(fā)到多個(gè)Mongrel進(jìn)程可以極大提高Rails應(yīng)用的并發(fā)能力。下面介紹一下如何在一臺(tái)服務(wù)器上配置Nginx + Mongrel cluster。
獲得Nginx,這里我們假設(shè)大家是通過(guò)自己編譯,并配置了默認(rèn)的編譯的參數(shù),此處使用的是Nginx 0.5.x版。
配置Mongrel cluster
我們還需要獲得Mongrel和其Cluster插件(用來(lái)方便得啟動(dòng)多個(gè)Mongrel進(jìn)程),如下通過(guò)gem進(jìn)行安裝:
gem i -y mongrel mongrel_cluster
然后建立mongrel_cluster的配置文件。進(jìn)入Rails應(yīng)用即你的程序的根部目錄(以下假設(shè)/usr/rails),運(yùn)行:
mongrel_rails cluster::configure
然后mongrel_cluster便會(huì)在config目錄下生成一個(gè)mongrel_cluster.yml,內(nèi)容如下:
---
log_file: log/mongrel.log
port: 3000
pid_file: tmp/pids/mongrel.pid
servers: 2
我們可以通過(guò)修改其中的設(shè)置來(lái)更改mongrel_cluster的運(yùn)行,這個(gè)范例配置省略了一些其他參數(shù),具體的參數(shù)的含義如下:
address: 指定綁定的地址
port: 指定mongrel_cluster所運(yùn)行的mongrel進(jìn)程從哪個(gè)端口開(kāi)始綁定
servers: 指定同時(shí)運(yùn)行多少個(gè)mongrel進(jìn)程,結(jié)合port參數(shù),就是表示port到port+servers-1(含)的端口將被使用
environment: 指定Rails運(yùn)行的配置環(huán)境
user: 指定mongrel進(jìn)程以什么用戶的身份運(yùn)行
group: 指定mongrel進(jìn)程以什么組的身份運(yùn)行
cwd: 指定mongrel運(yùn)行的根目錄
log_file: 各個(gè)mongrel進(jìn)程的輸出日志的位置,相對(duì)于cwd的目錄,會(huì)在文件的擴(kuò)展名之前加上各進(jìn)程對(duì)應(yīng)的端口號(hào)
pid_file: 各個(gè)mongrel進(jìn)程的pid文件的位置,相對(duì)于cwd的目錄,會(huì)在文件的擴(kuò)展名之前加上各進(jìn)程對(duì)應(yīng)的端口號(hào)
大家可以根據(jù)自己的具體情況進(jìn)行修改。以下是一個(gè)完整的mongrel_cluster.yml配置文件:
---
user: apache
cwd: /usr/rails/
log_file: log/mongrel.log
port: 3000
environment: production
group: apache
address: 127.0.0.1
pid_file: tmp/pids/mongrel.pid
servers: 5
接下來(lái)便可以啟動(dòng)mongrel_cluster了,以下是控制mongrel_cluster的命令:
mongrel_rails cluster::start #啟動(dòng)
mongrel_rails cluster::restart #重啟
mongrel_rails cluster::stop #停止
配置Nginx負(fù)載均衡反向代理
利用nginx的upstream指令配置哪些服務(wù)器需要進(jìn)行負(fù)載均衡。在這里也可以說(shuō)直接說(shuō)告訴nginx mongrel_cluster在哪些地址和端口上,按照上面的mongrel_cluster的配置,在nginx中應(yīng)該這樣寫(xiě):
...
http{
...
#upstream段要放在http段中
upstream mongrel {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
server 127.0.0.1:3003;
server 127.0.0.1:3004;
}
...
}
upstream指令后面的mongrel指定了這批上游服務(wù)器的的名稱,大家可以使用別的名字。每個(gè)server指令指定了一個(gè)服務(wù)器,server指令還支持別的參數(shù)可以設(shè)置重試次數(shù)和超時(shí)時(shí)間以及不同服務(wù)器的權(quán)重。
接下來(lái)配置nginx在接受哪些http請(qǐng)求時(shí)轉(zhuǎn)發(fā)到mongrel cluster,因?yàn)閚ginx處理靜態(tài)文件的速度遠(yuǎn)遠(yuǎn)高于mongrel,所以一般當(dāng)請(qǐng)求的路徑不存在的時(shí)候才將請(qǐng)求轉(zhuǎn)發(fā)到mongrel cluster:
server {
listen 80;
server_name example.com;
#設(shè)置服務(wù)器根目錄為rails應(yīng)用的public目錄,這個(gè)目錄下放了對(duì)外的靜態(tài)文件
root /usr/rails/public;
index index.html index.htm;
location / {
#轉(zhuǎn)發(fā)時(shí)保留原有請(qǐng)求的IP信息和HOST信息
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect false;
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f $request_filename.html) {
rewrite (.*) $1.html break;
}
#當(dāng)請(qǐng)求的文件不存在,轉(zhuǎn)發(fā)到mongrel cluster
if (!-f $request_filename) {
proxy_pass http://mongrel;
break;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
然后重啟Nginx,配置便成功了。
關(guān)鍵詞:Linux,Nginx,Mongrel,cluster
閱讀本文后您有什么感想? 已有
0
人給出評(píng)價(jià)!
- 1
- 25
- 2
- 2
- 3
- 3