日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用Apache构建WEB服务器

發(fā)布時間:2024/4/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用Apache构建WEB服务器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

用Apache構(gòu)建WEB服務(wù)器

作者:level

Apache源于NCSAhttpd服務(wù)器,經(jīng)過多次修改,成為世界上最流行的Web服務(wù)器軟件之一。Apache取自"a patchy server"的讀音,意思是充滿補(bǔ)丁的服務(wù)器,因為它是自由軟件,所以不斷有人來為它開發(fā)新的功能、新的特性、修改原來的缺陷。Apache的特點是簡單、速度快、性能穩(wěn)定,并可做代理服務(wù)器來使用。

本來它只用于小型或試驗Internet網(wǎng)絡(luò),后來逐步擴(kuò)充到各種Unix系統(tǒng)中,尤其對Linux的支持相當(dāng)完美。Apache有多種產(chǎn)品,可以支持SSL技術(shù),支持多個虛擬主機(jī)。Apache是以進(jìn)程為基礎(chǔ)的結(jié)構(gòu),進(jìn)程要比線程消耗更多的系統(tǒng)開支,不太適合于多處理器環(huán)境,因此,在一個Apache
Web站點擴(kuò)容時,通常是增加服務(wù)器或擴(kuò)充群集節(jié)點而不是增加處理器。到目前為止Apache仍然是世界上用的最多的Web服務(wù)器,市場占有率達(dá)60%左右。世界上很多著名的網(wǎng)站如Amazon.com、Yahoo!、W3
Consortium、Financial Times等都是Apache的產(chǎn)物,它的成功之處主要在于它的源代碼開放、有一支開放的開發(fā)隊伍、支持跨平臺的應(yīng)用(可以運(yùn)行在幾乎所有的Unix、Windows、Linux系統(tǒng)平臺上)以及它的可移植性等方面。

Apache的誕生極富有戲劇性。當(dāng)NCSA WWW服務(wù)器項目停頓后,那些使用NCSA WWW服務(wù)器的人們開始交換他們用于該服務(wù)器的補(bǔ)丁程序,他們也很快認(rèn)識到成立管理這些補(bǔ)丁程序的論壇是必要的。就這樣,誕生了Apache Group,后來這個團(tuán)體在NCSA的基礎(chǔ)上創(chuàng)建了Apache。

Apache的主要特征是:

可以運(yùn)行上所有計算機(jī)平臺;

支持最新的HTTP 1.1協(xié)議;

簡單而強(qiáng)有力的基于文件的配置;

支持通用網(wǎng)關(guān)接口CGI;

支持虛擬主機(jī);

支持HTTP認(rèn)證;

集成Perl腳本編程語言;

集成的代理服務(wù)器;

具有可定制的服務(wù)器日志;

支持服務(wù)器端包含命令(SSI)

支持安全Socket層(SSL)

用戶會話過程的跟蹤能力;

支持FastCGI;

支持Java Servlets。

安裝Apache

下面我們就開始漫漫征服Apache之旅,通過循序漸進(jìn)的需求實例,一步步地學(xué)習(xí)使用Apache,從入門到精通。

系統(tǒng)需求運(yùn)行Apache不需要太多的計算資源。它在有6-10MB硬盤空間和8MB RAM的Linux系統(tǒng)上運(yùn)行得很好。然而,只運(yùn)行Apache可能不是你想做的事情。更可能的是,你想運(yùn)行Apache來提供WWW服務(wù)、啟動CGI進(jìn)程以及充分利用所有WWW能夠提供的令人驚奇的功能。在這種情況下,你需要提供反映負(fù)載要求的額外的磁盤空間和內(nèi)存空間。也就是說,如果僅僅是啟動WWW服務(wù)并不需要太多的系統(tǒng)資源,但是想要能為大量的客戶提供服務(wù)就需要更多的系統(tǒng)資源。

你可以通過以下三種方法安裝Apache服務(wù)器。

1.如果你安裝的Linux版本中帶用Apache的話,就在選擇所要安裝的服務(wù)器的時候,將httpd這個服務(wù)選上,Linux安裝程序?qū)⒆詣油瓿葾pache的安裝工作,并做好基本的配置。

2.使用可執(zhí)行文件軟件包,這比較適合那些對編譯工作不是太熟悉的初級用戶,因為它相對比較簡單。

下載軟件包apache_1.3.29.tar.gz

tar xvzf apache_1.3.29.tar.gz
這就完成了安裝工作,簡單吧!

如果你使用的是RedHat
Linux的話,你也可以下載apache_1.3.29.rpm軟件安裝包,然后使用rpm -ivh apache_1.3.29rpm命令安裝。

3.如果你想把Apache服務(wù)器充分利用起來的話,就一定要自己編譯Apache定制其功能。下載包含Apache源代碼的軟件包apache_xxx.tar.gz;
然后用tar命令將它解開; 將當(dāng)前目錄改變?yōu)锳pache源代碼發(fā)行版的src目錄; 將配置樣本文件(Configuration.tmpl)復(fù)制為Configuration文件;

編輯Configuration文件中的配置選項:

Makefile配置選項:一些編譯選項:

"CC="一行指定用什么編譯軟件編譯,一般為"CC=gcc";

如果需要將額外的標(biāo)志(參數(shù))指定給C編譯軟件,可以使用:

EXTRA_CFLAGS=

EXTRA_LFLAGS=

如果系統(tǒng)需要特殊的庫和包含文件,可以在這里指定它們:

EXTRA_LIBS=

EXTRA_INCLUDES=

如果你要改變代碼優(yōu)化設(shè)置的話,你須將下面一句去掉注釋,然

后改成你所需要的值:

#OPTIM=-O2

Rule配置選項:用來決定需要什么功能,一般情況下無需改變。

模塊配置:模塊是Apache的組成部分,它為Apache內(nèi)核增加新功能。通過使用模塊配置,可以自定義在Apache服務(wù)器中需要什么功能,這個部分也是Apache靈活性的表現(xiàn)。模塊配置行如下所示:

