Apache web服務器架設實戰
不知你是否感興趣把你的計算機設置為當今互聯網中的一部分,是否愿意加入到不斷發展壯大的Web中來?如果是,你也許對架設自己的web服務器感興趣。在本文中,我將介紹如何建立和配置這樣的服務器,同時,將檢查一下有關需求,并精確決定究竟要何處配置,以便完成相應的功能。
本文定位為手冊性的指南介紹。如果你對web服務器的性能特別關注,請留意不久后即將發表的另一篇文章,在那篇文章中,將介紹了不同的平臺和多種服務器。
因為免費的Apache web服務器約占了所有的web服務器軟件中的半壁江山,同時Sun公司的硬件也占了所有服務器硬件的大多數比例。我將介紹一下這樣的配置。事實上,為了方便起見,我所詳細介紹的就是一個現實的網站目前所用的服務器。
該機器的型號為SPARCstation 20,其配置:256 MB內存, 單個SM71 處理器模塊。操作系統為Solaris 7, 服務器軟件為Apache 1.3。 無論硬件是否不同,以及運行哪一種UNIX平臺, Apache的配置方法不變。
硬件配置
如前所述,該機器型號為SPARCstation 20。為何要采用Sun公司的機器,而不在Intel架構下運行Linux或者Windows NT?基本上,原因分為下面四點,我將用一個例子分別加以闡述:
兼容性
可擴性
維護和管理
開銷
兼容性
如果你已經有了一個網站,為了保持兼容性,將盡可能維持類似的配置,這一點也許是重要的。這也許意味著如果你運行的是Windows NT server,就會堅持采用兼容Windows NT的硬件,或者如果現在運行的是Linux平臺,也會保持現狀不變。
前面介紹的服務器是運行Solaris操作系統的Sun機器。盡管是個小容量的小型機器,自從配置安裝好之后,作為我們的web服務器,已經成功運行約6個月,自那時起,我們的網站服務器就一直保持為Solaris/Apache平臺。
此時,我們尤為關注停機維護時間和保護最初的投資。通過保持不變的硬件和軟件平臺,就可以保證代碼級的兼容性,和最小的停機維護時間。
可擴性
你的新服務器是否提供了可擴空間?過了6個月之后,是否需要升級?顯然,如果你打算完全替換硬件,需要的服務器數量將同你的網站內容數量一起水漲船高。根據你的網站需求,你也許需要更高的CPU處理能力,或者更高的磁盤傳輸率。如果你的機器在哪方面有不足,就需要對那一方面的不足進行改進。有時,這就可能意味著需要采用能夠安裝兩個或者四個處理器的主板,或者意味著需要采用更強大的RAID控制器。
前面所述的服務器已經充分擴充,沒有進一步升級的余地了,我們覺得選擇服務器時不僅要看它是否可擴空間,也要看它是否能夠在群集環境中工作良好,這一點是重要的。
我們現在使用的SPARCstation 20最多可擴到四個處理器,帶有8條SIMM,四個擴展槽,以及四個磁盤驅動器接口,另外,該機器主板上還具有SCSI和以太網接口。另外一個重要的方面是整個機器只有3英寸高, 16英寸寬,深度16英寸。這就非常適宜安裝到機架上。
維護和管理
該部分主要涉及到軟件,當服務器發生故障時,沒人愿意每次重新安裝服務器軟件。基本的管理功能應該總是能夠通過遠程進行,而且要能夠進行重啟動等。能夠遠程控制也是一個優點。
Solaris同大多數UNIX系統一樣,提供了不少工具,來幫助用戶進行遠程管理。對于我們的機器,從添加新用戶和改變web服務器參數,到重啟動和配置新的硬件,都可以遠程進行。
成本
你可以保護多少初始投資?要求既能滿足你的當時需求,也能用滿足將來的升級需要,哪一種服務器最經濟?
成本也是重要的因素。盡管我們可以購買得起比現在這臺機器更貴的Sun 系統。但是,由于該Sun機器已經內置SCSI和ethernet,就無需購買這兩種適配器,軟驅和CDROM驅動器也不需要,因為可以通過網絡進行軟件的安裝。視頻卡也不需要,因為該機器完全可以通過telnet或者遠程X會議系統進行訪問。
你可以看到,在這種場合下,Sun機器遠比相應的PC廉價,因為我們僅需要基本的單元(主板和機箱),CPU和內存。而對于一臺PC服務器,不僅需要購買一個基本單元,也需要購買視頻卡, SCSI卡,網卡,軟驅,CDROM驅動器,另外也需要借一臺顯示器,用于軟件安裝。
你將需要多少硬件?
這完全取決于你要發布的內容,以及要服務的人數。實際上,如果僅用于發布靜態的HTML網頁,采用90 MHz的Pentium, 適當容量的RAM, 能夠適用于1.5Mbps T1連接速度的磁盤,就足夠了。基于服務器的動態HTML, ASP, PHP以及其他更復雜的文檔類型,在用戶發出請求時,將消耗更多的CPU時間。通常,用ASP或者PHP來查詢數據庫,得到信息后,再傳輸到web文檔中去。在這些場合,在同樣的網絡連接速度下,你需要有比發布靜態網頁的機器更強有力的web服務器。
通常,一次硬件升級可以提升兩倍的性能,如果再加上更高級的軟件,性能可以最大提升到100倍以上。一個小小的例子可以說明這一點,在我們的網站上,原來采用PERL腳本把數據寫入到文件中,在升級到采用數據庫實現之后,在我們留言簿上生成索引的時間減少到為原來的50分之一。查詢數據庫并生成客戶端可以看到的HTML文檔的實際代碼僅為600行,而采用CGI/PERL實現時,則產生超過3000行代碼,且功能較少,而且啟動的靈活性較低。
編譯和安裝Apache
雖然我不打算介紹配置操作系統方面的事宜,你還是需要根據所運行的操作系統,正確配置網絡連接。在不同的操作系統中安裝Apache時有一些注意點。
我們服務器上使用的Apache版本為1.3.9,所以我將詳細介紹該版本下的安裝過程。是否選擇自己編譯源代碼的版本,還是下載一個預編譯好的版本,其安裝過程略有差異。在此,我將詳細介紹編譯源代碼的步驟,但如果你不打算采用該版本,可以跳過這段。
做任何其他事情之前,確保你的操作系統系統支持Apache(檢查這個網站,而且你的編譯器應為最新版)。由于GCC的一些版本的編譯器在某些方面仍然處于測試開發階段,這些版本在某些平臺上構建的代碼未經優化。如果你正在使用GCC,你需要查看一下,預編譯過的版本是否提供了更好的性能。
從這里下載Apache源代碼包。
解壓縮該包文件。
運行 ./configure
基于你的需要,可以忽略特定的配置參數。在最低限度下,你需要指定安裝路徑,使用如下參數標志: --prefix=APACHE_INSTALLATION_PATH 。更為復雜的配置參數如下:
./configure --prefix=/usr/local/apache --activate-module=src/modules/php/libphp.a
運行 make
運行 make install
運行 APACHE_INSTALLATION_PATH/bin/apachectl start
配置Apache
當然,編譯Apache僅僅是實際安裝和配置web服務器過程中的一小部分工作。根據需求,設置Apache,這仍是必需的。在Apache安裝后的目錄中,你會找到conf/ 目錄。該目錄包含了有關Apache啟動和運行的所有的配置文件。這些配置文件包括下列一些:
httpd.conf, 初始服務器配置文件
access.conf, 配置web服務器訪問設置,以及所服務的目錄。
srm.conf, 服務器名稱空間和請求處理的配置
我將在下面詳細介紹Apache啟動和運行時的配置。本文雖不是技術大全,但足夠讓你入門。如果你正在從現有的服務器或者新安裝的服務器中,尋求更好的性能配置,我也將盡可能介紹一下有關性能問題。
httpd.conf
該文件保存了Apache自身的一些最重要的配置信息。也是在調整性能時的首要去處。我將介紹一下主要的配置選項,
Servertype
本選項決定Apache的執行方式。Apache既可以作為獨立應用程序運行,也可以在透過適當的端口(通常為80端口)的HTTP請求到來時,被inetd調用。其中當inetd 運行時,將消耗少得多的資源,因為對于每一次請求都需要啟動Apache,這將降低web服務器的總體性能。獨立工作模式的設置更好些。
Port
該參數僅用于在獨立模式下工作的服務器。通常為port 80。
HostnameLookups
該設置決定web服務器是否為每一個訪問的IP地址,解析主機名。如果設置為on,訪問日記中將存儲主機名,而非IP地址。缺點是影響速度。因為打開該功能,將對每次請求都進行名稱查詢。如果服務的請求數量多,會嚴重降低服務器的性能。Apache在缺省情況下,把該參數設置為off,并提供了一個工具(logresolve),以便過后解析主機名。
User
服務器進程用戶,通常設為“nobody”。
Group
運行服務器的組名,通常設為“nobody”。
ServerAdmin
服務器管理員的email地址。這會出現在出錯頁面上。
ServerRoot
指定配置文件和服務器日記文件的存儲位置。除非你有特別原因,需要改變設置,一般與Apache所在目錄相同。
ErrorLog
該參數告訴Apache出錯日記文件的存儲位置。可以設置記錄內容, 一般將記錄如下重要信息:啟動時間,停止時間,用戶遇到的任何錯誤 (例如404錯誤等等)。
LogLevel
決定讓你的日記文件填滿的時間。選項“Warn”在大多數場合足夠了,除非你打算仔細診斷遇到的問題。
LogFormat
該功能指定服務器上日記文件的格式。你可以創建包含額外信息(如referrers)的特定格式。下面為一個常見組合格式的日記格式例子。
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
CustomLog
該命令同LogFormat alias 同時使用。
Timeout
建立連接所允許的時間,以秒記。
KeepAlive
打開該選項,可以進行持久連接。這表示單個的連接可以用于不止一個請求。這當然是好事,因為減少了建立連接所需的總體時間,尤其在一個單個的web文檔可能需要5或者6個請求(如圖像)。
MaxKeepAliveRequests
每個持久連接的最大請求數量。該數字應該設置高些(至少100)。
KeepAliveTimeout
該選項用來告訴服務器在下次請求到來時的等待時間。 缺省為15秒,可以根據同客戶的連接情況,加長或者縮短該等待時間。同客戶連接較慢時,需要更多的等待時間。記住,該數值設置太高,可能會導致服務器進程空等永不會到來的連接。
MinSpareServers
等待隨時出現的請求的服務器進程數的最小值。改變該參數將可能在加載進程時,提高服務器的性能。缺省值為5。
MaxSpareServers
這個數值告訴Apache,多余的進程數達到多少時為過多。通過確保不會產生過多進程,這將幫助保護系統資源。
StartServers
初始啟動時服務器的進程數。通常與MinSpareServers 的設置值相同。
MaxClients
隨時可以連接的最大客戶數。因為Apache服務器的客戶同進程數相關,在極端情況下,可能會出現占用資源非常集中的現象,此時該設置值將保護你的服務器不發生崩潰。但也別把該值設置過低,因為一旦這樣做,用戶在高峰期可能會連不上去。
MaxRequestsPerChild
任何單個進程所能處理的最大請求數。為避免內存溢出,而強迫終止超出該設定值的請求。缺省值為30。
Listen
把Apache同指定的的端口或者地址綁定。可指定多個監聽選項值,此時單個的服務器可以用作幾個不同的網站。
and
該選項允許Apache為多個地址服務,例如多個域名。該項同Listen一起使用。同時,任何httpd.conf 選項也可以放到一個VirtualHost命令中。這意味著你可以為每個虛擬服務器指定不同的ServerAdmins, logfiles等等。下面為一個例子:
ServerAdmin brian@mysite.com
DocumentRoot /usr/docs/mysite
ServerName www-mysite-com
ErrorLog /var/log/web/mysite.log
TransferLog /var/log/webmysite-access.log
access.conf
access.conf包含了Apache中了大部分同安全和用戶訪問相關的設置。在該文件中,目錄索引, SSI include命令等等,可以按照目錄逐一配置。下面為重要的配置選項:
and (Also and )
這是access.conf文件中主要的選項。當構建access.conf文件時,在啟動時,參數應該先設置為限制范圍最嚴格的值,然后對服務器上不同的文檔逐漸放寬限制。
Options
使用該項參數,可對每個目錄控制打開或者關閉某項功能。通常不設定為All,你可以隨意指定選項的多少,因為Includes 和 ExecCGI 有時可能帶有安全隱患。除了不允許包含執行CGI程序的#include exec 語句之外, IncludesNOEXEC 同Includes 的作用一樣(在文檔中允許使用<--#include --> 語句)。
AllowOverride
該選項定義了使用.htaccess文件可以得到的控制水平。這些文件可以放到內容目錄中,以便替換指定目錄中的缺省設置(在access.conf文件中)。在一些場合中,這非常方便,因為在重新配置指定目錄時,無需訪問根目錄,但使用這樣的文件時,會輕微影響性能,因為web服務器在訪問決定該目錄功能的選項時,必須讀入該文件。access.conf在這些文件中可以控制使用哪一個參數,除此之外,.htaccess 文件同初始的ccess.conf 文件一樣用。
Order
同Allow From 和Deny From (在下面介紹)一起使用。指定訪問驗證的次序。例如它可在deny 之前指定allow ,然后除在應被禁止的場合值之外,允許進行訪問。如果先指定deny ,缺省情況下,訪問該目錄將被拒絕。
Allow From and Deny From
決定誰應該訪問該命令所指定的該目錄。None 和 All 的用途相當直截了當,也可以基于用戶域名允許或者拒絕訪問(簡單地指定域名作為參數即可)。
為了更好闡述這些選項,以及它們是如何在access.conf文件中配合使用的,下面為一個簡單的例子:
Options FollowSymLinks
AllowOverride None
Options IncludesNOEXEC FollowSymlinks
AllowOverride None
Order allow,deny
Allow From All
AllowOverride None
deny from all
srm.conf
srm.conf 文件決定服務器如何處理諸如索引格式,內容類型定義等等更多方面的請求。
DocumentRoot ""
存放所有在線內容的根目錄。
UserDir
用戶存放其HTML文檔的home目錄。如果帶有 ~username 參數,服務器將尋找在該用戶的home目錄中查找該目錄。
DirectoryIndex
當在URL中沒有指定文件時,所請求的特定目錄中的缺省文件名。通常為index.html。
FancyIndexing
決定目錄索引的顯示風格 (當DirectoryIndex 不存在)。如果你已經關閉索引,該參數就不起作用。
HeaderName
指定目錄中包含在index頂部的頭文件名稱,如果找到的話。
ReadmeName
readme文件的名稱,如果找到的話,將標記為一個索引。
AccessFileName
每個目錄中要被查找的訪問控制文件名稱,缺省名為.htaccess
Alias ""
在腳本的URL中使用的特定目錄的別名。
AddType
該參數允許你配置web服務器能夠識別的某種類型的文件,并帶有文件擴展名,例如:
AddType application/x-httpd-php .php
AddHandler
通過文件擴展名,允許把文件同特定的“handlers“,或者server-side 幫助應用程序聯系起來。例如,通過使用AddHandler ,可以允許使用CGI腳本和服務器端動態生成的HTML。請看下例:
AddHandler cgi-
AddHandler server-parsed .shtml
一切完畢
此時,你應該擁有一個配置適當,運行正常的Apache web服務器了。
關鍵字:服務器、Web
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解