Ví dụ địa chỉ IP cho host ảo

Một phần của tài liệu Đồ án xây dựng cấu hình các ứng dụng phía server trong hệ điều hành linux fedora 5 0 (Trang 82)

Trong ví dụ này, Apache nghe tất cả các cổng nhưng sẽ đưa ra một nội dung, Apache hiển thị nội dung của <VirtualHost> đầu tiên. Apache cũng làm cho <VirtualHost> cho mỗi địa chỉ IP yêu cầu bằng cách bỏ qua một vài ServerName mà người dùng có thể dùng được trong đó.

<VirtualHost *>

DocumentRoot /home/www/site1 </VirtualHost>

Wild Card và địa chỉ IP

Trong ví dụ này, Apache cũng nghe tất cả các cổng nhưng sẽ đưa ra nội dung khác nhau cho địa chỉ: 97.158.253.26 và 97.158.253.27.

<VirtualHost *> DocumentRoot /home/www/site1 </VirtualHost> <VirtualHost 97.158.253.26> DocumentRoot /home/www/site2 </VirtualHost> <VirtualHost 97.158.253.27> DocumentRoot /home/www/site3 </VirtualHost> 4.5.5 Host ảo và SSL

Người quản trị hệ thống thường thay thế địa chỉ IP trong <VirtualHost> và NameVirtualHost với để chỉ tới tất cả các địa chỉ IP. Nếu họ cài đặt Apache có hỗ trợ bảo mật HTTPS/SSL thường được dùng cho các thẻ tín dụng và mua bán qua mạng (thương mại điện tử) thì wildcard sẽ không cần thiết. Apache SSL yêu cầu ít nhất một

<VirtualHost> và đưa ra thông báo lỗi:

Starting httpd: [Sat Oct 12 21:21:49 2002] [error] VirtualHost _default_:443 99 mixing * ports and non9* ports with a NameVirtualHost address is not supported, proceeding with undefined results

Nếu cố gắng tải một vài trang Web trên Webserver thì sẽ có thông báo lỗi như sau:

Bad request!

Your browser (or proxy) sent a request that this server could not understand. If you think this is a server error, please contact the webmaster

Cách giải quyết vấn đề này đó là sử dụng các wildcard, không dùng các thông số host ảo với các wildcard trừ trường hợp với <VirtualHost> đầu tiên đã định nghĩa các trang Web để có thể hiển thị khi khớp với <VirtualHost> khác không thể tìm thấy được. Đây là ví dụ:

NameVirtualHost * <VirtualHost *>

Directives for other sites </VirtualHost>

<VirtualHost 97.158.253.28>

Directives for site that also run on SSL </VirtualHost>

4.6 Cấu hình nhiều Site và nhiều địa chỉ IP

Để hiểu rõ thêm các bước cần để cấu hình file: /etc/httpd/conf/httpd.conf. Sau đây là một ví dụ với các bước như sau:

Người quản trị Website trước đã tạo DNS cho: www.my_site.com, my_site.com,

www.my_cool_site.com và www.deafault_site.com để ánh xạ tới địa chỉ

97.158.253.26 trên webserver. Miền www.another_site.com cũng được cấu hình tới địa chỉ IP bí danh “alias”: 97.158.253.27. Người quản trị muốn có thể tới: www.test_site.com trên tất cả các địa chỉ IP.

Lưu lượng tới www.my_site.com, my.site.com và www.my_cool_site.com phải đưa nội dung từ thư mục con site2 khi đó Apache có thể hiển thị nội dung file index.html trong thư mục đó.

Lưu lượng tới www.my_site.com phải đưa nội dung tới thư mục con site3

Đặt tên hoá các host ảo sẽ được yêu cầu cho 97.158.253.26 như trong trường hợp có một địa chỉ IP đặt riêng cho nội dung khác của miền khác và phải cần có một NameVirtualHost dẫn tới 97.158.253.26

Tất cả các miền khác đang trỏ tới server này mà không có một ServerName chính xác sẽ đưa các trang web từ thư mục đã định nghĩa trong <VirtualHost> đầu tiên

Dưới đây là bảng tổng kết web hosting:

Miền (domain) Địa chỉ IP Thư mục

(directory)

