Saturday, August 7, 2010

Cài đặt nhiều website trên cùng một mã nguồn

Nguồn: http://vn.360plus.yahoo.com/juice.info/article?mid=181

Bạn sử dụng Drupal CMS để xây dựng cho bản thân, bạn bè, khách hàng, ... và số website bạn cài đặt hiện giờ đã lên đến hàng chục? Chắc chắn bạn phải đối mặt với vấn đề: Khi có lỗi bảo mật phát sinh ở nhân Drupal hoặc ở một module cộng thêm nào đó, bạn phải cập nhật cho x/10 site hiện có của bạn. Công việc tưởng chừng như đơn giản, nhưng lại mất rất nhiều thời gian. Tuy nhiên, nếu (giả sử) 10 website của bạn được chứa cùng một server thì công việc có thể được giảm thiểu đáng kế: Cài đặt nhiều website trên cùng một mã nguồn.

Chúng ta có thể cài đặt nhiều website trên cùng một mã nguồn theo những bước sau

  1. (Quan trọng) Cấu hình cho {n} domain name của bạn cùng trỏ về một web server. Nếu không biết cấu hình như thế nào thì nhà cung cấp domain rất sẵn sàng trợ giúp bạn. Khi này, giả sử, ở web server của bạn có tập tin /home/username/public_html/test.html thì, khi truy cập qua YourDomain001.com/test.html hay YourDomain002.com/test.html hay ... thì nội dung hiển thị cũng phải là nội dung đang chứa trên web server của bạn.
  2. Tải mã nguồn Drupal (5.7)vào thư mục /public_html của bạn, sao cho, cấu trúc tập tin lúc này là:

    public_html/include/*
    public_html/misc/*
    public_html/modules/*
    public_html/profiles/*
    public_html/scripts/*
    public_html/sites/*
    public_html/themes/*
    public_html/.htaccess
    public_html/...

  3. Kết nối cơ sở dữ liệu: Để hoạt động, Drupal cần phải lấy được thông tin kết nối đến cơ sở dữ liệu. Tùy thuộc theo URL truy cập, để kết nối đến cơ sở dữ liệu, Drupal sẽ tìm tập tin settings.php trong thư mục sites/xxx/settings.php, với xxx là một trong những giá trị sau, có độ ưu tiên giảm dần (giả sử URL truy cập là http://www.drupal.org/mysite/test/):
    1. sites/www.drupal.org.mysite.test
    2. sites/drupal.org.mysite.test
    3. sites/org.mysite.test
    4. sites/www.drupal.org.mysite
    5. sites/drupal.org.mysite
    6. sites/org.mysite
    7. sites/www.drupal.org
    8. sites/drupal.org
    9. sites/org
    10. sites/default

    Như vậy, {n} website của bạn có thể hoạt động trên {n} cơ sở dữ liệu khác nhau nhưng chỉ sử dụng một mã nguồn Drupal. Và nếu như có lỗi bảo mật nghiêm trọng được phát hiện ở Drupal 5.7, cần chuyển sang 5.8, bạn chỉ cần upload một lần mà thôi.

  4. Module và Giao diện: Chắc chắn đến lúc này, chúng ta phát hiện một vài trở ngại xảy ra: Làm thế nào nếu như chúng ta muốn sử dụng module ABC ở site YourDomain001.com là phiên bản 1.0, còn ở site YourDomain002.com là phiên bản 2.0? Làm sao để theme XYZ hợp lệ ở site 1, còn site 2 thì không?
    Cũng theo quy tắc tìm kiếm tập tin settings.php ở bước trước, Drupal cũng sẽ tìm các module cộng thêm/giao diện tùy thuộc theo URL truy cập. Thí dụ, nếu bạn đặt theme XYZ ở dạng sites/YourSite001.com/themes/XYZ/*.* thì đương nhiên, theme này không hợp lệ khi mã nguồn được truy cập với domain khác YourSite001.com

Cài đặt multisite shared database

Hôm nay vào diễn đàn Drupal đọc và thấy một bài viết khá hay, xin phép chủ bài viết(bạn mrsinguyen) cho copy để lưu lại biết đâu có lúc dùng. Cám ơn bạn nhiều! Bài viết cụ thể như sau:

Giả sử domain của bạn là example.com và giờ cần tạo subdomain là: abc.example.com

  1. Trỏ thư mục của subdomain về chung với domain. Có nghĩa là sau khi xong bước này truy cập example.com và abc.example.com đều ra chung 1 kết quả (của example.com)

  2. Vào thư mục sites tạo thư mục con tên là: abc.example.com, trong thư mục này tạo các thư mục modules, themes, files (chmod 777 thư mục files).

  3. Copy file sites/default/settings.php qua thư mục sites/abc.example.com

  4. Dùng phpMyAdmin copy bảng variable thành abc_variable

  5. Chỉnh các thông tin của file sites/abc.example.com/settings.php cho đúng với database. Riêng phần prefix thì thành:

    $db_prefix = array(
    'default' => '', // Cái này trùng với của example
    'variable' => 'abc_',
    );

Như vậy là đã có 2 website chung database với bảng cấu hình riêng với nhau.

Hướng dẫn tạo Vitual Host (Multiple Website) trên Apache


Nguồn: http://freesvn.net/post/huong-dan-tao-vitual-host-multiple-website-tren-apache.php#ixzz1JqBXVL00

Virtual Host là một phương pháp để lưu trữ nhiều tên miền trên một máy tính bằng cách sử dụng một địa chỉ IP duy nhất. Điều này cho phép một máy để chia sẻ nguồn tài nguyên của nó, chẳng hạn như bộ nhớ và các chu trình xử lý, sử dụng tài nguyên hiệu quả hơn.

Một ứng dụng được sử dụng rộng rãi chia sẻ web hosting. Chia sẻ web hosting giá thấp hơn so với một máy chủ web chuyên dụng, vì điều này cho phép nhiều khách hàng được lưu trữ trên một máy chủ duy nhất.

Có 2 loại host ảo: IP-based và non-IP-based. IP-based virtual host là loại “cổ điển”, trong đó mỗi 1 host ảo trên máy chủ sẽ có 1 địa chỉ IP riêng, nghĩa là máy chủ có nhiều địa chỉ IP. Nhưng địa chỉ IP cũng là 1 tài nguyên, nên sẽ kinh tế hơn nếu có thể sử dụng cùng 1 địa chỉ IP cho nhiều host. Đó là đặc điểm của loại host ảo thứ 2: non-IP-based virtual host hay name virtual host. Với loại này, khi máy chủ nhận được 1 kết nối, nó sẽ không biết sử dụng host nào (vì nhiều tên host cùng có chung 1 địa chỉ IP). Vì vậy với giao thức HTTP/1.1 mới, trình duyệt web sẽ phải gửi thêm đến máy chủ thông tin về tên host trong header Host. Với các trình duyệt cũ, nó sẽ không gửi header Host đến máy chủ. Apache cũng có cách thức để giải quyết vấn đề tương thích này nhưng tôi sẽ không đề cập ở đây.

Để tạo nhiều host trên 1 máy chủ, dù là theo kiểu gì thì đầu tiên bao giờ cũng phải đăng ký tất cả các tên host vào hệ thống tên miền DNS. DNS là 1 hệ thống mà mọi máy tính khi kêt nối với Internet đều phải sử dụng để trình duyệt web có thể dịch ra địa chỉ IP từ dòng URL chứa tên host mà người dùng nhập vào khung address. Tiếp đó Apache phải được cấu hình để nó có thể đáp ứng yêu cầu của máy khách theo các cách khác nhau tuỳ thuộc vào host ảo nào mà yêu cầu đó hướng tới.
File cấu hình của virtual host được nằm tại
/etc/apache2/sites-available
Chứa các tập tin cấu hình cho các trang web trong đó có sẵn nhưng không nhất thiết phải kích hoạt.
/etc/apache2/sites-enabled
Chứa các tập tin trang web đã được kích hoạt.

Ví dụ bạn muốn tạo 2 site : vnlab.net và vnlive.info dùng chung ip 192.168.1.200

- Tạo thư mục để chứa website

root@WebSvr:~# mkdir /var/www/vnlab.net
root@WebSvr:~# mkdir /var/www/vnlive.info

- Vào /etc/apache2/sites-available tạo 2 file
Vnlab.net


ServerAdmin webmaster@localhost
ServerName www.vnlab.net
ServerAlias vnlab.net

DocumentRoot /var/www/vnlab.net

Options FollowSymLinks
AllowOverride None


Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all


ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all


ErrorLog /var/log/apache2/vnlab.net/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined

Alias /doc/ “/usr/share/doc/”

Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128





Vnlive.info


ServerAdmin webmaster@localhost
ServerName www.vnlive.info
ServerAlias vnlive.info

DocumentRoot /var/www/vnlive.info

Options FollowSymLinks
AllowOverride None


Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all


ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all


ErrorLog /var/log/apache2/vnlive.info/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined

Alias /doc/ “/usr/share/doc/”

Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128





- Kích hoạt 2 site vnlab.net và vnlive.info

root@WebSvr:~# a2ensite vnlab.net
Site vnlab.net installed; run /etc/init.d/apache2 reload to enable.

root@WebSvr:~# a2ensite vnlive.info
Site vnlive.info installed; run /etc/init.d/apache2 reload to enable.


Bây giờ bạn có thể 2 site đã được kích hoạt tại /etc/apache2/sites-enable

- Cuối cùng Restart hoặc Reload lại Apache

root@WebSvr:~# /etc/init.d/apache2 reload

Hoặc

root@WebSvr:~# /etc/init.d/apache2 restart

- Để kiểm tra bạn cần có 1 DNS server để phân giải tên miền
Cài đặt bind

sudo apt-get install bind9

Sau khi cài xong vào /etc/bind/named.conf.local thêm vào

zone “vnlab.net” {
type master;
file “/etc/bind/db.vnlab.net”;
allow-transfer { 192.168.1.200; };
};

zone “vnlive.info” {
type master;
file “/etc/bind/db.vnlive.info”;
allow-transfer { 192.168.1.200; };
};

zone “1.168.192.in-addr.arpa” {
type master;
file “/etc/bind/db.192″;
allow-transfer { 192.168.1.200; };
};

Dùng chương trình soạn thảo tạo ra 2 file ( Các kí tự cách nhau bàng phím tab )
db.vnlab.net

$TTL 2D
@ IN SOA ns1.vnlab.net. admin.vnlab.net. (
2 ; Serial
4800 ; Refresh
1400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.vnlab.net.
@ IN A 192.168.1.200
@ IN AAAA ::1
www IN A 192.168.1.200


db.vnlive.info

$TTL 2D
@ IN SOA ns1.vnlive.info. admin.vnlive.info. (
2 ; Serial
4800 ; Refresh
1400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.vnlive.info.
@ IN A 192.168.1.200
@ IN AAAA ::1
www IN A 192.168.1.200


Khởi động lại Bind

/etc/init.d/bind restart

Tạo 2 file index.html có nội dung khác nhau tại /var/www/vnlab.net và /var/www/vnlive.info
Vào trình duyệt truy cập vào vnlab.net và vnlive.info

No comments:

Router Packet Networking

Đây là video ngắn khá hay, mô tả đường đi của một gói tin trên Mạng Internet.