AddModule modules/standard/mod_env.o

如果你需要Apache服務(wù)器具備什么功能,就將那個模塊用AddModule語句加到配置文件Configuration中去。

下表列出了Apache的模塊功能:

模塊名 功能 缺省

mod_access 提供基于主機(jī)的訪問控制命令 y

mod_actions 能夠運(yùn)行基于MIME類型的CGI腳本或HTTP請求方法 y

mod_alias 能執(zhí)行URL重定向服務(wù) y

mod_asis 使文檔能在沒有HTTP頭標(biāo)的情況下被發(fā)送到客戶端 y

mod_auth 支持使用存儲在文本文件中的用戶名、口令實現(xiàn)認(rèn)證 y

mod_auth_dbm 支持使用DBM文件存儲基本HTTP認(rèn)證 n

mod_auth_mysql 支持使用MySQL數(shù)據(jù)庫實現(xiàn)基本HTTP認(rèn)證 n

mod_auth_anon 允許以匿名方式訪問需要認(rèn)證的區(qū)域 y

mod_auth_external支持使用第三方認(rèn)證 n

mod_autoindex 當(dāng)缺少索引文件時,自動生成動態(tài)目錄列表 y

mod_cern_meta 提供對元信息的支持 n

mod_cgi 支持CGI y

mod_dir 能夠重定向任何對不包括尾部斜杠字符命令的請求 y

mod_env 使你能夠?qū)h(huán)境變量傳遞給CGI或SSI腳本 n

mod_expires 讓你確定Apache在服務(wù)器響應(yīng)請求時如何處理Expires y

mod_headers 能夠操作HTTP應(yīng)答頭標(biāo) y

mod_imap 提供圖形映射支持 n

mod_include 使支持SSI n

mod_info 對服務(wù)器配置提供了全面的描述 y

mod_log_agent 允許在單獨的日志文件中存儲用戶代理的信息 n

mod_log_config 支持記錄日志 y

mod_log_referer 提供了將請求中的Referer頭標(biāo)寫入日志的功能 n

mod_mime 用來向客戶端提供有關(guān)文檔的元信息 y

mod_negotiation 提供了對內(nèi)容協(xié)商的支持 y

mod_setenvif 使你能夠創(chuàng)建定制環(huán)境變量 y

mod_speling 使你能夠處理含有拼寫錯誤或大小寫錯誤的URL請求 n

mod_status 允許管理員通過WEB管理Apache y

mod_unique_id 為每個請求提供在非常特殊的條件下保證是唯一的標(biāo)識 n

在src目錄下執(zhí)行:". /configure";


編譯Apache:執(zhí)行命令"make";根據(jù)機(jī)器性能的不同,經(jīng)歷一段5-30分鐘的編譯,就大功告成了。將編譯好的可執(zhí)行文件httpd復(fù)制到/etc/httpd/bin目錄下;將Apache發(fā)行版的配置文件:access.conf、httpd.conf、mime.types、srm.conf文件復(fù)制到/etc/httpd/conf目錄下。到此為止,安裝完成。

一些說明

在Red Hat Linux 中,Apache將自己的所有配置文件和日志文件放在了"/etc/httpd"目錄下,其中"/etc/httpd/conf"下為配置文件,"/etc/httpd/log"下為日志文件。

同時,它將建立"/home/httpd"目錄,并在其下建立三個子目錄:"html/":在這個目錄下存放HTML(主頁)文件;"cgi-bin/":在這個目錄下可以存放一些CGI程序;"icons/":在這個目錄下是服務(wù)器自帶的一些圖標(biāo)。

配置Apache基礎(chǔ)篇,讓W(xué)WW服務(wù)器跑起來

Apache服務(wù)器軟件的配置文件主要有:"access.conf":用于設(shè)置系統(tǒng)中的存取方式和環(huán)境;"httpd.conf":用于設(shè)置服務(wù)器啟動的基本環(huán)境;"srm.conf":主要用于做文件資源上的設(shè)定;"mime.type":記錄Apache服務(wù)器所能識別的MIME格式。

在具體講解之前,我必須告訴大家,Apache已經(jīng)在安裝時就采用了一系列的缺省值,已經(jīng)讓W(xué)WW服務(wù)器跑起來了。你只需要將裝上Linux+Apache的主機(jī)聯(lián)入Internet,然后將主頁存放到"/home/httpd"目錄下即可。

下面介紹一些最主要的配置選項的含義,以便大家用最小的精力、最小的配置準(zhǔn)備好服務(wù)器。

httpd.conftpd.conf是主配置文件。它告訴服務(wù)器將如何運(yùn)行。

一、最重要的配置選項ServerType standalone | inetd

這個配置選項指定如何運(yùn)行WEB服務(wù)器。Apache可以使用兩種方法來運(yùn)行服務(wù)器:standalone(獨立的)和inetd(由inetd運(yùn)行的)。standalone參數(shù)表示W(wǎng)EB服務(wù)進(jìn)程以一個單獨的守候進(jìn)程的方式在后臺偵聽是否有客戶端的請求,如果有就生成一個子進(jìn)程來為其服務(wù)。inetd參數(shù)表示W(wǎng)EB服務(wù)不是以一個單獨的守候進(jìn)程的形式支持。而是由Inetd這個超級服務(wù)器守候進(jìn)程進(jìn)行代勞,當(dāng)它收到一個客戶端的WEB服務(wù)請求的時候,再啟動一個WEB服務(wù)進(jìn)程為其服務(wù)。從功能的角度看,這兩種方法幾乎是相同的。但它們之間實際有很大區(qū)別,區(qū)別在于服務(wù)器的性能。一個由inted運(yùn)行的服務(wù)器進(jìn)程在它結(jié)束對請求服務(wù)的同時立刻退出。而在standalone模式下,子WWW服務(wù)器進(jìn)程在退出之前要掛起一段時間,這就給它們提供了機(jī)會,可以重新用來服務(wù)新的請求。