Kiểu host ảo (type of Virtual Hosting) www.my.site.com my.site.com www.my.cool. site.com

97.158.253.26 Site2 Name Based

www.test.site.com 97.158.253.27 Site3 Name Based (Wild card)

www.another.site.com 97.158.253.27 Site4 Name Based

www.default.site.com

All other domains 97.158.253.26 Site1 Name Based

Bảng 4.2: Bảng tổng kết web hosting

Làm thế nào mà các luật trên có thể dịch sang thành các mã ? Dưới đây là quá trình cắt nhỏ các ví dụ của file httpd.conf:

ServerName localhost

NameVirtualHost 97.158.253.26 NameVirtualHost 97.158.253.27 #

#Khop mot thu muc trang web voi moi website # <VirtualHost *> DocumentRoot /home/www/site1 </VirtualHost> <VirtualHost 97.158.253.26> DocumentRoot /home/www/site2

</VirtualHost> <VirtualHost 97.158.253.27> DocumentRoot /home/www/site3 ServerName www.test9site.com </VirtualHost> <VirtualHost 97.158.253.27> DocumentRoot /home/www/site4 ServerName www.another9site.com </VirtualHost> #

# Phai chac chan rang cac thu muc phia tren # chi co the doc duoc (read9only)

#

<Directory "/home/www/*"> Order allow,deny

Allow from all

AllowOverride FileInfo AuthConfig Limit

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>

Những khai báo sẽ được tìm thấy ở phần cuối cùng của file nơi các khai báo host ảo. Phần cuối cùng của đoạn cấu hình có vài khai báo thêm để chắc chắn rằng các truy nhập chỉ có thể đọc các trang web trừ khi khởi động lại Apache sau mỗi lần cập nhật lại file httpd.conf khi có các thay đổi cấu hình mà muốn có hiệu quả ngay. Cần chú ý rằng phải cấu hình DNS server trỏ tới địa chỉ IP chính xác được dùng cho mỗi website.

4.6.2 Kiểm tra Websie trước khi cố định DNS

Khi chưa khởi động lại Apache thì DNS sẽ làm việc không chính xác, cách đơn giản nhất là tạm thời bỏ qua để cấu hình file các host trên PC khách của người phát triển

Wen hoặc các trạm làm việc (không phải là Apache server). Mặc định, các PC và các trạm làm việc Linux truy vấn các file host trước khi kiểm tra DNS, do đó nếu giá trị

cho www.my_site.com được đưa vào danh sách víf vậy mà máy khách sẽ sử dụng

được.Trong Windows cũng tương tự trong Linux đó là:

C:\WINDOWS\system32\drivers\etc\hosts. Có thể dùng Notepad để thêm nội dung vào

như sau:

97.158.253.26 www.my.site.com 4.6.3 Vô hiệu hoá Danh sách Thư mục

Nếu như Apache không tìm thấy trang index.html trong mỗi thư mục con dưới thư mục DocumentRoot thì sẽ mặc định đưa ra danh sách tất cả các file trong thư mục con đó.

Ví dụ, nếu tạo một thư mục con: /home/www/site1/example dưới: www.my_site.com

của /home/www/site1/. Có thể quan sát nội dung của file my_example.html trong thư

mục con này nếu trỏ tới: http://www.my_site.com/example/my_example.html. Có thể biết trang index nào cho: www.my_site.com/example bằng cách gõ vào link sau:

http://www.my_site.com/example. Apache đưa ra toàn bộ danh sách nội dung các file

trong thư mục example nếu như nó không thể tìm thấy file index.html. Người dùng có thể vô hiệu hoá danh sách này bằng cách dùng tuỳ chọn: “.Indexes” trong <Directory> cho DocumentRoot như sau:

<Directory "/home/www/*"> ...

...

Options MultiViews _Indexes SymLinksIfOwnerMatch IncludesNoExec

Cần chú ý rằng để có được hiệu quả như mong muốn Apache cần được khởi động lại nếu không sẽ xuất hiện thông báo: “403 Access denied”.

4.6.4 Thông báo các trang thiếu

Người dùng có thể chỉ cho Apache hiển thị một file HTML xác định trước nếu như cố gắng truy cập vào trang không tồn tại bằng cách đặt một khai báo trong file httpd.conf

