Trong tài liệu này, tôi sẽ trình bày 1 số thao tác cơ bản để cài đặt và thiết lập hệ thống web server sử dụng Apache2 trên nền tảng Ubuntu
Trang 1Nội dung
1 Mục đích bản báo cáo
2 Cài đặt máy chủ web Apache2
2.1 Giới thiệu về Apache2
2.2 Cài đặt apache2
2.3 Một số lệnh trong apache2
2.4 Virtual hosts là gì?
3 Thực hiện Name-based virtual host
3.1 Cơ chế hoạt động
3.2 cài đặt
4 Thực hiện IP-based virtual host
4.1 Cơ chế hoạt động
4.2 cài đặt
5 Module userdir (tạo web folder cho từng NSD và giới hạn quota cho NSD) 5.1 Cài đặt đường dẫn với UserDir
5.2 Giới hạn cho NSD
5.3 Ví dụ minh họa
Trang 2
1 Mục đích bản báo cáo
Trong bản báo cáo này, sẽ trình bày 1 số thao tác cơ bản để cài đặt và thiết lập
hệ thống web server sử dụng Apache2 trên nền tảng Ubuntu
2 Cài đặt máy chủ web Apache2
2.1 apache là gì?
Apache hay là chương trình máy chủ HTTP, là một chương trình dành cho máy chủ đối thoại qua giao thức HTTP Apache chạy trên các hệ điều hành
tương tự như Unix, Microsoft Windows, Novell Netware và các hệ điều hành khác Apache đóng một vai trò quan trọng trong quá trình phát triển của World Wide Web
Apache được phát triển và duy trì bởi một cộng đồng mã nguồn mở dưới sự bảo trợ của Apache Software Foundation Apache được phát hành với giấy
phép Apache License và là một phần mềm tự do và miễn phí
2.2 Cài đặt apache2
Để cài đặt Apache2 trong Ubuntu sử dụng Synaptic package Manager, Ubuntu Software Center để tìm kiếm và cài đặt gói module apache2 Hoặc dùng Terminal và gõ lệnh sau:
sudo apt-get install apache2
Để kiểm tra xem apache đã được cài đặt thành công chưa, ta mở trình
duyệt web và gõ vào thanh địa chỉ: localhost Nếu thấy như hình dưới nghĩa là
đã cài thành công apache
Trang 32.3 Một số lệnh trong apache2
Sau khi cài đặt Apache, ứng dụng sẽ được thêm vào danh sách init.d của
hệ thống, do đó có thể tự khởi đọng cùng với hệ điều hành Sử dụng những lệnh
sau để khởi động, kích hoạt và ngừng hoạt động… của Apache:
Sudo /etc/init.d/apache2 start#start apache Sudo /etc/init.d/apache2 stop#stop apache Sudo /etc/init.d/apache2 restart#restart apache
Nếu không muốn Apache tự khởi động cùng hệ thống:
Sudo update-rc.d -f apache2 remove
Nếu muốn làm ngược lại quá trình trên:
Sudo update-rc.d apache2 defaults
Nhưng lưu ý rằng những lệnh trên chỉ áp dụng với các distro dựa trên Debian( bao gồm Ubuntu) mà thôi
2.4 Virtual host là gì?
Virtual host là cơ chế giúp cho nhiều hosts khác nhau có thể chạy trên cùng một máy chủ Có hai loại virtual host là name-based virtual hosts và
IP-based virtual hosts
Trang 43 Thực hiện Name- based virtual Host
3.1 cơ chế hoạt động
Để dùng được name-based virtual hosting, chúng ta cần chỉ định địa chỉ
IP (và cả cổng nếu được) phía server sẽ dùng để chấp thuận các yêu cầu cho các hosts Chúng ta có thể làm điều này dựa vào chỉ dẫn NameVirtualHost Trong trường hợp thông thường, địa chỉ IP bất kì hoặc tất cả các địa chỉ IP trên máy chủ có thể được sử dụng, chúng ta có thể sử dụng * làm tham số cho
NameVirtualHost (NameVirtualHost * chỉ chạy được với phiên bản 1.3.13 hoặc lớn hơn) Chú ý rằng chỉ ra một địa chỉ IP trong chỉ dẫn
NameVirtualHost sẽ không tự động làm cho server lắng nghe ở địa chỉ đó Thêm nữa, bất kì địa chỉ IP nào được chỉ ra ở đây cũng phải được liên kết với một network interface của máy chủ
Bước tiếp theo là tạo ra block <VirtualHost> cho mỗi host Tham số của chỉ dẫn <VirtualHost> cũng nên giống của chỉ dẫn NameVirtualHost (ví dụ như một địa chỉ IP hoặc dấu * cho tất cả các địa chỉ IP) Bên trong mỗi khối
<VirtualHost>, chúng ta cần ít nhất một chỉ dẫn SeverName để chỉ định host nào sẽ được dùng để phục vụ các yêu cầu và một chỉ dẫn DocumentRoot để chỉ
ra vị trí của các file chứa đựng nội dung của host đó
Khi thêm một virtual host vào webserver đã tồn tại, chúng ta cũng cần tạo một khối <VirtualHost> cho host đã tồn tại ServerName và DocumentRoot nằm trong virtual host này nên giống với ServerName và DocumentRoot chung Đầu tiên, chúng ta cần
liệt kê Virtual host vào file cấu hình Lúc này, khi có một request, đầu tiên, máy chủ sẽ kiểm tra xem nó có sử dụng địa chỉ IP khớp với trong NameVirtualHost không Nếu khớp, nó sẽ tìm kiếm trong từng đoạn <VirtualHost>có địa chỉ IP phù hợp và tìm phần có ServerName hoặc ServerAlias khớp với host name trong yêu cầu Nếu tìm được, nó sẽ sử dụng cấu hình cho server đó Nếu không có
virtual host nào được tìm thấy, thì virtual host đầu tiên trong danh sách mà có địa chỉ IP phù hợp sẽ được sử dụng
Như vậy, virtual host đầu tiên được liệt kê sẽ là default virtual host
DocumentRoot từ main server sẽ không bao giờ được sử dụng nếu có một địa chỉ IP khớp với chỉ dẫn NameVirtualHost Nếu muốn cấu hình đặc biệt cho các yêu cầu mà không khớp với bất kì virtual host nào thì chúng ta chỉ việc đặt cấu hình đó trong một container <VirtualHost> và đặt nó ở đầu trong file cấu hình
Ví dụ thiết lập 2 virtual hosts là abc.com và abc.org, trong đó, khi người dùng truy cập thông qua tên abc.com thì sẽ trả về nội dung trong
/var/www/abccom và nếu truy cập qua tên abc.org thì sẽ trả về nội dung từ
/var/www/abcorg
3.2 cài đặt
Ta tiến hành như sau:
1.Tiến hành thiết lập trong file httpd.conf
Trang 5NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /var/www/abccom ServerName abc.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/abcorg ServerName abc.org
</VirtualHost>
2 Tạo ra 2 files abc.com và abc.org trong thư mục:
/etc/apache2/sites-available/
sudo touch abc.com abc.org
3.Tiến hành enable 2 sites vừa tạo:
sudo a2ensite abc.com abc.org
4.Tạo ra 2 thư mục tương ứng của 2 hosts trong
/var/www
sudo mkdir abccom
sudo mkdir abcorg
5.Tiến hành kiểm tra:
5.1.Ta tạo một file index.html trong thư mục /var/www/abccom với
nội dung của file index.html như sau:
<h1>abc.com</h1>
<br>Copyright 2011 tadk <br>
5.2 Làm tương tự cho /var/www/abcorg 5.3 Sửa file /etc/hosts để phân giải abc.com và
abc.orgthành 127.0.0.1:
sudo gedit /etc/hosts
Thêm các dòng sau đây vào file hosts này:
127.0.0.1 abc.com 127.0.0.1 abc.org
Lưu các thay đổi lại
5.4 Mở trình duyệt web và gõ vào địa chỉ abc.com và abc.org
Trang 64 Thể hiện IP-based virtual host
4.1 cơ chế hoạt động
Yêu cầu về hệ thống trong khái niệm IP-based, máy chủ phải có từng IP khác nhau cho mỗi IP-based virtual host Chúng ta có thể thực hiện điều này nếu có máy chủ có vài đường kết nối vật lý khác
nhau hoặc sử dụng các interfaces ảo có được hỗ trợ trong hầu hết các hệ điều hành hiện đại Để biết được chi tiết về tính năng này, chúng ta cần tham khảo trong tài liệu của hệ điều hành, nó thường được gọi là "ip alias" và lệnh thường được dùng
để cài đặt là "ifconfig"
4.2 cài đặt
Có hai cách cấu hình Apache để hỗ trợ nhiều hosts Cách thứ nhất là chạy từng daemon httpd riêng biệt cho từng hostname; hoặc cách nữa là chạy một daemon duy nhất để hỗ trợ cho tất cả các virtual hosts
Cài đặt single daemon cho nhiều virtual hosts
Trường hợp này, chỉ có một daemon httpd nhận các yêu cầu cho main server và tất cả các hosts Chỉ dẫn VirtualHost trong file cấu hình được dùng
để đặt các giá trị của các chỉ dẫn cấu hình khác nhau (ServerAdmin,
ServerName, DocumentRoot, ErrorLog và TransferLog hoặc CustomLog) cho từng host khác nhau Ví dụ:
<VirtualHost www.smallco.com>
ServerAdmin webmaster@mail.smallco.com DocumentRoot /groups/smallco/www ServerName www.smallco.com
Trang 7ErrorLog /groups/smallco/logs/error_log TransferLog /groups/smallco/logs/access_log
</VirtualHost>
<VirtualHost www.baygroup.org>
ServerAdmin webmaster@mail.baygroup.org DocumentRoot /groups/baygroup/www ServerName www.baygroup.org
ErrorLog /groups/baygroup/logs/error_log TransferLog /groups/baygroup/logs/access_log
</VirtualHost>
Chúng ta nên sử dụng địa chỉ IP thay vì hostname
Cài đặt 1 IP-based virtual host
Chúng ta sẽ tạo ra một host lắng nghe ở địa chỉ 192.168.1.89:80 có tên là
ipbasedsite1 và có DocumentRoot tại /var/www/ipbasedsite1
1 Thiết lập trong file httpd.conf như sau:
NameVirtualHost 192.168.1.89:80
<VirtualHost 192.168.1.89:80>
DocumentRoot /var/www/ipbasedsite1us
ServerName ipbasedsite1.us
</VirtualHost>
2 Tạo thư mục ipbasedsite1us trong /var/www
sudo mkdir /var/www/ipbasedsite1us
3 Tạo một file index.html trong /var/www/ipbasedsite1us và điền nội dung cho nó
4 Mở file hosts
sudo gedit /etc/hosts
Và thêm dòng sau vào file này:
192.168.1.89 ipbasedsite1.us
5 Cấu hình địa chỉ ip cho giao diện eth0:
sudo ifconfig eth0 192.168.1.89
6 Kiểm tra kết quả:
Trang 85 Module userdir
Trong hệ điều hành đa người dùng như Ubuntu, mỗi người dùng có thể được quyền có một trang web trong thư mục home của họ, sử dụng chỉ dẫn UserDir, ta có thể làm được điều này Một người khách truy cập vào địa chỉ URL http://example.com/~username/ sẽ thấy được nộidung của một thư mục của người dùng có tên là "username" Đó là một thư mục con được chỉ định trong chỉ dẫn UserDir
5.1 Cài đặt đường dẫn với userdir
Chỉ dẫn UserDir chỉ ra một thư mục chứa nội dung sẽ được nạp vào trang web Nó có một vài dạng như sau:
Nếu như đường dẫn không bắt đầu bằng một dấu gạch chéo / thì đó là đường dẫn tương đối so với thư mục home của user Ví dụ
UserDir public_html
thì URL http://example.com/~tadk/file.html sẽ được hiểu
là /home/tadk/public_html/file.html
Nếu đường dẫn bắt đầu với dấu gạch chéo thì đó là đường dẫn tuyệt đối của thư mục
Ví dụ:
UserDir /var/html
thì URL http://example.com/~abc/file.html sẽ được dịch thành
/var/html/abc/file.html 5.2 Giới hạn user nào được sử dụng chức năng này
Trang 9Chúng ta có thể sử dụng UserDir để giới hạn user nào được phép và không được sử dụng chức năng này
UserDir enabled tadk UserDir disabled root
Cấu hình như trên sẽ cho phép những users được liệt kê sau enabled (là tadk) được sử dụng tính năng userdir và giới han, hay tắt chức năng này đối với root
5.3 Ví dụ minh họa :
Ta sẽ tiến hành bật module userdir của Apache đối với user có tên tadk, cho phép
nội dung của thư mục: /home/tadk/public_html/
hiển thị trên web site khi có yêu cầu
localhost/~tadk/
1.Đầu tiên ta bật module userdir của apache:
2 Chỉnh sửa file /etc/apache2/mods-enabled/userdir.conf như sau:
UserDir enabled TADK
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch
IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
</IfModule>
3.tạo thư mục public_html trong thư mục home của tadk sau đó cho dữ liệu vào:
sudo a2enmod userdir