在standalone模式下,不存在對每個請求啟動新進(jìn)程的開銷,所以它的效率更高;而inetd模式被認(rèn)為比standalone模式更具安全性。

standalone模式:

此種模式下,WWW服務(wù)器偵聽特定端口的連接請求。當(dāng)客戶機(jī)發(fā)出到特定端口地址的連接請求時,主服務(wù)器進(jìn)程啟動子WWW服務(wù)進(jìn)程來服務(wù)該請求。另外還需要告訴主服務(wù)器進(jìn)程偵聽的特定端口地址,使用命令:

Port [number] (缺省值為80)

注意在apache新版本中已經(jīng)用listen取代port


inetd模式

inetd是偵聽有小于1024的端口連接請求的Internet守護(hù)進(jìn)程(一個服務(wù)器進(jìn)程)。與前面的方法不同,當(dāng)客戶系統(tǒng)發(fā)出到WWW服務(wù)器的連接請求時,inetd啟動一個WWW服務(wù)器進(jìn)程,由此進(jìn)程服務(wù)此請求,完成服務(wù)后即退出。如果選擇通過inetd服務(wù)器來運(yùn)行Apache,需要編輯/etc/inetd.conf文件為Apache添加一條新的記錄:

httpd stream tcp nowait httpd
/etc/httpd/bin/httpd -f /etc/httpd/conf/httpd.conf

修改了/etc/inetd.conf文件后,就需要修改/etc/services中添加一行

httpd 80/tcp httpd

做完以上修改后,需要重新啟動inetd進(jìn)程。首先,使用以下命令取得inetd的進(jìn)程ID:

ps auxw |grep inetd

然后執(zhí)行命令:kill -HUP

在RedHat Linux中,默認(rèn)是采用inetd服務(wù)器來運(yùn)行Apache,所以只要你在安裝時選擇了httpd,以上工作在安裝時就已經(jīng)代你完成了。

二、其它配置選項

Server Admin命令,用來設(shè)置WEB管理員的E-Mail地址。這個地址會出現(xiàn)在系統(tǒng)連接出錯的時候,以便訪問者能夠?qū)⑶闆r及時地告知WEB管理員。

命令格式: Server Admin [you E-Mail
address]

例:Server Admin admin@xxx.com

ErrorLog命令,用來指定錯誤記錄文件名稱和路徑。

命令格式: ErrorLog [log filename]

例:ErrorLog /var/httpd/error.log

Timeout命令,只要客戶端超過這里設(shè)定的秒數(shù)還沒有完成一個請求的話,服務(wù)端將終止這次請求服務(wù)。如果網(wǎng)絡(luò)速度較慢的話,建議在此設(shè)置較大的數(shù)值。以給客戶端更多機(jī)會。

命令格式: Timeout [second]

例:Timeout 120

ServerRoot命令,它指定在何處保存服務(wù)器的配置、錯誤及日志文件。

命令格式: ServerRoot [fully qualified path name]

例:ServerRoot /etc/httpd

ServerName命令,它配置服務(wù)器的Internet主機(jī)名

命令格式: ServerName [host name]

例:ServerName www.xxx.com

srm.conf

srm.conf是資源配置文件,用它來告訴服務(wù)器你想在WWW站點上提供什么資源以及在哪里和如何提供們。

DocumentRoot命令,用來指定主文檔的地址。

命令格式: DocumentRoot [Path]

例:DocumentRoot /home/httpd/html

UserDir命令,用來指定個人主頁的位置。如果你有一個用戶test,那么它主目錄是"/home/test",當(dāng)客戶端輸入"http://yourdomain/~test",系統(tǒng)就會到對應(yīng)的目錄"/home/test/UserDir/"中去尋找。其中"UserDir"就是在UserDir命令中設(shè)置的指定目錄。


命令格式: UserDir [Path]

例: UserDir Public_html

DirectoryIndex命令,用來聲明首頁文件名稱。一般地,我們使用"index.html"或"index.htm"作為首頁的文件名。如果這樣設(shè)置后,那么客戶端發(fā)出WEB服務(wù)請求時,將首先調(diào)入的主頁是在指定目錄下文?quot;index.html"或"index.htm"。

命令格式: DirecotryIndex [filename]

例:DirecotryIndex index.html index.htm

ScriptAlias命令,為腳本程序目錄起個別名,具體可見4.7小節(jié)。

命令格式: ScriptAlias [/alias/] [fullly qualified path for script
directory]

例: ScriptAlias /cgi-bin/ /home/httpd/cgi-bin

access.conf的配置

access.conf文件用來設(shè)置WWW站點上諸如文件、目錄和腳本項目的訪問權(quán)限。該文件的第一段非注釋部分如下:

<Directory /home/httpd/html>

Option Indexes Includes ExecCGI FollowSymLink

AllowOverride None

Order allow , deny

allow from all

</Directory>

大家應(yīng)該注意到,這一個部分是以開始,以結(jié)束的。這表示在其中間的部分都是針對指定目錄"/home/httpd/html"而言的。

1.Option命令有很多的參數(shù),各個參數(shù)的意義如下所示:

All 準(zhǔn)許以下所有功能(MultiViews除外);

MultiViews 準(zhǔn)許內(nèi)容協(xié)商的Multiviews;

Indexes 若該目錄下無index文件,則準(zhǔn)許顯示該目錄下的文件以供選擇;

IncludesNOEXEC 準(zhǔn)許SSI(Server-side Includes),但不可使用#exec和#include功能;

Includes 準(zhǔn)許SSI;

FollowSymLinks 準(zhǔn)許符號鏈接到其他目錄;

ExecCGI
準(zhǔn)許該目錄下可以使用CGI。

2.而AllowOverride命令則是用來決定是否準(zhǔn)許在"access.conf"文件中設(shè)定的權(quán)限是否可以被在文件".htaccess"中設(shè)定的權(quán)限覆蓋。它有兩個參數(shù):

All 準(zhǔn)許覆蓋;