để Apache sẽ hiển thị cảnh báo nội dung thay vì hiển thị thông báo: “404 File Not Found” như sau:

ErrorDocument 404 /missing.htm

mạng khi truyền qua Internet. Đầu tiên cần tải Apache bản 2.x, sử dụng chỉ dẫn Location để định rõ kiểu file nào cần nén, sau đó sửa đổi và khởi động lại Apache. Có thể kiểm tra lại các kích thước trước và sau khi nén từ file: /var/log/httpd/access_log

như sau:

[root@ dhxd tmp]# grep dns9static /var/log/httpd/access_log ...

...

67.119.25.115 9 9 [15/Feb/2003:23:06:51 90800] "GET /dns9static.htm HTTP/1.1" 200 15190 "http://www.linuxhomenetworking.com/sendmail.htm" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0; AT&T CSM6.0; YComp 5.0.2.6)"

... ...

[root@ dhxd tmp]#

Và tương ứng với thư mục trong danh sách:

[root@ dhxd tmp]# ll /web9dir/dns9static.htm

9rw9r99r99 1 user group 78350 Feb 15 00:53 /home/www/ccie/dns9static.htm [root@dhxd tmp]#

Dễ thấy, 78350 byte ban đầu đã giảm xuống 15190 byte tức là đã nén được đến 80%. Sau đây là ví dụ về cấu hình nén:

Đầu tiên cần phải đưa vào các khai báo trước phần host ảo của file: httpd.conf để kích hoạt nén các trang tĩnh. Đối với các bản của Fedora file httpd.conf tải module tĩnh:

mod_deflate mặc định, do đó dòng LoadModule không cần thiết, tuy nhiên để có cái nhìn

toàn diện trong ví dụ dưới đây coi như chưa có mod_deflate.

LoadModule deflate_module modules/mod_deflate.so <Location />

# Insert filter

SetOutputFilter DEFLATE

# Netscape 4.x has some problems...

BrowserMatch ^Mozilla/4 gzip_only_text/html

# Netscape 4.06_4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no_gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSIE !no_gzip !gzip_only_text/html

# Don't compress images SetEnvIfNoCase Request_URI \

\.(?:gif|jpe?g|png)$ no_gzip dont_vary

# Make sure proxies don't deliver the wrong content Header append Vary User_Agent env=!dont_vary </Location>

4.8 Chạy Apache trên server đằng sau NAT Firewall

Nếu như Webserver đặt phía sau NAT firewall và người dùng đã “log” trên một máy đằng sau firewall, sau đó có thể bắt gặp vấn đề khi cố gắng truy cập vào:

www.mysite.com của www.another_site.com. Do NAT, các tường lửa thường không

cho truy cập từ các mạng đã được bảo vệ tới địa chỉ IP giả mạo từ bên ngoài. Ví dụ, Linux Web server dhxd có một địa chỉ bên trong là: 192.168.1.100, nhưng tường lửa có địa chỉ IP ở bên ngoài là 97.158.253.25 thông qua NAT. Nếu người dùng bên ngoài, mạng 192.168.1.x thì DNS không thể phân giải địa chỉ 97.158.253.26. Sau đây là 2 bước để giải quyết vấn đề:

4.8.1 Bước 1: Cấu hình host ảo với nhiều địa chỉ IP

Người dùng có thể cấu hình Apache để phục vụ chính xác nội dung khi truy cập vào:

www.mysite.com hoặc www.another_site.com từ bên ngoài và khi định rõ địa chỉ IP:

192.168.1.100 từ bên trong. Nhưng Apache còn có thể cho phép định rõ nhiều địa chỉ IP trong <VirtualHost> để giải quyết vấn đề. Sau đây là ví dụ:

NameVirtualHost 192.168.1.100 NameVirtualHost 97.158.253.26 <VirtualHost 192.168.1.100 97.158.253.26> DocumentRoot /www/server1 ServerName www.my_site.com ServerAlias dhxd, www.my_site_192_168_1_100.com </VirtualHost> 4.8.2 Bước 2: Cấu hình DNS

Cần ổn định vấn đề DNS mà NAT tạo ra, người dùng trên Internet cần truy cập vào địa chỉ IP: 97.158.253.26 khi vào trang web: www.my_site.com và nhiều người dùng

