Linux系统上配置Nginx+Mongrel cluster
Nginx不仅是一个小💉巧且高效的【gāo xiào de】HTTP服务器,也可以✍做一个高效的【gāo xiào de】负载均衡反向【héng fǎn xiàng】代理,通过它🦗接受用户的请求并分🔌发到多【fā dào duō】🏀个Mongrel进程可【jìn chéng kě】🥍以极大【yǐ jí dà】🛍提高Rails应用的【yīng yòng de】并发能力。下面介【xià miàn jiè】绍一下如何在🍷一台服务器上【wù qì shàng】配置❎Nginx + Mongrel cluster。
获得Nginx,这里我【zhè lǐ wǒ】🆗们假设大家是通过自💇己编译,并配置👕了默认🥁的编译的参数【de cān shù】,此处使用的是【yòng de shì】Nginx 0.5.x版【bǎn】。
配置Mongrel cluster
我们还💦需要获【xū yào huò】得Mongrel和其Cluster插件(用来方🥧便得启【biàn dé qǐ】动多个【dòng duō gè】📸Mongrel进程【jìn chéng】),如下通过🏻gem进行安装:
gem i -y mongrel mongrel_cluster
然后建立【lì】🚞mongrel_cluster的配置文件。进入🏓Rails应用即🕟你的程序的根部目录🥧(以下假【yǐ xià jiǎ】设【shè】/usr/rails),运行【yùn háng】:
mongrel_rails cluster::configure
然后🆖mongrel_cluster便会在🌋config目录下【mù lù xià】生成一【shēng chéng yī】个【gè】⛵mongrel_cluster.yml,内容如下:
---
log_file: log/mongrel.log
port: 3000
pid_file: tmp/pids/mongrel.pid
servers: 2
我们可以通过【yǐ tōng guò】修改其【xiū gǎi qí】中的设🖲置来更改mongrel_cluster的运行,这个范【zhè gè fàn】⛩例配置省略了【shěng luè le】一些其【yī xiē qí】🌧他参数,具体的参数的🕶含义如🌳下:
address: 指定绑定的地址
port: 指定🍅mongrel_cluster所运行【suǒ yùn háng】的【de】mongrel进程从🕔哪个端口开始绑定【bǎng dìng】😽
servers: 指定同【zhǐ dìng tóng】🍶时运行多少个【duō shǎo gè】mongrel进程,结合🗾port参数🥇,就是表示port到port+servers-1(含)的端口【de duān kǒu】将被使【jiāng bèi shǐ】用💕
environment: 指定【zhǐ dìng】Rails运行的🌵配置环【pèi zhì huán】境💉
user: 指定mongrel进程以【jìn chéng yǐ】🕤什么用【shí me yòng】户的身份运行🌽
group: 指定mongrel进程以【jìn chéng yǐ】🚺什么组的身份运行【yùn háng】👌
cwd: 指定mongrel运行的【yùn háng de】🔔根目录
log_file: 各个【gè gè】💦mongrel进程的🍡输出日【shū chū rì】志的位置,相对于cwd的目录,会在文👳件的扩展名之【zhǎn míng zhī】前加上【qián jiā shàng】各进程【gè jìn chéng】👸对应的👸端口号
pid_file: 各个【gè gè】mongrel进程的【jìn chéng de】🔋pid文件的🍍位置【wèi zhì】,相对于📑cwd的目录,会在文🖕件的扩展名之前加上【qián jiā shàng】各进程对应的端口号
大家可【dà jiā kě】以根据【yǐ gēn jù】🌏自己的具体情【jù tǐ qíng】❄况进行修改【xiū gǎi】。以下是一个完整的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
接下来【jiē xià lái】🧛便可以【biàn kě yǐ】启动🐌mongrel_cluster了,以下是🕊控制mongrel_cluster的命令【de mìng lìng】:
mongrel_rails cluster::start #启动【qǐ dòng】🅰
mongrel_rails cluster::restart #重启【chóng qǐ】🍱
mongrel_rails cluster::stop #停止【tíng zhǐ】🚚
配置Nginx负载均衡反向代理
利用【lì yòng】nginx的【de】upstream指令配置哪些服务器需要进【xū yào jìn】行负载【háng fù zǎi】🙏均衡。在这里👩也可以【yě kě yǐ】说直接【shuō zhí jiē】说告诉nginx mongrel_cluster在哪些🎏地址和端口上【duān kǒu shàng】,按照上👝面的【de】mongrel_cluster的【de】配置🐶,在🐾nginx中应该🐐这样写:
...
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指定了这批上游服务器【qì】的的名称,大家可【dà jiā kě】🛋以使用别的名字。每个server指令指定了一【dìng le yī】🏿个服务【gè fú wù】💕器【qì】,server指令还🥈支持别的参数【de cān shù】可以设【kě yǐ shè】🌄置重试次数和【cì shù hé】超时时🧛间以及【jiān yǐ jí】♑不同服【bú tóng fú】✈务器【qì】的权重🌳。
接下来【jiē xià lái】🤽配置🐟nginx在接受哪些http请求时【qǐng qiú shí】转发到mongrel cluster,因为nginx处理静态文件的速度【de sù dù】🛌远远高【yuǎn yuǎn gāo】于mongrel,所以一🎼般当请🌮求的路【qiú de lù】径不存在的时候才将【hòu cái jiāng】请求转🚓发到mongrel cluster:
server {
listen 80;
server_name example.com;
#设置服【shè zhì fú】🚺务器根目录为🎺rails应用的【yīng yòng de】😰public目录,这个目录下放了对外【le duì wài】的静态文件
root /usr/rails/public;
index index.html index.htm;
location / {
#转发时保留原🌽有请求🥑的【de】IP信息和【xìn xī hé】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 qiú】⛩的文件🥥不存在,转发到【zhuǎn fā dào】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 jiàn cí】🏨:Linux,Nginx,Mongrel,cluster
阅读本文后您有什么感想? 已有 人给出评价!
- 1
- 25
- 2
- 2
- 3
- 3