None 不準(zhǔn)許覆蓋。

3.Order命令:用來設(shè)定誰能從這個服務(wù)器取得控制。它也有兩個參數(shù):

allow 可以取得控制;

deny 禁止取得控制。

現(xiàn)在我們一起來看看關(guān)于目錄"/home/httpd/html"的設(shè)置的含義:它使得這個目錄,如果不存在index.htm文件時,列出目錄信息以供選擇,準(zhǔn)許SSI,允許執(zhí)行CGI程序,開啟了動態(tài)連接。它不允許再使用在文件".htaccess"中設(shè)定來覆蓋這里所設(shè)置的權(quán)限。使所有的人都可以取得控制。

該文件的第二段非注釋部分如下:

<Directory /home/httpd/cgi-bin>

Option ExecCGI

AllowOverride None

</Directory>

這個表示目錄"/home/httpd/cgi"的設(shè)置為,當(dāng)前目錄下可以執(zhí)行CGI程序。不允許再使用在文件".htaccess"中設(shè)定來覆蓋這里所設(shè)置的權(quán)限。

需要說明的是,不同的LINUX系統(tǒng)中,可以在這個文件中看到的信息不完全相同,但是根據(jù)這里給出的信息,大家可以參照命令的解釋自行理解文件中的設(shè)置,以及根據(jù)自己的需要進(jìn)行相應(yīng)的修改。

使新的配置生效

在上面,我們可能已經(jīng)根據(jù)新的需求更改了相應(yīng)的配置選項,如果我們要使得這個新的配置立即生效。我們就必須重新啟動WEB服務(wù)進(jìn)程。在LINUX中,我們可以十分方便地使用命令行來使得WEB服務(wù)進(jìn)程重啟。

/etc/rc.d/init.d/httpd restart

五、為用戶開辟個人主頁空間

如果我們利用了LINUX系統(tǒng)架設(shè)了一臺WEB服務(wù)器,我們不僅可以存放公司的主頁,而且還可以為公司的每一個員工提供一塊個人主頁的空間。

首先,為需要個人主頁空間的員工在LINUX上開設(shè)一個帳號。這樣,它就擁有了一個用戶主目錄"/home/用戶帳號名"。

addusr
用戶帳號名

passwd 用戶帳號名

在用戶主目錄下建立一個目錄"public_html",然后為其設(shè)置相應(yīng)的權(quán)限。

cd ~用戶帳號名

mkdir public_html

chmod 755 public_html

確認(rèn)在srm.conf文件中的UserDir命令設(shè)置的是public_html目錄。讓員工將自己的個人主頁上傳到自己用戶主目錄下的public_html目錄中。

現(xiàn)在就可以使用"http://www.company.com/~用戶帳號名"來訪問員工的個人主頁了。

用Apache實現(xiàn)虛擬主機(jī)服務(wù)

什么是虛擬主機(jī)服務(wù)

所謂的虛擬主機(jī)服務(wù)就是指將一臺機(jī)器虛擬成多臺WEB服務(wù)器。舉個例子來說,一家公司想從事提供主機(jī)代管服務(wù),它為其它企業(yè)提供WEB服務(wù)。那么它肯定不是為每一家企業(yè)都各準(zhǔn)備一臺物理上的服務(wù)器,而是用一臺功能較強(qiáng)大的大型服務(wù)器,然后用虛擬主機(jī)的形式,提供多個企業(yè)的WEB服務(wù),雖然所有的WEB服務(wù)就是這臺服務(wù)器提供的,但是讓訪問者看起來卻是在不同的服務(wù)器上獲得WEB服務(wù)一樣。

具體地說,就是,我們可以利用虛擬主機(jī)服務(wù)將兩個不同公司www.company1.com與www.company2.com的主頁內(nèi)容都存放在同一臺主機(jī)上。而訪問者只需輸入公司的域名就可以訪問到它想得到的主頁內(nèi)容。
用Apache設(shè)置虛擬主機(jī)服務(wù)通常可以采用兩種方案:基于IP地址的虛擬主機(jī)和基于名字的虛擬主機(jī),下面我們分別介紹一下它們的實現(xiàn)方法。以便大家在具體的應(yīng)用中能夠選擇最合適的實現(xiàn)方法。

設(shè)置實現(xiàn)基于IP地址的虛擬主機(jī)服務(wù)實現(xiàn)前提這種方式需要在機(jī)器上設(shè)置IP別名,也就是在一臺機(jī)器的網(wǎng)卡上綁定多個IP地址去為多個虛擬主機(jī)服務(wù)。而且要使用這項功能還要確定在你的LINUX內(nèi)核中必須支持IP別名的設(shè)置,否則你還必須重新編譯內(nèi)核。

下面舉一個擁有兩個虛擬主機(jī)的服務(wù)設(shè)置,以供參考。

2.配置步驟

假設(shè),我們用來實現(xiàn)虛擬主機(jī)服務(wù)的機(jī)器,首先已經(jīng)為自己提供了WEB服務(wù),現(xiàn)在將為新的一家公司www.new1.com提供虛擬主機(jī)服務(wù)。

1)規(guī)劃IP地址:為虛擬主機(jī)申請新的IP地址。(假設(shè)本機(jī)IP地址為192.166.1.101)

www.new1.com
192.16861.101

2) 讓ISP作好相應(yīng)的域名解析工作。

3) 為網(wǎng)卡設(shè)置IP別名:

/sbin/ifconfig eth0:0 192.166.1.101netmask 255.255.255.0

4) 重新設(shè)置"/etc/httpd/conf/httpd.conf",在文件中加入:

<VirtualHost 192.166.1.101>

ServerAdmin webmaster@yourdomain.com

DocumentRoot /home/httpd/www.new1.com

ServerName www.new1.com

ErrorLog /var/log/httpd/www.new1.com/error.log

</VirtualHost>

5)建立相應(yīng)的目錄。

mkdir /home/httpd/www.new1.com

mkdir /var/log/httpd/www.new1.com/error.log