4.9 Bảo vệ các thư mục trang Web với mật khẩu

Sử dụng mật khẩu (password) để bảo vệ nội dung trong thư mục chính và thư mục con DocumentRoot .Ví dụ sau thể hiện cách sử dụng mật khẩu để bảo vệ thư mục:

/home/www/:

a) Sử dụng tiện ích mật khẩu htpasswd để tạo usename/password không phụ thuộc vào mật khẩu truy cập vào hệ thống. Người dùng phải định rõ vị trí đặt file mật khẩu, nếu như không tồn tại thì phải bao gồm một –c. Một cách khác đó là đặt file trong thư mục: /etc/httpd/conf, xa cây DocumentRoot tới những người sử dụng web có thể nhìn thấy được. Sau đây là ví dụ cho người dùng có tên là Dung và người thứ 2 là Quy:

[root@dhxd tmp]# htpasswd 9c /etc/httpd/conf/.htpasswd dung New password:

Re9type new password:

Adding password for user dung

[root@dhxd tmp]# htpasswd /etc/httpd/conf/.htpasswd quy New password:

Re9type new password:

Adding password for user quy [root@dhxd tmp]#

b) Tạo file: “.htpasswd” mà tất cả người dùng có thể đọc được

[root@dhxd tmp]# chmod 644 /etc/httpd/conf/.htpasswd

c) Tạo một file: “.htaccess” trong thư mục mà muốn điều khiển mật khẩu

AuthUserFile /etc/httpd/conf/.htpasswd AuthGroupFile /dev/null

AuthName EnterPassword AuthType Basic

require user dung

Mật khẩu này dùng để bảo vệ thư mục chính và tất cả các thư mục con,

“AuthUserFile” chỉ cho Apache để dùng file: “.htpasswd”. Câu lệnh: “require user”

hướng dẫn Apache chỉ cho phép người dùng “dung” trong file: “.htpasswd” mới có thể truy cập được. Nếu muốn tất cả người dùng trong file: “.htpasswd” được truy cập thì phải thay dòng lệnh này với người dùng theo yêu cầu. “AuthTypeBasic” chỉ thị cho Apache chấp nhận mật khẩu chưa được mã hoá từ người dùng ở xa khi trình duyệt Web.

d) Thiết lập file bảo vệ chính xác trên file: “.htaccess” trong thư mục: /home/www/.

e) Chắc chắn rằng file: /etc/httpd/conf/httpd.conf có khai báo AllowOverride trong <Directory> cho một vài cây phía trên: /home/www. Trong ví dụ dưới đây, tất cả các thư mục dưới: /var/www đều cần mật khẩu quyền hạn:

