drupal多站点同步以及非80端口访问设置

用 Drupal 架设多站点同步(Master/Slave)
copy自: http://neil-cs.blogspot.com/2012/01/drupal-masterslave.html
* 写的很叼了,但要翻墙,笔记用

本机多站点共享数据很简单了这样

——————–

目标:
一个主站点 www.master.com
多个子站点 www.slave1.com、 www.slave2.com
站点间用户同步,登陆状态(session)同步……
使用drupal架设,只需要一套drupal代码根据不同站点的不同配置文件分割,当然也可以用多套代码。
配置文件:

sites/default/settings.php – for master.com
sites/ www.slave1.com/settings.php – for slave1.com
sites/ www.slave2.com/settings.php – for slave2.com

共享用户
分别安装master.com、slave1.com和slave2.com的drupal,安装的时候设置数据表前缀(master_、slave1_和slave2_)
修改sites/ www.slave1.com/settings.php

$db_prefix = array(
    'default' => 'slave1_',    // slave1.com 的表前缀为 slave1_
    'authmap' => 'master_',    // 对于共享的用户表使用主站master.com的数据, 表前缀为 master_
    'profile_fields' => 'master_',
    'profile_values' => 'master_',
    'role' => 'master_',
    'sequences' => 'master_',
    'sessions' => 'master_',
    'users' => 'master_',
    'users_roles' => 'master_',
);

修改sites/ www.slave2.com/settings.php

 

$db_prefix = array(
    'default' => 'slave2_',    // slave2.com 的表前缀为 slave2_
    'authmap' => 'master_',    // 对于共享的用户表使用主站master.com的数据, 表前缀为 master_
    'profile_fields' => 'master_',
    'profile_values' => 'master_',
    'role' => 'master_',
    'sequences' => 'master_',
    'sessions' => 'master_',
    'users' => 'master_',
    'users_roles' => 'master_',
);

这样,就实现了用户同步,现在可以在任意一个站点注册新用户,然后到其他站点登陆作为测试。
session同步
下载Shared Sign-On
在各个站点都安装Shared Sign-On
在这个例子里master.com是主站点,所以设置所有的站点(包括主站点)的Shared Sign-On Master URL 为 http://www.master.com/
好了,现在可以做到 session 同步了
还有高级点的多站点代码分开的实现可以参考 http://drupal.org/node/291373

 

小站本来是用两套drupal应用程序来管理两个站点的,数据库与drupal程序是1v1的关系。随即发现这样容易产生(1)安全漏洞,而且(2)管理,维护起来十分不便。听闻drupal 有一套很好的多站点管理机制,于是就google一下。
根据指引,我又重新回到了drupal程序里自带的INSTALL.txt中求解。
我希望达到如下需求:
1 . 用顶极域名停泊一个站。即 现在的 http://rainy.org/ .
2 . 其他子站都以目录的形式来展示:比如我的中文站用 : http://raincy.org/zh 作为入口。
3 . 各个站点都可以单独配置,单独展示,互不冲突。
4 . 各个子站独享一个数据库。
参考了INSTALL.txt 后,我惊喜地发现,里面的方法可以完全满足我的需要!太好了!现在翻译出来,给有需要的朋友 ^^

多站配置
———————–

了解了drupal的目录配置,我们回到第二点要求上,怎么能让站点通过http://example.com/sub 的方式访问呢? 方法很简单:只要在服务器的drupal根目录下建立一个symbol link 就可以了,比如要通过 http://raincy.org/zh 来访问中文子站,那么就把zh目录建立在arpoon.info 根目录里:

—DRUPAL_ROOT
|—files
|—includes
|—misc
|—modules
|—profiles
|—scripts
|—sites
|—themes
单套drupal安装程序可以管理多个用drupal搭建的站。而且每个站点都可以有自己个性化的配置。
除了主站(第一个建立的drupal站)之外,新加入的子站点目录都应该配置在sites 目录下(sites是drupal根目录下的一个子目录,可参考drupal架构研究–目录组织结构梳理)。每一个子站目录都应该有一个’settings.php’ 来指明配置信息。
最简单的方法是直接copy ./site/default/ 下 的settings.php到子站目录中。
新的子站目录有站点的url构成。如:对于新增站点:  www.example.com ,那么其配置文件settings.php 就应该是 sites/example.com/settings.php (注意这里如果我们可以通过’http://example.com来访问的话,目录名中的’www’是应该省略的).
当然新加入的站点不一定要一个不同的域名。可以把站点停靠在一个子域名上或者原有的drupal站的子目录下。例如可以是:example.com,sub.example.com,sub.example.com/site3 .这些都可以用在独立的drupal站上。那么相应的服务器上的配置应该是像下面这样:

sites/default/settings.php
sites/example.com/settings.php
sites/sub.example.com/settings.php
sites/sub.example.com.site3/settings.php
当drupal为站点查找配置信息时,(如  www.sub.example.com/site3), 就会按照下面的顺序来查找配置,并会先应用第一个找到的配置来设置站点.

sites/ www.sub.example.com.site3/settings.php
sites/sub.example.com.site3/settings.php
sites/example.com.site3/settings.php
sites/ www.sub.example.com/settings.php
sites/sub.example.com/settings.php
sites/example.com/settings.php
sites/default/settings.php
如果你配置时没有用标准的http服务端口,那么这个端口将会当作最深层的子域名,例如: http://www.example.com:8080/ 的配置将通过读取sites/8080. www.example.com/目录下的配置来运行。如果没有指定端口,那么drupal 将忽略带端口的目录,而读取没带端口的目录中的配置文件。就像一个真实子域名一样对待。
除了安装在标准目录中的模块和界面主题外,每一个站点都会有它自己的模块和界面主题。要用特定的模块和界面主题,可以在你的子站目录下建立一个’modules’和’themes’目录如下:

+—-arpoon.info (主站根目录)
+—-sites
| +—-arpoon.info.zh (子站根目录)
又例如:如果sub.example.com 有一个定制的theme 和一个定制的module,并且是只供此子站所用,不与其他站共享,那么就应该配置如下:
sites/sub.example.com/:
settings.php
themes/custom_theme
modules/custom_module

 

下面再说下,如果你的域名或者IP带着端口号,那么drupal访问起来各种对不起,那解决办法也很简单,打开setting.php文件,找到第281行如下

/**
* Base URL (optional).
*
* If Drupal is generating incorrect URLs on your site, which could
* be in HTML headers (links to CSS and JS files) or visible links on pages
* (such as in menus), uncomment the Base URL statement below (remove the
* leading hash sign) and fill in the absolute URL to your Drupal installation.
*
* You might also want to force users to use a given domain.
* See the .htaccess file for more information.
*
* Examples:
* $base_url = ‘http://www.example.com’;
* $base_url = ‘http://www.example.com:8888’;
* $base_url = ‘http://www.example.com/drupal’;
* $base_url = ‘https://www.example.com:8888/drupal’;
*
* It is not allowed to have a trailing slash; Drupal will add it
* for you.
*/
# $base_url = ‘http://www.example.com’; // NO trailing slash!

修改第281行,OK了。



更多

已留下 2 个脚印

  1. 现在这类的分享倒是很多呀

  2. 看了博主的文章,真的很有收获啊

留下足迹

网站地图 鲁ICP备11008518号-1

无觅相关文章插件,快速提升流量