6)將相應(yīng)的主頁內(nèi)容存放在相應(yīng)的目錄中即可。

3.不利因素

這種虛擬主機(jī)的實現(xiàn)方法有一個嚴(yán)重的不足,那就是,每增加一個虛擬主機(jī),就必須增加一個IP地址。而由于IP地址空間已經(jīng)十分緊張,所以通常情況下是無法取得這么多的IP地址的。而且從某種意義上說,這也是一種IP地址浪費。設(shè)置實現(xiàn)基于名字的虛擬主機(jī)服務(wù)而基于名字的虛擬主機(jī)服務(wù),是比較適合使用的一種方案。因為它不需要更多的IP地址,而且配置簡單,無須什么特殊的軟硬件支持。現(xiàn)代的瀏覽器大都支持這種虛擬主機(jī)的實現(xiàn)方法。當(dāng)然,這也就是指一些早期的客戶端瀏覽器也許不支持這種虛擬主機(jī)的實現(xiàn)方法。

正是以上原因,我們沒有理由不使用基于名字的虛擬主機(jī)服務(wù)而使用基于IP地址的虛擬主機(jī)服務(wù)。配置基于名字的虛擬主機(jī)服務(wù)需要修改配置文件?quot;/etc/httpd/conf/httpd.conf",在這個配置文件中增加以下內(nèi)容。

NameVirtualHost 192.166.1.101

<VirtualHost 192.166.1.101>

ServerAdmin webmaster@yourdomain.com

DocumentRoot /home/httpd/www.new1.com

ServerName www.new1.com

ErrorLog /var/log/httpd/www.company1.com/error.log

</VirtualHost>

<VirtualHost 192.166.1.101>

ServerAdmin webmaster@yourdomain.com

DocumentRoot /home/httpd/www.new2.com

ServerName www.new2.com

ErrorLog /var/log/httpd/www.new2.com/error.log

</VirtualHost>

也就是在基于IP地址的配置基礎(chǔ)上增加一句:NameVirtualHost 192.166.1.101而已。在本例中,為了體現(xiàn)只需要增加一次,所以特別地設(shè)置了兩個虛擬主機(jī)服務(wù)。

最后也是建立相應(yīng)的目錄,將主頁內(nèi)容放到相應(yīng)的目錄中去就可以了

配置CGI

1. 什么是CGI

CGI是獨立于語言的網(wǎng)關(guān)接口規(guī)范,它實際上可以用任何廣泛流行的應(yīng)用程序開發(fā)語言來實現(xiàn),包括C、C++、Perl、Shell腳本甚至Java。

WEB服務(wù)器從客戶端得到某個URL,它告訴WEB服務(wù)器,必須運(yùn)行一個CGI外部應(yīng)用程序。那么WEB服務(wù)器啟動這一應(yīng)用程序,等待它完成并返回輸出結(jié)果。最后,它將此應(yīng)用程序的輸出結(jié)果傳輸給另一端的WEB客戶。

2. 為CGI配置Apache

那么如何使Apache能處理CGI請求呢?我們必須通過相應(yīng)的配置過程告知Apache在哪里存儲CGI程序,指明CGI程序的擴(kuò)展等,以下我們逐一介紹一下設(shè)置的內(nèi)容與步驟。

創(chuàng)建存儲CGI程序的目錄

創(chuàng)建集中的CGI程序目錄只是建立CGI環(huán)境的開始。如果要考慮提高安全

性的話,應(yīng)將集中的CGI程序目錄保存在DocumnetRoot目錄外,使得訪問者不能直接訪問CGI程序。

第一步:在DocumentRoot目錄外創(chuàng)建一個目錄,然后將所有的CGI程序都集中存放在這個目錄下。例如,你可創(chuàng)建一個/home/httpd/public/apps的目錄作為CGI程序的大本營。

第二步:為CGI程序目錄創(chuàng)建別名,也就是編輯配置文件httpd.conf,加入:

ScriptAlias /cgi-bin/
/home/httpd/public/apps

這樣做后,當(dāng)客戶訪問www.xxx.com/cgi-bin/li.cgi時,WEB服務(wù)器就會自動執(zhí)行WEB服務(wù)器上的/home/httpd/public/apps/li.cgi文件。

第三步:為CGI目錄設(shè)置合適的權(quán)限,一般是只允許Apache有讀取和執(zhí)行的權(quán)限但沒有寫的權(quán)限。

允許用戶訪問cgi-bin
我如何給用戶開辟個人主頁空間,但如果你的 用戶需要使他的主頁更具有活力,往往會向你申請cgi-bin訪問服務(wù)。下面我們就介紹一個Apache服務(wù)器為用戶提供的兩種cgi-bin訪問方法。

使用Directory或DirectoryMatch容器

當(dāng)在配置文件srm.conf中用UserDir命令被賦值為目錄名稱時,Apache就

把它作為用戶WWW站點的頂層目錄。例如:

UserDir Public_html

當(dāng)Apache接到www.xxx.com/~user的請求,就到/home/user/Public_html取出主頁發(fā)送給客戶。

如果要為每個用戶添加CGI支持就在Apache的配置文件access.conf中添加下列配置:

<DirectoryMatch "/home/[a-z]+/public_html/cgi-bin">

Options ExecCGI

AddHandler cgi-script .cgi .pl

</DirectoryMatch>

注:將DirectoryMatch換成Directory亦可

在這種方法中,Apache服務(wù)器將www.xxx.com/~user/cgi-bin請求翻譯成為了/home/user/Public_html/cgi-bin/,并允許執(zhí)行任何帶有正確擴(kuò)展名(.cgi或.pl)的CGI程序。

使用ScriptAliasMatch命令

通過使用ScriptAliasMatch命令,也可以為每個用戶添加CGI支持。例如:

ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/$1/public_html/cgi-bin/$2

這個命令將用戶名與$1相匹配,其中$1與~([a-z]+)相等。將/cgi-bin/后面的任何內(nèi)容與$2相匹配,其中$2與(.*)相等。

