五、為用戶開辟個人主頁空間
如果我們利用了LINUX系統架設了一臺WEB服務器,我們不僅可以存放公司的主頁,而且還可以為公司的每一個員工提供一塊個人主頁的空間。
首先,為需要個人主頁空間的員工在LINUX上開設一個帳號。這樣,它就擁有了一個用戶主目錄“/home/用戶帳號名”。
addusr 用戶帳號名
passwd 用戶帳號名
在用戶主目錄下建立一個目錄“public_html”,然后為其設置相應的權限。
cd ~用戶帳號名
mkdir public_html
chmod 755 public_html
確認在srm.conf文件中的UserDir命令設置的是public_html目錄。
讓員工將自己的個人主頁上傳到自己用戶主目錄下的public_html目錄中。
現在就可以使用“http://www.company.com/~用戶帳號名”來訪問員工的個人主頁了。
六、用Apache實現服務
6.1 什么是服務
所謂的服務就是指將一臺機器虛擬成多臺WEB服務器。舉個例子來說,一家公司想從事提供主機代管服務,它為其它企業提供WEB服務。那么它肯定不是為每一家企業都各準備一臺物理上的服務器,而是用一臺功能較強大的大型服務器,然后用的形式,提供多個企業的WEB服務,雖然所有的WEB服務就是這臺服務器提供的,但是讓訪問者看起來卻是在不同的服務器上獲得WEB服務一樣。
具體地說,就是,我們可以利用服務將兩個不同公司與的主頁內容都存放在同一臺主機上。而訪問者只需輸入公司的域名就可以訪問到它想得到的主頁內容。
用Apache設置服務通??梢圆捎脙煞N方案:基于IP地址的和基于名字的,下面我們分別介紹一下它們的實現方法。以便大家在具體的應用中能夠選擇最合適的實現方法。
6.2 設置實現基于IP地址的服務
實現前提
這種方式需要在機器上設置IP別名,也就是在一臺機器的網卡上綁定多個
IP地址去為多個服務。而且要使用這項功能還要確定在你的LINUX內核中必須支持IP別名的設置,否則你還必須重新編譯內核。
下面舉一個擁有兩個的服務設置,以供參考。
2.配置步驟
假設,我們用來實現服務的機器,首先已經為自己提供了WEB服務,現在將為新的一家公司提供服務。
規劃IP地址:為申請新的IP地址。(假設本機IP地址為202.101.2.1)
202.101.2.2
2) 讓ISP作好相應的域名解析工作。
3) 為網卡設置IP別名:
/sbin/ifconfig eth0:0 202.101.2.2 netmask 255.255.255.0
4) 重新設置“/etc/httpd/conf/httpd.conf”,在文件中加入:
<VirtualHost 202.101.2.2>
ServerAdmin
DocumentRoot /home/httpd/www.company1.com
ServerName
ErrorLog /var/log/httpd/www.company1.com/error.log
</VirtualHost>
5)建立相應的目錄。
mkdir /home/httpd/www.company1.com
mkdir /var/log/httpd/www.company1.com/error.log
6)將相應的主頁內容存放在相應的目錄中即可。
3.不利因素
這種的實現方法有一個嚴重的不足,那就是,每增加一個,就必須增加一個IP地址。而由于IP地址空間已經十分緊張,所以通常情況下是無法取得這么多的IP地址的。而且從某種意義上說,這也是一種IP地址浪費。
6.3 設置實現基于名字的服務
而基于名字的服務,是比較適合使用的一種方案。因為它不需要更多的IP地址,而且配置簡單,無須什么特殊的軟硬件支持?,F代的瀏覽器大都支持這種的實現方法。當然,這也就是指一些早期的客戶端瀏覽器也許不支持這種的實現方法。
正是以上原因,我們沒有理由不使用基于名字的服務而使用基于IP地址的服務。配置基于名字的服務需要修改配置文件:“/etc/httpd/conf/httpd.conf”,在這個配置文件中增加以下內容。
NameVirtualHost 202.101.2.1
<VirtualHost 202.101.2.1>
ServerAdmin
DocumentRoot /home/httpd/www.company1.com
ServerName
ErrorLog /var/log/httpd/www.company1.com/error.log
</VirtualHost>
<VirtualHost 202.101.2.1>
ServerAdmin
DocumentRoot /home/httpd/www.company2.com
ServerName
ErrorLog /var/log/httpd/www.company2.com/error.log
</VirtualHost>
也就是在基于IP地址的配置基礎上增加一句:NameVirtualHost 202.101.2.1而已。在本例中,為了體現只需要增加一次,所以特別地設置了兩個服務。
最后也是建立相應的目錄,將主頁內容放到相應的目錄中去就可以了。
七、配置CGI
7.1 什么是CGI
CGI是獨立于語言的網關接口規范,它實際上可以用任何廣泛流行的應用程序開發語言來實現,包括C、C++、Perl、Shell腳本甚至Java。
WEB服務器從客戶端得到某個URL,它告訴WEB服務器,必須運行一個CGI外部應用程序。那么WEB服務器啟動這一應用程序,等待它完成并返回輸出結果。最后,它將此應用程序的輸出結果傳輸給另一端的WEB客戶。
7.2 為CGI配置Apache
那么如何使Apache能處理CGI請求呢?我們必須通過相應的配置過程告知Apache在哪里存儲CGI程序,指明CGI程序的擴展等,以下我們逐一介紹一下設置的內容與步驟。
創建存儲CGI程序的目錄
創建集中的CGI程序目錄只是建立CGI環境的開始。如果要考慮提高安全
性的話,應將集中的CGI程序目錄保存在DocumnetRoot目錄外,使得訪問者不能直接訪問CGI程序。
第一步:在DocumentRoot目錄外創建一個目錄,然后將所有的CGI程序都集中存放在這個目錄下。例如,你可創建一個/home/httpd/public/apps的目錄作為CGI程序的大本營。
第二步:為CGI程序目錄創建別名,也就是編輯配置文件httpd.conf,加入:
ScriptAlias /cgi-bin/ /home/httpd/public/apps
這樣做后,當客戶訪問時,WEB服務器就會自動執行WEB服務器上的/home/httpd/public/apps/li.cgi文件。
第三步:為CGI目錄設置合適的權限,一般是只允許Apache有讀取和執行的權限但沒有寫的權限。
允許用戶訪問cgi-bin
我們已經在4.5小節中介紹了如何給用戶開辟個人主頁空間,但如果你的
用戶需要使他的主頁更具有活力,往往會向你申請cgi-bin訪問服務。下面我們就介紹一個Apache服務器為用戶提供的兩種cgi-bin訪問方法。
1)使用Directory或DirectoryMatch容器
當在配置文件srm.conf中用UserDir命令被賦值為目錄名稱時,Apache就
把它作為用戶WWW站點的頂層目錄。例如:
UserDir Public_html
當Apache接到的請求,就到/home/user/Public_html取出主頁發送給客戶。
如果要為每個用戶添加CGI支持就在Apache的配置文件aclearcase/" target="_blank" >ccess.conf中添加下列配置:
<DirectoryMatch “/home/[a-z]+/public_html/cgi-bin”>
Options ExecCGI
AddHandler cgi-script .cgi .pl
</DirectoryMatch>
注:將DirectoryMatch換成Directory亦可
在這種方法中,Apache服務器將請求翻譯成為了/home/user/Public_html/cgi-bin/,并允許執行任何帶有正確擴展名(.cgi或.pl)的CGI程序。
使用ScriptAliasMatch命令
通過使用ScriptAliasMatch命令,也可以為每個用戶添加CGI支持。例如:
ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/$1/public_html/cgi-bin/$2
這個命令將用戶名與$1相匹配,其中$1與~([a-z]+)相等。將/cgi-bin/后面的任何內容與$2相匹配,其中$2與(.*)相等。
這個設置也就實現了將請求解釋為:
/home/user/Public_html/cgi-bin/xxx.cgi
那么大家想一想,如果你想將這個請求解釋為:
/home/httpd/public/apps/xxx.cgi
該如何設置呢?對,應該是:
ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/httpd/public /apps/$2
7.3 Apache為CGI提供的環境變量
Apache服務器提供了許多環境變量可以用于CGI程序的編寫,了解它們也一定有助于寫出充分利用Apache的CGI程序,所以在此也對此作一簡單介紹。
服務器變量
服務器變量由Apache設置用來通知CGI程序有關Apache的情況。通過使
用這些變量,CGI程序能確定有關服務器的不同信息:Apache的版本,管理員的E-Mail地址等。
SERVER_SOFTWARE
這個變量是WWW服務器Apache的版本號,它的值形如:Apache/Version,如Apache/1.3;
GATEWAY_INTERFACE
這個變量的值是當前CGI規范的版本號,其值形如:CGI/1.1;
SERVER_ADMIN
如果在httpd.conf文件中有設置站點管理員的e-mail地址的話,這個變量就會存放著這個e-mail地址;
DOCUMENT_ROOT
這個變量存放在是被訪問的WWW站點的DocumentRoot命令指定的值。
客戶請求變量
Apache提供的有關客戶請求方的環境變量有許多,以下只是有選擇性地介紹一些最常見的。
SERVER_NAME
此變量可以告訴CGI程序它訪問的是哪一個主機。這個值可以是IP地址也可以是完整的主機名;
HTTP_ACCEPT
此變量被賦值為客戶所能接受的MIME類型的列表,如:HTTP_ACCEPT=image/gif;
HTTP_ACCEPT_CHARSET
此變量被賦值為客戶所能接受的字符集,如:
HTTP_ACCEPT_CHARASET=iso-8859-1.,*,utf-8;
HTTP_ACCEPT_LANGUAGE
此變量被賦值為客戶所能接受的語言,如:HTTP_ACCEPT_LANGUAGE=en;
HTTP_ACCEPT_AGENT
這個變量指定發出請求的系統正在運行的瀏覽器類型和操作系統;
HTTP_PORT:服務端口;
REMOTE_HOST:客戶端的IP地址或IP名稱信息;
REMOTE_PORT:客戶端的端口號;
7.4 一點提示
若干年來,通過網關接口(CGI)已成為服務器端應用程序開發的事實標準。但隨著時間的推移,發現在沉重的CGI負擔下許多WWW服務器系統的表現不盡人意。這是因為CGI規范存在瓶頸問題:每當客戶系統請求CGI應用程序時,WWW服務器就必須啟動新的CGI進程,直到完成任務后結束進程。這在負載不高時,會工作正常。但是,在高負載時,繁多的進程將成為性能的瓶頸問題。
所以現在開始出現新的標準來彌補這一不足,其中FastCGI是很有前途的一種新的開放式標準。
你可以在Apache中通過添加mod_fastcgi.c模塊來支持FastCGI。