


Linux 下WWW服務器的安裝和配置
前言:Linux作為一種Unix系統的變種,與Windows系統相比,具有安全、穩定、代碼開放等等優點。但是,不足之處是軟件的安裝與配置不如Windows下方便與直觀。相信喜好Internet的朋友都有在WindowsNT下安裝配置Internet服務器(如IIS4的WWW服務、FTP服務、SMTP服務和NNTP服務)的經驗。本文主要針對如何在Linux系統下建立萬維網(WWW)服務器進行幾方面的討論。 Linux下常見的免費萬維網服務器有CERN httpd、NCSA httpd和Apache。下面,以Apache HTTP服務器為例,介紹萬維網服務器的安裝和配置。
1.安裝 Apache的安裝有兩種方法。
一種是在安裝linux系統的時候(如 RedHat linux、Turbo linux、藍點linux、紅旗linux等),選擇安裝WWW Daemon,然后安裝程序就會自動的為你安裝好Apache服務器;另一種方法是在系統安裝完成之后,用Apache的源程序包,自己編譯并安裝Apache服務器。 筆者強烈推薦初學者使用前者,對于高級用戶或者Linux發燒友,可自己試著使用后者,但在這里就不詳細敘述了,有關資料可以在http://www.apache.org/上找到。在安裝完成之后,為了驗證一下到底自己的Apache服務器有沒有在工作,可以使用以下命令: [root@redhatlinux /]# httpd -v Server version: Apache/1.3.3 (Unix) (Red Hat/Linux) Server built: Oct 13 1998 03:06:39 這就說明了系統中正確地安裝了版本是1.3.3的Apache服務器。 關于httpd命令的詳細參數說明請使用“httpd --help”查看。
2.配置 Apache服務器的行為完全取決于httpd.conf、srm.conf、access.conf三個配置文件的設置,因此,我們所說的配置也完全是針對它們進行手工配置。在RedHat linux下,這三個文件存放在/etc/httpd/conf目錄下。如果你使用的是其他的linux系統,它們的存放目錄有可能不同,這時,你可以使用如下命令查找: [root@redhatlinux /]# find / -name httpd.conf /etc/httpd/conf/httpd.conf Apache的所有在線手冊存放在/home/httpd/html/manual目錄下,可以用類似http://localhost/manual/index.html的URL來查看。
2.1 httpd.conf 下面是一個典型的httpd.conf文件的內容,在#后面給出了語法說明和簡要的解釋。 LoadModule env_module modules/mod_env.so LoadModule config_log_module modules/mod_log_config.so ... ... ClearModuleList AddModule mod_env.c AddModule mod_log_config.c ... ... # 載入服務器所必須的模塊文件。這里為節省空間,用省略號代替了許多列出的模塊文件。 ServerType standalone # 語法:ServerType type 設置系統將以什么方式運行httpd。type可以為: inetd:從系統進程inetd運行httpd,啟動httpd的命令加入/etc/inetd.conf standalone:httpd以獨立的守護進程遠行,啟動httpd的命令加入系統啟動腳本文件(/etc/rc.d/rc.local)。 區別:inetd方法對每個http連接,inetd將啟動一個新的httpd,連接完成之后,httpd進程退出。用這種方法啟動httpd比較慢,但交安全,且占系統資源較少。standalone方法相#對較快,對于一個繁忙的站點,應使用這種方法。 Port 80 # 語法:Port number httpd占用的端口號。number可以從0到65535,缺省使用80號端口。 HostnameLookups off # 語法:HostnameLookups off/on 設置系統記錄客戶端名稱或他們的IP。 User nobody Group nobody # 語法:User linux-userid;Group linux-group User指令后的用戶名(或UID)和Group指令后的組(或GID)定義httpd作為什么用戶和什么組運行。為使用這條指令,standalone服務器必須最初以root啟動。為了安全的目的,應該以nobody和nogroup來運行httpd。 ServerAdmin root@localhost # 語法:ServerAdmin email-address 當服務器出現問題時系統將通知的用戶的email地址。 ServerRoot /etc/httpd # 語法:ServerRoot path 設置服務器存放的目錄,其他配置文件的相對目錄就是相對于此目錄的。 ErrorLog logs/error_log # 語法:Errorlog filename 設置錯誤信息輸出文件,如果filename不是以“/”開頭,則是相對于ServerRoot。 LogLevel warn # 語法: LogLevel level 控制被記錄入error_log文件的信息數量。 level有如下幾種選擇:debug、info、notice、warn、error、crit、alert、emerg。 LogFormat "%h %l %u %t \"%r\" %>s %b \"%Refereri\" \"%User-Agenti\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%Refereri -> %U" referer LogFormat "%User-agenti" agent # 語法:LogFormat format 以上幾行是定義記錄文件的記錄格式的。 CustomLog logs/access_log common # 語法:Customlog filename 設置訪問記錄的文件(使用Common Logfile Format)。同樣,如果filename不是以“/”開頭,則是相對于ServerRoot。 ScoreBoardFile /var/run/httpd.scoreboard # 語法:ScoreBoardFile: filename 設置被用來存放服務器內部過程信息的文件,這并不是所有的系統都需要的。 ServerName www.mysite.mycom # 語法:ServerName fully-qualified domain name 定義服務器的節點名,必須為服務器的合法DNS名字。 UseCanonicalName on # 語法:UseCanonicalName on/off 這是1.3里新加入的指令。當設置為on時,當Apache服務器響應其它的請求并返回自己的URL時,使用ServerName和Port構建這個URL。當設置為off時,Apache服務器會使用hostname:port作為返回值。
Timeout 300 # 語法:Timeout number(秒) 設置一個連接的超時時間。 KeepAlive On # 語法:KeepAlive on/off 設置服務器是否允許“持久的連接”(每個連接有多于一個的請求)。 MaxKeepAliveRequests 100 # 語法:MaxKeepAliveRequests number 每一個“持久的連接”中允許的最大請求數。當這個值設為0時將不限制請求數目。 KeepAliveTimeout 15 # 語法:KeepAliveTimeout number 設置“持久的連接”中兩個請求之間的超時時間。 MinSpareServers 8 MaxSpareServers 20 # 語法:MinSpareServers number;MaxSpareServers number 設置最少和最多的空閑子服務進程數。如果當前空閑子服務進程數大于MaxSpareServers時,父進程會殺死一些子服務進程;如果當前空閑子服務進程數小于MinSpareServers時,父進程會產生一些子服務進程。
StartServers 10 # 語法:StartServers number 設置httpd啟動時的子服務進程數。 MaxClients 150 # 語法:MaxClients number 設置服務器的最大同時連接數。 MaxRequestsPerChild 100 # MaxRequestsPerChild number # 設置每個子服務進程在它被殺死之前被允許處理的最大請求數。這是為了防止由于子服務進程工作時間太長而有可能帶來的服務器漏洞。在大多數的系統中,這個指令是不需要的,但在少數系統(如Solaris)中,確實有值得注意的漏洞。 Listen 3000 # 語法:Listen port / address:port 設置服務器除了缺省外,在多個IP地址或端口處等候請求。 ServerAdmin webmaster@host.some_domain.com DocumentRoot /www/docs/host.some_domain.com ServerName host.some_domain.com ErrorLog logs/host.some_domain.com-error_log TransferLog logs/host.some_domain.com-access_log # 語法: ... 和用于包含一系列只適用于某個特定的虛擬節點的指令。當服務器接收到對某個虛擬節點的請求時,它使用和之間的配置指令。addr可以是虛擬節點的IP地址或對應其IP地址的完整節點名。每個必須對應服務器的一個不同的IP地址或不同的節點名。可以使用“ifconfig alias”命令將機器配置成多個IP地址以接受請求。
2.2解讀srm.conf 下面是一個典型的srm.conf文件的內容,在#后面,給出了語法說明和簡要的解釋。 DocumentRoot /home/httpd/html # 語法:DocumentRoot path 設置httpd發布文件的缺省根目錄。除了符合別名的以外,服務器把從URL中取出的所有路徑前加上DocumentRoot以得到真實本地路徑。例如訪問http://localhost/index.html,將對應本地文件 /home/httpd/html/index.html。 UserDir public_html # 語法:UserDir path/filename 設置用戶主目錄下的一個目錄,對某個用戶的文件的請求都相對于這個目錄。例如:訪問 http://localhost/~mike/joy/index.html 將被服務器翻譯為: UserDir public_html -> ~mike/public_html/joy/index.html UserDir /usr/web -> /usr/web/mike/joy/index.html UserDir /home/*/www -> /home/mike/www/joy/index.html DirectoryIndex index.html index.shtml index.cgi # 語法:DirectoryIndex filename1 filename2 ... 當用戶請求是一個目錄時,服務器將返回此目錄下的這個文件。如果有多個,將返回排在較前的一個。但如果服務器一個也沒有找到,則給出此目錄的文件列表。例如:請求 http://localhost/manual/將被服務器翻譯成http://localhost/manual/index.html AddIcon /icons/binary.gif .bin .exe ... ... DefaultIcon /icons/unknown.gif # 語法:AddIcon filename filetype1 filetype2 ... 將文件類型和與其對應的圖表文件相關聯。其它所有未關聯的文件將顯示DefaultIcon。 IndexIgnore .??* *~ *# HEADER* README* RCS # 語法:IndexIgnore filename1 filename2 ... 設置一些目錄索引應該忽略的文件名。 AccessFileName .htaccess # 語法:AccessFileName filetpye 為每個目錄設置一個用于存放訪問控制信息的文件。
TypesConfig /etc/mime.types # 語法:TypesConfig filename 設置MIME(Multipurpose Internet Mail Extension protocol)類型定義文件。 DefaultType text/plain # 語法:DefaultType mimetype 為服務器不能通過后綴確定類型的文檔設置缺省的MIME類型 Alias /icons/ /home/httpd/icons/ # 語法:Alias fakepath realpath 為你的服務器添加別名路徑。請求的路徑部分如果以fakepath開頭,服務器將把它映射到以realpath開頭的本地文件。請注意,如果別名的結尾有/號,如上面的例子,服務器將只對 /icons/ 使用別名,而不對 /icons 使用。 Alias /cgi-bin/ /home/httpd/cgi-bin/ # 語法:
AddType text/html .shtml # 語法:AddType type/subtype ext AddType指令可以使你在不改動mime.types文件的前提下添加MIME類型。例如,PHP3模塊(并不是Apache的一部分)將用到: AddType application/x-httpd-php3 .php3 AddType application/x-httpd-php3-source .phps AddHandler cgi-
3.配置aCCESS.CONF 顧名思義,aCCESS.CONF是用于設置aPaCHE服務器的目錄訪問屬性的,下面是一個典型的aCCESS.CONF文件的內容: <DIRECTORY /> OPTIONS NONE aLLOWOVERRIDE NONE </DIRECTORY> <DIRECTORY /HOME/HTTPD/HTML> OPTIONS INDEXES INCLUDES FOLLOWSYMLINKS aLLOWOVERRIDE NONE ORDER aLLOWDENY aLLOW FROM aLL </DIRECTORY> <DIRECTORY /HOME/HTTPD/CGI-bIN> aLLOWOVERRIDE NONE OPTIONS EXECCGI </DIRECTORY> 大家可以看出,aCCESS.CONF是由<DIRECTORY></DIRECTORY>命令對和其中的指令語句組成的。它們的含義如下:
3.1 <DIRECTORY>...</DIRECTORY> 語法:<DIRECTORY PaTH>...</DIRECTORY> <DIRECTORY>和</DIRECTORY>包含一組只對指定目錄及其子目錄有效的指令。PaTH可以是某個目錄的全名,也可以是包含通配符的路徑。
3.2 OPTIONS 語法:OPTIONS OPTION1 OPTION2 ... 設置對此目錄哪些服務器特性有效。OPTION可以為: NONE:不允許任何特性。 aLL:允許一切特性。 INDEXES:如果此目錄中沒有DIRECTORYINDEX定義的文件,允許返回文件列表。 EXECCGI:允許執行CGI文件。 FOLLOWSYMLINKS:服務器將遵循此目錄中的符號連接。
3.3 aLLOWOVERRIDE 語法:aLLOWOVERRIDE OPTION1 OPTION2 ... 當服務器發現.HTaCCESS文件,它必須知道文件中的哪些指令可以覆蓋以前的限制信息。 OPTION可以為: NONE:服務器將不讀.HTaCCESS文件。 aLL:允許所有指令。 aUTHCONFIG:允許使用注冊指令。 FILEINFO:允許使用文件類型控制指令。 INDEXES:允許使用目錄索引指令。 LIMIT:允許使用節點限制指令。 OPTIONS:允許使用指定目錄特性指令。 詳細的說明請查看aPaCHE的在線手冊。
3.4 aLLOW 語法:aLLOW FROM HOST HOST ... 設置哪些節點可以訪問此目錄。HOST可以為: aLL:允許所有節點訪問。 (部分)域名:允許以此字符串結尾的節點訪問。 完整的IP地址:允許此IP地址訪問。 部分的IP地址:允許以此IP開頭的子網節點訪問。
3.5 DENY 語法:DENY FROM HOST HOST ... 設置哪些節點不可以訪問此目錄。用法同aLLOW。
3.6 ORDER 語法:ORDER DENYaLLOW / aLLOWDENY / MUTUaL-FaILURE 設置DENY和aLLOW被鑒定的順序。 DENYaLLOW:DENY指令在先。(初始狀態為aLLOW aLL) aLLOWDENY:aLLOW指令在先。(初始狀態為DENY aLL) MUTUaL-FaILURE:只有在aLLOW中被允許而沒有被DENY的節點可以訪問。 例如: ORDER DENYaLLOW DENY FROM aLL aLLOW FROM .CPCW.COM 允許CPCW.COM域的節點訪問,禁止其它一切節點訪問。
上面從解讀三個文件出發,分析了配置aPaCHE服務器的方法。這只是玩轉LINUX下WWW服務器的第一步,更多的工作是需要大家在實踐中去慢慢摸索,細細體會。只要有興趣和耐心,相信大家一定能夠成為LINUX高手的。
關鍵字:WWW、服務器、子網
新文章:
- 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規則詳解