這個設(shè)置也就實現(xiàn)了將www.xxx.com/~user/cgi-bin/xxx.cgi請求解釋為:

/home/user/Public_html/cgi-bin/xxx.cgi

那么大家想一想,如果你想將這個請求解釋為:

/home/httpd/public/apps/xxx.cgi

該如何設(shè)置呢?對,應(yīng)該是:

ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/httpd/public /apps/$2

3.Apache為CGI提供的環(huán)境變量

Apache服務(wù)器提供了許多環(huán)境變量可以用于CGI程序的編寫,了解它們也一定有助于寫出充分利用Apache的CGI程序,所以在此也對此作一簡單介紹。

服務(wù)器變量

服務(wù)器變量由Apache設(shè)置用來通知CGI程序有關(guān)Apache的情況。通過使用這些變量,CGI程序能確定有關(guān)服務(wù)器的不同信息:Apache的版本,管理員的E-Mail地址等。

SERVER_SOFTWARE

這個變量是WWW服務(wù)器Apache的版本號,它的值形如:Apache/Version,如Apache/1.3;

GATEWAY_INTERFACE

這個變量的值是當(dāng)前CGI規(guī)范的版本號,其值形如:CGI/1.1;

SERVER_ADMIN

如果在httpd.conf文件中有設(shè)置站點管理員的e-mail地址的話,這個變量就會存放著這個e-mail地址;

DOCUMENT_ROOT

這個變量存放在是被訪問的WWW站點的DocumentRoot命令指定的值。

客戶請求變量

Apache提供的有關(guān)客戶請求方的環(huán)境變量有許多,以下只是有選擇性地介紹一些最常見的。

SERVER_NAME

此變量可以告訴CGI程序它訪問的是哪一個主機(jī)。這個值可以是IP地址也可以是完整的主機(jī)名;

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

這個變量指定發(fā)出請求的系統(tǒng)正在運(yùn)行的瀏覽器類型和操作系統(tǒng);

HTTP_PORT:服務(wù)端口;

REMOTE_HOST:客戶端的IP地址或IP名稱信息;

REMOTE_PORT:客戶端的端口號;

4. 一點提示

若干年來,通過網(wǎng)關(guān)接口(CGI)已成為服務(wù)器端應(yīng)用程序開發(fā)的事實標(biāo)準(zhǔn)。但隨著時間的推移,發(fā)現(xiàn)在沉重的CGI負(fù)擔(dān)下許多WWW服務(wù)器系統(tǒng)的表現(xiàn)不盡人意。這是因為CGI規(guī)范存在瓶頸問題:每當(dāng)客戶系統(tǒng)請求CGI應(yīng)用程序時,WWW服務(wù)器就必須啟動新的CGI進(jìn)程,直到完成任務(wù)后結(jié)束進(jìn)程。這在負(fù)載不高時,會工作正常。但是,在高負(fù)載時,繁多的進(jìn)程將成為性能的瓶頸問題。

所以現(xiàn)在開始出現(xiàn)新的標(biāo)準(zhǔn)來彌補(bǔ)這一不足,其中FastCGI是很有前途的一種新的開放式標(biāo)準(zhǔn)。

你可以在Apache中通過添加mod_fastcgi.c模塊來支持FastCGI。

建立Apache站點的基本安全機(jī)制

對于WWW服務(wù)來說,在WWW服務(wù)器和WWW瀏覽器之間并不始終維持對話過程。辦要WWW服務(wù)器完成對一個URL請求的服務(wù),連接就斷開了。

在這種情況下,在WWW上保證可以使用的唯一認(rèn)證機(jī)制是由HTTP本身提供 的。在標(biāo)準(zhǔn)的Apache服務(wù)器實現(xiàn)了這樣的認(rèn)證,它能控制哪些主機(jī)可能訪問特定的站點或特點的站點的一部分。

這種認(rèn)證可以分為兩種,一種是基于主機(jī)的的認(rèn)證,另一種是基于用戶名/口令的認(rèn)證。由于互聯(lián)網(wǎng)上的決大多數(shù)用戶的IP地址是動態(tài)獲得的,所以基于主機(jī)的認(rèn)證方式并不總適用。所以在大多數(shù)情況下,傳統(tǒng)的基于用戶名/口令的認(rèn)證方式更為現(xiàn)實。下面我們就對這兩種認(rèn)證的實現(xiàn)做一簡要的介紹。

1. 基于主機(jī)的認(rèn)證方式

在種認(rèn)證模式顧名思義,訪問是用主機(jī)名或主機(jī)IP地址來控制的。支持這種認(rèn)證方式的是Apache的mod_access模塊,這個模塊缺省狀態(tài)下是被安裝了的。該模塊用以下幾種Apache命令來提供訪問控制功能。

allow命令

語法:allow from host1 host2 host3 ...

這個命令定義了允許訪問站點或目錄的主機(jī)清單。主機(jī)清單可以用以下幾種形式表示:

ALL:代表所有主機(jī);

主機(jī)的全域名,如:www.mycom;

主機(jī)的部分域名,如:.my.com;
完整的IP地址,如:192.166.1.102;
部分IP地址,如:192.166網(wǎng)絡(luò)地址/網(wǎng)絡(luò)掩碼對,網(wǎng)絡(luò)地址/nn(CIDR定義)

deny命令
語法:deny
from host1 host2 host3 ...

這個命令定義了禁止訪問站點或目錄的主機(jī)清單,其他與allow命令相似。

order命令

語法:order deny,allow | allow,deny

這個命令定義評價allow和deny命令的先后順序。

例如:

<Directory /home/httpd/html><br>

order deny,allow<br>

deny from www.my.com<br>

allow all<br>

</Directory>

這組命令設(shè)置了禁止www.my.com訪問/home/httpd/html目錄下的文件。

請大家注意,順序是先deny后allow,如果是:order allow,deny 那么,先允許所有的主機(jī)訪問,然后再禁止,這樣是無效的,所有主機(jī)仍然能夠訪問。

