|
||||||||
|
||||||||
|
|
Công Cụ | Xếp Bài |
16-05-2009, 03:49 PM | #1 |
Guest
Trả Lời: n/a
|
Học Cách Cấu Hình Apache
Học cách cấu hình Apache
Apache được quản lý bởi các tập tin cấu hình : httpd.conf, access.conf và srm.conf (đây là tập tin quản lý việc thêm hoặc gỡ bỏ các loại MIME khỏi maý chủ). Các tập tin này chứa các cấu trúc lệnh, được gọi là ‘directive’ dùng để truyền đạt cho Apache biết cách hoạt động. Một vài điểm cần nhớ trước khi thực hiện theo bài hướng dẫn này : Sao lưu tất cả các tập tin cấu hình của Apache trước khi thực hiện một thay đổi mới Lưu ý các thay đổi sẽ chỉ có hiệu lực sau khi khởi động lại Apache A) Giới hạn truy cập Nếu bạn có các tập tin hoặc thư mục trên máy chủ Web mà muốn chỉ cho phép một nhóm các máy tính được phép truy xuất thì một trong những cách để bảo vệ các trang là sử dụng qui trình chứng thực dựa trên host. Trong tập tin access.conf, bạn thêm các dòng như sau : Code: <Directory /usr/local/apache/share/htdocs/protected> order deny,allow deny from all allow from 10.10.64 </Directory> Lệnh <Directory> được gọi là lệnh đoạn (Sectional Directive) – nó chứa một nhóm các lệnh dùng áp dụng lên một thư mục cụ thể. Ở ví dụ trên thì chỉ có các máy tính có địa chỉ IP bắt đầu bằng 10.10.64 là có thể truy cập được vài các trang web được đặt trong thư mục theo đường dẫn /usr/local/apache/share/htdocs/protected Bạn cũng có thể sử dụng tên DNS thay vì sử dụng IP. Ví dụ bạn chỉ cho phép các máy tính của CNET truy cập đến một tập tin cụ thể. Để làm được điều này trong tập tin access.conf thêm đoạn: Code: <Location /usr/local/apache/share/htdocs/company/employees.html> order deny,allow deny from all allow from .cnet.com </Location> Một điều cần lưu ý rằng khi thiết lập ngăn chặn truy cập như vậy thì ngay cả máy cục bộ của bạn cũng không có quyền truy cập. Do vậy để máy cục bộ “localhost” có thể truy cập thì bạn cần thêm địa chỉ 127.0.0.1 vào phần allow, tương tự như sau: Code: allow from .cnet.com 127.0.0.1 B) Tùy biến thông báo lỗi Nếu người dùng yêu cầu một trang web không tồn tại hoặc nằm trong thư mục được bảo vệ thì Apache sẽ trả lời lại bằng các thông điệp lỗi được tích hợp sẵn ví dụ như “Forbidden” hoặc “File Not Found”. Nếu bạn muốn thông điệp lỗi cụ thể hơn và có thêm một địa chỉ URL để họ quay trở lại trang web của bạn hoặc đơn giản chỉ là muốn trang báo lỗi cũng hòa nhịp cùng phong cách thiết kế của trang web chính. Mở tập tin srm.conf và nhập nội dung sau: Code: ErrorDocument 404 /error.html Giờ đây máy chủ web sẽ trả về trang error.html bất cứ khi nào người dùng yêu cầu 1 trang web không tồn tại. Trừ khi bạn chỉ đường dẫn URL đầy đủ cho trang báo lỗi còn không mặc định lệnh ErrorDocument sẽ sử dụng đường dẫn đến thư mục root của máy chủ web (mặc định là /usr/local/apache/share/htdocs). Trường hợp trong ví dụ tập tin error.html đang được đặt trong thư mục root C) Hỗ trợ nhiều ngôn ngữ HTTP 1.1 có một tính năng được gọi là “Content negotiation”. Thật ra đây là một phương cách dùng để trình bày trang tài liệu với ngôn ngữ và định dạng khác nhau tùy thuộc vào cấu hình của trình duyệt. Ví dụ, công ty của bạn đặt tại Canada và bạn cần sử dụng cả phiên bản tiếng Pháp và tiếng Anh cho trang web. Đầu tiên bạn cần kích hoạt đặc tính này bằng cách thêm các directive tương ứng vào tập tin access.conf Mở tập tin access.conf, tìm hoặc tạo <Directory> ứng với vị trí bạn lưu trữ các trang với ngôn ngữ khác nhau. Sau đó, thêm lệnh Options MultiViews. Ví dụ: Code: <Directory /usr/local/apache/share/htdocs/multi> Options MultiViews </Directory> Kế tiếp, bạn cần chỉnh sửa srm.conf để chứa các ngôn ngữ mà bạn muốn hỗ trợ cũng như phần mở rộng tập tin liên quan đến mỗi ngôn ngữ. Chẳng hạn như trang web để gọi được tiếng Anh và Pháp thì phải có các đối tượng chuẩn tương ứng là en và fr. Tập tin srm.conf có thể đã có sẵn, nếu chưa thì thêm các dòng như sau: Code: AddLanguage en .en AddLanguage fr .fr LanguagePriority en fr Lệnh LanguagePriority dùng để nói cho Apache biết sẽ ưu tiên hiển thị ngôn ngữ nào trong trường hợp Apache không xác định được trình duyệt thích tiếng Anh hay tiếng Pháp Để giúp cho Apache nhận ra những trang ngôn ngữ nào cần hiển thị thì bạn phải gán phần mở rộng tương ứng. Ví dụ bạn muốn tạo trang giúp đỡ với hai ngôn ngữ thì bạn phải tạo tập tin help.html.en và help.html.fr. Do đó khi người dùng yêu cầu http://yourdomain.com/multi/help.html, Apache sẽ kiểm tra phần thiết đặt ngôn ngữ của trình duyệt và trả về đúng phiên bản ngôn ngữ cần thiết D) Cấu hình Server-Side Includes (SSI) Nếu bạn muốn tiến một bước nhỏ so với chỉ sử dụng các trang web tĩnh HTML nhưng lại chưa sẵn sàng với các đoạn mã Perl, thì bạn nên thử server-side includes (SSI). Với việc kích hoạt SSI, Apache sẽ phân tích các tập tin HTML yêu cầu nhằm phát hiện các lệnh nhúng đặc biệt trước khi gửi nó cho người dùng. Các lệnh này cho phép bạn thực thi một số điều cơ bản như hiển thị nội dung từ một tập tin khác hoặc in ra một biến môi trường. SSI là cách tốt nhất để thêm các mẩu thông tin nhỏ vào trang web, chẳng hạn như giờ hiện hành. Để kích hoạt SSI, trước tiên bạn cần chắc rằng nó đã được compile vào phiên bản Apache của bạn. Di chuyển đến thư mục chứa httpd, thông thường là /usr/local/apache/sbin, và gõ ./httpd –l. Kết quả sẽ hiển thị danh sách tất cả các module được xây dựng trong Apache. Hy vọng là mode_include.c đã có mặt trong danh sách. Nếu chưa, bạn cần phải rebuild lại Apache bằng cách chỉnh sửa code chú thích ở mod_include trong tập tin Configuration.tmpl Bạn mở tập tin access.conf để thêm hoặc chỉnh sửa như bên dưới Code: <Directory /usr/local/apache/share/htdocs/include> Options +Includes AddType text/html .shtml AddHandler server-parsed .shtml </Directory> Tất cả các tập tin trong thư mục /usr/local/apache/share/htdocs/include mà chứa phần mở rộng là .shtml sẽ được phân tích bởi Apache trước khi được gửi tới trình duyệt. Hai lệnh AddType và AddHandler cũng có trong tập tin srm.conf, bạn cần bỏ dấu chú thích cho hai lệnh này. Trong access.conf, lệnh Options dùng để cho phép việc thự thi các câu lệnh. Lưu ý dấu “+” dùng để báo cho Apache là thêm tùy chọn này vào trước bất kỳ tùy chọn cài đặt nào thay vì ghi đè lên chúng. Nếu bạn muốn SSI ngăn chặn việc thực thi các chương trình không mong muốn thì bạn phải sử dụng đối số Options +IncludesNOEXEC. Để kiểm tra các thiết lập, bạn tạo tập tin test.shtml tương tự như sau: Code: <HEAD><TITLE>SSI Test</TITLE></HEAD> <BODY bgcolor="white"> <H1>SSI Test</H1> File last modified <!--#flastmod file="test.shtml" --> <P><PRE> <!--#printenv --> </PRE> <P><!--#exec cmd="/bin/date" --> </BODY> </HTML> Apache sẽ tiến hành phân tích các đoạn bắt đầu bằng ký hiệu <!--#. Trong ví dụ này sử dụng 3 lệnh SSI là flastmod, printenv, và exec. Lệnh flastmod dùng in ra ngày chỉnh sửa cuối cùng của một tập tin chỉ định. Lệnh printenv dùng để hiển thị danh sách các biến môi trường và giá trị của chúng. Lệnh exec dùng để chạy một lệnh shell. Ghi chú: nếu bạn cấu hình Options +IncludesNOEXEC thì lệnh exec sẽ trả về thông báo lỗi thay vì ngày giờ hiện hành (Còn tiếp) E) Cấu hình Apache cho CGI CGI là một phương cách mà máy chủ Web dùng để giao tiếp với các chương trình chạy trên máy tính. Mã CGI thường được viết bằng các lệnh Shell của Unix hoặc bằng ngôn ngữ kịch bản ví dụ như Perl. Cấu hình để Apache chạy các chương trình CGI không khó. Đầu tiên bạn cần gán một bí danh cho thư mục chứa mã CGI vì nếu sử dụng đừơng dẫn đến thư mục thực thì dễ dàng bị các hacker xâm nhập và chạy các đoạn mã của riêng họ. Để tạo được bí danh chỉ đến thư mục CGI thực thì bạn mở tập tin httpd.conf và thêm dòng: Code: ScriptAlias /cgi-bin/ /usr/local/apache/share/cgi-bin/ Trong ví dụ này sử dụng đường dẫn mặc định đến thư mục thực chứa các mã CGI, tuy vậy bạn hoàn toàn có thể tự do sử dụng bất kỳ thư mục nào mà bạn muốn. Vậy trong trường hợp này, khi người dùng yêu cầu một địa chỉ URL như http://mydomain.com/cgi-bin/test.cgi thì Apache biết là sẽ phải tìm chương trình test.cgi theo đường dẫn thư mục /usr/local/apache/share/cgi-bin Đây mới chỉ là cấu hình để Apache tìm ra thư mục CGI, còn để Apache thực thi chạy các ứng dụng thì bạn cần phải chỉnh sửa trong access.conf bằng cách thêm các câu lệnh sau: Code: <Directory /usr/local/apache/share/cgi-bin> Options ExecCGI AddHandler cgi-script .cgi .pl </Directory> Lệnh Options dùng để nói cho Apache biết rằng được phép thực thi các CGI trong thư mục chỉ định. Lệnh AddHandler dùng để báo cho Apache biết những phần mở rộng tập tin nào liên quan đến trình quản lý cgi-script. Trong ví dụ này sử dụng hai phần mở rộng phổ biến nhất là CGI và PL. Nếu bạn chạy Apache trên môi trường Unix thì phải bảo đảm rằng tài khoản người dùng có quyền thực thi các mã lệnh trong thư mục này. F) Tránh tình trạng lặp file không cần thiết Có một số tập tin đặc biệt chẳng hạn như .htaccess được đặt trong một thư mục và báo cho Apache biết là cung cấp một phương cách quản lý đặc biệt dành cho các tập tin trong thư mục đó. Mặc định, Apache không được cấu hình để cho phép các tập tin .htaccess. Để kích hoạt sự cho phép bạn mở tập tin access.conf và thay đổi lệnh AllowOverride None thành AllowOverride All như ví dụ sau: <Directory /> AllowOverride All </Directory> Theo ví dụ trên thì khi người dùng yêu cầu /docs/about.html và thư mục gốc của bạn là /usr/local/apache/share/htdocs thì Apache sẽ thực thi lần lượt các tập tin .htaccess hiện diện trong tất cả các thư mục sau: Code: / /usr /usr/local /usr/local/apache /usr/local/apache/share /usr/local/apache/share/htdocs /usr/local/apache/share/htdocs/docs Thông thường thì không tồn tại tập tin .htaccess trong thư mục gốc nhưng với cấu hình trên Apache vẫn phải kiểm tra tuần tự để bảo đảm. Như vậy sẽ xảy ra tình trạng thừa rất nhiều các tác vụ tìm kiếm tập tin. Và nếu hacker có thể chèn một tập tin .htaccess vào bất cứ vị trí nào trong cây thư mục này thì sẽ dẫn đến một lổ hổng bảo mật dành trong trang web của bạn Vậy lời khuyên là bạn chỉ nên cho phép thực hiện tìm kiếm tập tin .htaccess trên thư mục cần thiết. Chẳng hạn như: Code: <Directory /> AllowOverride None </Directory> <Directory /usr/local/etc/httpd/htdocs> AllowOverride All </Directory> Giá trị All có thể được thay thế bằng các giá trị khác ví dụ như nếu bạn cho phép SSI nhưng không cho phép chạy các ứng dụng Shell : Code: <Directory /usr/local/etc/httpd/htdocs> AllowOverride IncludesNOEXEC </Directory> G) Kiểm tra thời gian timeout Trước đây, trình duyệt phải thiết lập một kết nối hoàn toàn mới đến máy chủ để lấy từng phần thông tin – một kết nối để lấy trang HTML và các kết nối riêng biệt khác để lấy từng hình GIF. Như vậy một trang với 3 tấm hình sẽ phải cần đến 4 kết nối. Cách làm này sẽ dẫn đến chiếm dụng nhiều lưu lượng mạng và khá chậm HTTP 1.1 đã thêm một tính năng mới được gọi là keep-alive cho phép máy chủ Web duy trì một kết nối ở trạng thái mở vì vậy trình duyệt có thể gửi nhiều yêu cầu mà không cần phải thiết lập từng kết nối mới. Trong Apache, tính năng keep-alive được quản lý bởi ba lệnh trong httpd.conf là KeepAlive, MaxKeepAliveRequests, và KeepAliveTimeout. Lệnh KeepAlive dùng để kích hoạt / vô hiệu hóa tính năng keep-alive. Lệnh MaxKeepAliveRequests xác định số lượng yêu cầu đựơc phép mà trình duyệt sẽ gởi đến máy chủ trong một kết nối đơn. Lệnh KeepAliveTimeout qui định khoảng thời gian máy chủ sẽ duy trì kết nối ở trạng thái mở nhằm chờ đợi các yêu cầu tiếp theo. Vậy để kích hoạt keep-alive, và cho phép 100 yêu cầu với thời gian timeout là 15 giây bạn thêm các dòng lệnh sau vào httpd.conf Code: KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 Để kiểm tra tác động của giá trị KeepAliveTimeout bạn telnet vào máy chủ web bằng lệnh telnet <địa chỉ IP của máy chủ web> 80 Sau đó gõ lệnh sau, ghi nhớ gõ Enter hai lần sau khi nhập dòng lệnh thứ hai Code: HEAD / HTTP/1.1 Host: builder-linux Lệnh này dùng để lấy thông tin header của tập tin index. Giờ đây bạn chỉ cần chờ cho hết thời gian timeout (đã được qui định bằng lệnh KeepAliveTimeout). Hãy thử với các giá trị timeout khác nhau bạn sẽ thấy được sự khác biệt. H) Luân phiên tập tin log Bất kỳ khi nào trình duyệt tải thông tin từ máy chủ Apache, thì máy chủ sẽ lưu thông tin liên quan đến lần truy cập này vào một tập tin log. Bạn sử dụng các tập tin log này để phân tích lưu lượng đến trang web. Nếu trang web của bạn có số lượng truy cập quá đông thì kích thước của tập tin log này sẽ tăng lên nhanh chóng, dẫn đến gây khó khăn trong việc phân tích. Để giải quyết tình trạng này bạn có thể sử dụng tiện ích luân phiên tập tin log được tích hợp sẵn trong Apache, gọi là rotatelogs. Luân phiên log nghĩa là sau một khoảng thời gian quy định sẽ tạo ra một tập tin log mới vì vậy các tập tin log cũ có thể được lưu trữ hoặc gửi đến công cụ phân tích mà không ảnh hưởng đến tập tin log hiện thời. Để sử dụng rotatelogs, phải thêm lệnh TransferLog vào tập tin httpd.conf Code: TransferLog "| /usr/local/apache/sbin/rotatelogs /usr/local/apache/var/log/access_log 86400" Ví dụ trên ta phải cung cấp cho TransferLog vị trí của chương trình rotatelogs cũng như vị trí và tên của tập tin log. Số 86400 đại diện cho số giây giữa mỗi lần luân phiên log – trong ví dụ này 86400 giây tương đương với 1 ngày Apache sẽ sinh ra một tập tin log dựa trên tên qui định là access_log kèm theo chuỗi số mở rộng chẳng hạn như access_log.0904347600. Và sau một ngày sẽ có một tập tin khác với chuỗi số mở rộng cao hơn. |
|
|