单域多站点的子URI¶
为什么我们需要在一个域中为多站点使用SubURI¶
当你手头有很多网站时,该如何部署?它们之间应该是什么关系?如果你很有钱,且从不考虑金钱,那么你可以在一台服务器机器上部署它们一个站点。但是,正如你所知,我们程序员,并没有那么富有,所以...我们可能考虑在一台服务器机器上部署多站点,也许我们只想在只有一个网络接口卡的服务器机器上部署它们,这意味着只有一个IP地址。一个IP地址,有两种解析方式(如果出错,请告诉我),一种是虚拟主机(需要配置DNS服务器的A记录),另一种是多目录。在这里,我想谈谈第二种。
它看起来像什么¶
多目录部署方式,称之为子URI方式,看起来是这样的- 假设域名是 "pfg.com"(IP地址没问题),
- 有两个或更多的rails应用程序,app1,app2,... appN
- ubuntu 8.04服务器
- Web服务器是apache2.2
- Ruby 1.8.6
- mongrel-1.1.5(这是一个选项)
- Rails 2.1.x或Rails 2.2.x(有一些差异)
http://pfg.com/app1 http://pfg.com/app2 ... http://pfg.com/appN
接下来,我将告诉您如何配置它们。
如何在Rails应用程序中配置它们¶
我们需要配置三步,第一步是配置apache2.2,第二步是rails应用程序,最后一个是关于mongrel的。
配置apache2.2¶
首先,我想让rails应用程序以CGI方式运行。
我们添加一个VirtualHost块,监听所有端口
NameVirtualHost *
<VirtualHost *>
...
</VirtualHost>
之后,我们需要创建一个DocumentRoot,并将所有应用的符号链接都放在这里(不要链接到app*/public)。
<VirtualHost *>
DocumentRoot "/var/www/"
</VirtualHost>
#ls -l /var/www/
-lrwxrwxrwx ..... app1 -> /home/jean/app1
-lrwxrwxrwx ..... app2 -> /home/jiong/app2
...
-lrwxrwxrwx ..... appN -> /home/eric/appN
之后,我们有了虚拟主机和文档根,接下来我们需要添加Alias指令,针对所有rails应用程序。
<VirtualHost *>
DocumentRoot "/var/www/"
Alias /myapp1 "/var/www/app1/public/"
Alias /yourapp2 "/var/www/app2/public/"
Alias /hisappN "/var/www/appN/public"
</VirtualHost>
别名名称是子URI。**注意:这里不要将子URI名称与符号链接的名称相同,这很重要**
之后,我们需要配置Directory块,如下所示
...
Alias /myapp1 "/var/www/app1/public/"
<Directory "/var/www/app1/public/">
Options FollowSymLinks +ExecCGI
AllowOverride all
Order allow,deny
Allow from all
</Directory>
...
之后,apache2.2的配置就完成了。要以CGI方式运行,我们还需要配置rails应用程序。所以,请看下一部分。
其次,配置rails应用程序¶
进入你的rails应用程序,这样做
# cd /home/jiong/app1/config/
# vim environment.rb
=> add code:
Rails 2.1.x: add *ActionController::AbstractRequest.relative_url_root="/myapp1"* At the end of file (must the end of file.)
Rails 2.2.x, two way:
one is: add *ActionController::Base.relative_url_root="/myapp1"* At the end of file
other : add *config.action_controller.relative_url_root="/myapp1"* in the block.
没有此配置,访问网站时将显示错误:路由错误:{ /myapp1/ 错误} Get。
配置dispatch.cgi
# cd /home/jiong/app1/public/ # mv dispatch.cgi.example dispatch.cgi # chmod a+x dispatch.cgi # which ruby /usr/local/bin/ruby => It depend on your system. # vim dispatch.cgi => change the first line to #!/usr/local/bin/ruby test dispatch.cgi. # sudo -u www-data ./dispatch.cgi => success: will show the home page source code for you.
其他所有rails应用程序也应如此操作。
重新启动您的apache2.2服务器,然后您可以访问它们: http://pfg.com/myapp1/, http://pfg.com/yourapp2/, http://pfg.com/hisappN。
如果您只想以CGI方式运行,那么这就结束了。
第三,添加mongrel-1.1.5¶
Mongrel在apache2.2上运行,apache2.2使用代理。
首先,配置mongrel,进入您的rails应用程序
# cd /home/jiong/app1/ # mongrel_rails <TBD.> # ln -s /home/jiong/app1/config/mongrel_cluster.yml /etc/mongrel_cluster/app1.yml
您可以首先测试mongrel, http://127.0.0.1:8000/myapp1/...
然后,再次配置apache2.2,添加以下内容
...
<Directory ...>
...
</Directory>
<Proxy balancer://app1_cluster>
Order allow,deny
Allow from all
balancer 127.0.0.1:8000
balancer 127.0.0.1:8001
balancer 127.0.0.1:8002
</Proxy>
RewriteCond <TBD.>
RewriteRule ^/app1/?(.*)$ balancer://app1_cluster/$1 [QSA,L]
...
完成这些后,一切就绪。
注意¶
待办事项
由 Mischa The Evil 更新 近14年前 · 3次修订