<Directory /home/www/*> AllowOverride AuthConfig </Directory>

f) Chắc chắn rằng đã có <VirtualHost> mà định nghĩa truy cập tới /home/www hoặc thư mục khác cao hơn trong cây thư mục:

<VirtualHost *>

ServerName 97.158.253.26 DocumentRoot /home/www </VirtualHost>

g) Khởi động lại Apache

h) Kiểm thử bằng cách truy cập vào trang web khi đó nó sẽ yêu cầu mật khẩu truy cập 4.10 Thư mục conf.d

Các file trong thư mục: /etc/httpd/conf.d đươc đọc ra và tự động nối thêm dữ liệu tới cấu hình trong file: httpd.conf mỗi lần Apache khởi động. Trong nội dung cấu hình mà một webserver phục vụ nhiều host trên nhiều Website, người dùng có thể tạo một file cấu hình cho mỗi Website với <Virtual> và <Directory>. Có thể cấu hình quản lý Website đơn giản hơn bằng cách như sau:

Sao lưu file: httpd.conf tránh trường hợp bị mất

Tạo các file đặt tại thư mục này mà Apache yêu cầu <VirtualHost> và <Directory>

Nếu mỗi site có một địa chỉ IP riêng biệt, sau đó đặt các khai báo NameVirtualHost tương đương các file trong thư mục conf.d. Nếu nó được chia sẻ, nó cần để giữ nguyên file: httpd.conf chính.

Tháo bỏ các lời chỉ dẫn tương đương từ file: httpd.conf

Khởi động lại Apache và kiểm tra.

Các file đặt trong thư mục conf.d không phải có tên đặc biệt và không cần phải quy chúng vào trong file httpd.conf.

4.11 Xử lý các sự cố Apache

pháp không chính xác trong khai báo <VirtualHost>. Sau đây là các lỗi mà người dùng hay gặp phải nhất.

4.11.1 Kiểm tra kết nối HTTP

Bước đầu tiên là để xác định webserver có thể truy cập trên TCP cổng 80, do không có kết nối có thể do tường lửa, NAT, hay luật gửi qua cổng tới webserver . Một vài lỗi khác bao gồm Apache không khởi động, server hoặc mạng bị lỗi.Nếu có thể kết nối qua cổng 80 nhưng không có trang nào được hiển thị thì vấn đề thường là do ứng dụng web lỗi, không do phần mềm web server. Một cách tốt nhất để kiểm tra từ cả bên trong mạng và từ Internet với TELNET.

4.11.2 Bản tin “403 Forbidden”

Nguyên nhân ở đây thường là do file permissions và xuất hiện ngữ cảnh bảo mật. Các vấn đề có liên quan tới bảo mật như bản tin: “avc: denied” trong file: /var/log/messages.

Nov 21 20:41:23 dhxd kernel: audit(1101098483.897:0): avc: denied { getattr } for

pid=1377 exe=/usr/sbin/httpd path=/home/www/index.html dev=hda5 ino=12

scontext=root:system_r:httpd_t tcontext=root:object_r:home_root_t tclass=file

4.11.3 Chỉ xuất hiện trang Apache mặc định

Khi chỉ xuất hiện trang Apache mặc định, có 2 nguyên nhân chính.

. Thứ nhất đó là do không có file: index.html trong thư mục DocumentRoot của website

. Thứ hai là thường do có liên quan tới ngữ cảnh bảo mật không chính xác 4.11.4 File httpd.conf không tương thích khi nâng cấp

Các file cấu hình cũ sẽ không tương thích khi nâng cấp từ Apache bản 1.3 tới bản 2.x. Trong Fedora, bản mới 2.x, file cấu hình mặc định được lưu trong file:

/etc/httpd/conf/httpd.conf.rpmnew. Đối với ví dụ host ảo đơn giản ở trên cách đơn giản

nhất là:

Lưu file httpd.conf cũ với tên khác, sao chép ServerName, NameVirtualHost, và Virtual Host từ file cũ và đặt chúng trong và đặt chúng vào trong file

httpd.conf.rpmnew mới.

Sao chép file httpd.conf.rpmnew và đặt tên lại là: httpd.conf

Khởi động lại Apache

4.11.5 Lỗi ServerName

Tất cả các chỉ dẫn ServerName phải đưa vào trong một miền mà DNS có thể phân giải được, nếu không sẽ xuất hiện lỗi khi httpd khởi động.

Starting httpd: httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

Starting httpd: [Wed Feb 04 21:18:16 2004] [error] (EAI 2)Name or service not known: Failed to resolve server name for 192.16.1.100 (check DNS) __ or specify an explicit ServerName

Có thể tránh lỗi này bằng cách thêm một ServerName mặc định ở phần cuối nội dung file: httpd.conf, ví dụ:

#ServerName new.host.name:80 ServerName localhost

4.11.6 File ghi trạng thái Apache

File: /var/httpd/access_log được cập nhật sau mỗi truy vấn HTTP và là nguồn thông tin tổng quát về website. Đó là một kiểu định dạng cố định với mỗi mục vào được phân chia bằng các không gian hoặc các dấu ngoặc kép. Dưới đây là danh sách cách bố trí:

Field Number

Miêu tả (description) Separator

1 Địa chỉ IP của web ở xa Khoảng trống

2 Tem thời gian (Time Stamp) Dấu ngoặc vuông

. [ ] 3 Truy vấn HTTP bao gồm trang web được phục

cụ

Lời dẫn . " "

4 Mã kết quả HTTP Khoảng trống

5 Số lượng dữ liệu trong các byte gửi tới trình duyệt web ở xa

Một phần của tài liệu Đồ án xây dựng cấu hình các ứng dụng phía server trong hệ điều hành linux fedora 5 0 (Trang 82)