2. 基于用戶名/口令的認(rèn)證方式

這種認(rèn)證方式其實相當(dāng)簡單,當(dāng)WWW瀏覽器請求經(jīng)此認(rèn)證模式保護(hù)的URL時,將會出現(xiàn)一個對話框,要求用戶鍵入用戶名和口令。用戶輸入后,傳給WWW服務(wù)器,WWW服務(wù)器驗證它的正確性,如果正確,返回頁面,否則返回401錯誤。要說明的一點是,這種認(rèn)證模式是基本的,并不能用于安全性要求極高的場合。

Apache中有許多模塊可以支持這種認(rèn)證方式,下面我們就介紹一下最基本、最標(biāo)準(zhǔn)的mod_auth模塊。正如前面提到的一樣,mod_auth模塊使用存儲在文本文件中的用戶名、組名和口令來實現(xiàn)認(rèn)證。這種方法非常適合處理少量用戶,它能工作得很好。如果你需要對大量的用戶,如數(shù)以千計的用戶做認(rèn)證時,這種方法的性能將急劇下降到不可忍受,所以當(dāng)這種情況下,就需要考慮使用mod_dbm模塊或mod_mysql模塊來獲得更好的性能。

實例一:需要用戶名和口令的訪問控制

下面我們就一起來看一下如何建立需要用戶名/口令才能進(jìn)行訪問的目錄。

基本情況:
www.xxx.com

的站點有設(shè)置為:

DocumentRoot /home/httpd/html

AccessFileName .htaccess

AllowOverride All

需求:限制/home/httpd/html/backup/目錄的訪問,只允許用戶"super"以口令"fill-06"訪問此目錄。

實現(xiàn)步驟:

使用htpasswd建立用戶文件

htpasswd -c /home/httpd/secr/.htpasswd
super

此程序會詢問用戶"super"的口令,你輸入"fill-06",兩次生效。

建立.htaccess文件

用vi在/home/httpd/html/backup/目錄下建立一個文件.htaccess,寫入以下幾行:

AuthName My Friend Only (注:這個名字是任取的)

AuthType Basic

AuthUserFile /home/httpd/secr/.htpasswd

require user super

設(shè)置文件權(quán)限,確保Apache用戶有讀的權(quán)限這樣就完成了設(shè)置工作,你可以試一試效果了。

實例二:允許一組用戶訪問一個目錄

假設(shè),現(xiàn)在www.xxx.com想讓myfriend組中的mf1與mf2兩個用戶分別能使用口令"mf001-1""mf002-2"訪問/home/httpd/html/backup/目錄。

實現(xiàn)步驟:

使用htpasswd建立用戶文件

htpasswd -c /home/httpd/secr/.htpasswd
mf1

htpasswd -c /home/httpd/secr/.htpasswd mf2

建立組文件

用vi/home/httpd/secr/目錄下建立一個文件.htgroup,寫入:

myfriend:mf1 mf2

建立.htaccess文件

用vi在/home/httpd/html/backup/目錄下建立一個文件.htaccess,寫入以下幾行:

AuthName My Friend Only

AuthType Basic

AuthUserFile /home/httpd/secr/.htpasswd

AuthGroupFile /home/httpd/secr/.htgroup

require group myfriend

配置工作到此結(jié)束,試一試吧!

實例三:混合使用基于主機(jī)與基于用戶名/口令的認(rèn)證方式如果你除了只允許讓mf1與mf2兩個用戶訪問外,還想禁止除www.mot.com

外的主機(jī)訪問這個目錄的話,就將/home/httpd/html/backup/.htaccess修改成為:

AuthName My Friend Only

AuthType Basic

AuthUserFile /home/httpd/secr/.htpasswd

AuthGroupFile /home/httpd/secr/.htgroup

require group myfriend

order deny,allow

deny from all

allow from www.mot.com

讀Apache日志

當(dāng)你一步步地看到這里的時候,相信你的WWW站點已經(jīng)建好,并且已經(jīng)在Internet上展現(xiàn)出來了。這時你可能就會關(guān)心誰造訪過你的站點,或者想知道你的Apache服務(wù)器現(xiàn)在的運(yùn)行狀態(tài)與性能如何。下面我們一起通過解讀Apache的日志來實現(xiàn)這個偉大的愿望。

一、盯著Apache服務(wù)器

Apache允許通過WWW監(jiān)視服務(wù)器的配置信息與運(yùn)行狀態(tài)。

1.觀看配置信息

如果你的Apache象缺省配置一樣加入了mod_info模塊的話,你就可以通過訪問http://localhost/server-info查看服務(wù)器信息。

2.使用狀態(tài)頁

如果你的Apache象缺省配置一樣加入了mod_status模塊的話,你就可以通過訪問http://localhost/apache-status查看服務(wù)器的運(yùn)行狀態(tài)信息,其中包括:

服務(wù)器系統(tǒng)的當(dāng)前時間;

服務(wù)器最近一次重啟時間;

服務(wù)器啟動后的運(yùn)行時間;

到目前為止服務(wù)的訪問總數(shù);

到目前為止傳輸?shù)淖止?jié)總數(shù);

服務(wù)請求的子進(jìn)程數(shù);

空閑子進(jìn)程數(shù);

每個進(jìn)程狀態(tài)、子進(jìn)程服務(wù)的請求數(shù)以及該子進(jìn)程傳輸?shù)淖止?jié)總數(shù);

每秒平均請求數(shù)、每秒傳輸?shù)淖止?jié)數(shù)、每次請求平均傳輸字節(jié)數(shù);

目前每個子進(jìn)程CPU占用及Apache的總的CPU占用率;

當(dāng)前主機(jī)及處理的請求。

二、什么是日志文件

日志文件是Apache工作的記錄,Apache包括了mod_log_config模塊,它用來記錄日志。在缺省情況下,它用通用日志格式CLF規(guī)范來寫。CLF日志文件內(nèi)對每個請求均有一個單獨行,形如:host
ident anthuser date request status bytes

其含義如下:

host&#0;&#0;客戶端主機(jī)的全稱域名或IP地址;

ident&#0;&#0;存放客戶端報告的識別信息;

authuser&#0;&#0;如果是基于用戶名認(rèn)證的話,值為用戶名;

date&#0;&#0;請求的日期與時間;

request&#0;&#0;客戶端的請求行;

status&#0;&#0;返回到客戶端的三們數(shù)字的HTTP狀態(tài)碼;

bytes&#0;&#0;除去HTTP頭標(biāo)外,返回給客戶端的字節(jié)數(shù)。

三、分析日志文件

有了日志文件后,我們可以利用UNIX的一些工具和一此專門的日志分析工具對日志文件進(jìn)行分析。

實例一:列出訪問過本網(wǎng)站的主機(jī)名或IP:

對于這個需求,我們可以通過一個Unix的一個腳本語句來完成:

cat /var/log/httpd/access_log
| awk '{print $1}'

用上面的方法雖然可以得到訪問過本網(wǎng)站的主機(jī)名或IP,但是由于有些是多次訪問的,我們希望在上面得到的結(jié)果的基礎(chǔ)上做一些優(yōu)化,使得列出的表中,每個主機(jī)只出現(xiàn)一次。我們可以使用:

cat /var/log/httpd/access_log
| awk '{print $1}' | wc -l

當(dāng)然,我們可以根據(jù)需要選擇第三方提供日志分析工具甚至自己開發(fā)一些日志分析工具來滿足我們的需求。常見的第三方日志分析工具有:WebTrends、Wusage、wwwstat、http-analyze、pwebstats、WebStat
Explorer、AccessWatch。

四、一些提示

日志一方面是我們分析網(wǎng)站的第一手資料,一方面卻是吞噬大量磁盤空間的罪魁禍?zhǔn)住K詣e忘了定期轉(zhuǎn)儲或刪除一些老的日志文件。

Apache與代理服務(wù)器

代理服務(wù)器是位于客戶和客戶要訪問的服務(wù)器之間的系統(tǒng)。當(dāng)客戶機(jī)使用URL請求訪問遠(yuǎn)程資源時,代理服務(wù)器接受該請求并取得該資源以滿足客戶機(jī)的請求。在通常情況下,代理服務(wù)器是客戶機(jī)的服務(wù)器,同時也是遠(yuǎn)程服務(wù)器的客戶。

代理服務(wù)器可以在自己的緩沖區(qū)中存儲被請求的內(nèi)容,當(dāng)這些信息再次被請求的時候,代理服務(wù)器就無需再從遠(yuǎn)程服務(wù)器上取了,這樣代理服務(wù)器就減輕了網(wǎng)絡(luò)的瓶頸問題。

Apache可以配置成為代理服務(wù)器。

一、前向代理服務(wù)器和逆向代理服務(wù)器

1.前向代理服務(wù)器

前向代理服務(wù)器通常位于用戶主機(jī)和要訪問的遠(yuǎn)程網(wǎng)絡(luò)之間。它從遠(yuǎn)程服務(wù)器取得所要求的資源,然后返回給用戶,同時存在磁盤上,以供下次使用。在這種情況下,客戶端的主機(jī)知道它們正在使用代理服務(wù)器,因為每個主機(jī)都必須配置為使用代理服務(wù)器。例如,必須告訴WWW瀏覽器使用代理服務(wù)器,它才能使用代理服務(wù)器。所有的遠(yuǎn)程請求都通過代理服務(wù)器傳輸。這類代理服務(wù)器也稱為緩沖代理服務(wù)器。逆向服務(wù)器也可以緩沖數(shù)據(jù),但它的作用愉好與前向服務(wù)器相反。

2.逆向代理服務(wù)器

逆向代理服務(wù)器位于互聯(lián)網(wǎng)資源前面,逆向服務(wù)器從原始服務(wù)器找到被請求的資源,并反它返回給用戶主機(jī)。與前向代理服務(wù)器不同的是,逆向代理服務(wù)器的用戶并不知道它們連接的是代理服務(wù)器而不是資源服務(wù)器本身。

二、配置代理服務(wù)器

為了允許Apache作為代理服務(wù)器,需要將ProxyRequests設(shè)為On,然后根據(jù)你希望代理服務(wù)器做什么而增加什么附加配置。無論你希望做什么,你所選的代理配置都應(yīng)該放入一個特殊<Directory>容器中。

<Directory proxy:*>

...

</Directory>

實例一:將私有IP網(wǎng)連到互聯(lián)網(wǎng)

假設(shè)私有網(wǎng)上只有一臺計算機(jī)被分配了互聯(lián)網(wǎng)上合法的IP地址,這臺計算機(jī)運(yùn)行Apache代理服務(wù)器,ProxyRequest設(shè)置為On,并且不需要附加其他配置,所有請求均可由這臺代理服務(wù)器代理服務(wù)。

實例二:讓Apache允當(dāng)遠(yuǎn)程WWW站點的緩沖

第一步:將ProxyRequest設(shè)置為On

第二步:創(chuàng)建配置如下:

<Directory proxy:*>

CacheRoot /www/cache

CacheSize 1024

CacheMaxExpire 24

</Directory>

這里的意思是設(shè)置Cache目錄為/www/cache;大小為1024KB,即1MB;緩沖中的內(nèi)容在24小時后失效。

實例三:建立鏡像站點(其實這也就是所謂的逆向代理服務(wù)器)

第一步:將ProxyRequest設(shè)置為On

第二步:創(chuàng)建配置如下:

<Directory proxy:*>

ProxyPass / www.my.com /

CacheRoot /www/cache

CacheDefaultExpire 24

</Directory>

轉(zhuǎn)載于:https://www.cnblogs.com/F4ncy/archive/2005/01/07/87847.html

總結(jié)

以上是生活随笔為你收集整理的用Apache构建WEB服务器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。