1. 關于WWW和URL;
2. www主機系統的類型;
3. Apache 2 的配置;
3.1 apache2.conf;
3.2 conf.d ;
3.3 httpd.conf ;
3.4 magic ;
3.5 ports.conf ;
3.6 mods-available ;
3.7 sites-available ;
3.8 /var/www ;
4. Apache的管理;
5. 配置虛擬主機;
6. 配置Apache代理;
7. 關于本文;
8. 更新日志;
9. 參考文檔;
10. 相關文檔;
+++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++
如果您是一位Linux愛好者,您可能已經掌握了基本的Linux的知識與操作,毫無疑問,您并不會去滿足這樣小小的成就;Linux為何如此的流行?其最大的特點莫過于功能強大,性能穩定的服務器應用了。像WWW,MAIL,FTP, DNS和SMB等;在本文中,我們從Web服務器的一些最基本的操作入手,從初學者使用的態度,讓大家正確充分的認識Apache等服務器;
1. 關于WWW和URL;
WWW是World Wide Web的縮寫,翻譯過來就是全球廣域網,它可以接合文字、圖形、影像及聲音等多媒體,并通過超文本(HyperText)的方式,將信息通過Internet傳遞到世界各處;
例如:在瀏覽器的地址欄上輸入“http://www.linuxsir.org”,就可以登錄的linuxsir的網站上瀏覽信息,其中“http://www.linuxsir.org”是URL(Uniform Resource Locator ,同一資源定位器),“www.linuxsir.org”是主機名稱,也就是DNS中的FQDN(Fully Qualified Domain Name,完全符合標準的域名),即主機名稱加上域名所得的一個獨一無二的Internet上面的名字。由于計算機僅識別網絡中的IP,所以,linuxsir站的真實IP就是通過DNS解析www.linuxsir.org而找到的,然后經過www的協議將數據傳到你的眼前;
1.1 URL的格式;
<協議>://<主機地址>[:端口]/<目錄>
1.1.1 協議;
包括http,ftp,news,gopher和telnet幾種常見的協議。其中,http是利用“主機的http端口,通常為80端口”,ftp是利用“主機的ftp端口,通常為21端口”。注意:80和21都是主機所提供的服務,而不是客戶端的端口。
1.1.2 主機地址;
當輸入主機名(域名)時,必須要讓該主機名稱可以經由翻譯器得到對應的IP。翻譯器是/etc/hosts或者是/etc/resolv.conf里面的設置對外提供正常的www服務器時,主機名稱就必須要讓大家可以翻譯到IP,這就需要去申請一個合法的域名;
1.1.3 目錄;
也就是URI(Uniform Resource Indicator ,統一資源定位符),如果你要去的網站網頁在主頁所在目錄的下面,那么你直接輸入目錄與網頁的名稱,就可以直接取得那個網頁的數據。若只輸入目錄與網頁的名稱,并沒有輸入網頁名稱,則服務器端會自動地判斷(跟服務器自己的設置有關),該目錄下是否有設置為默認的網頁名稱;
1.1.4 端口;
當連接某個網站時,輸入 “http://that.host.name”就會主動地利用端口80來嘗試連接對方的主機,但如果不想使用該端口呢。舉個例子來說,例如您的網站使用的是8080端口來進行www的服務,那么除非您使用了防火墻進行端口對應,否則直接在地址欄輸入“http://your.host.name”結果將無法連接到你的www服務器,因為它會主動連接到端口80,所以這里就要告訴瀏覽器,向服務器請求服務的是哪個端口。即寫成“http://your.host.name:8080”才可以連接到對方的端口8080;
2. www主機系統的類型;
大致上可以分兩種:
一種是Windows系統的IIS+MS的SQL+ASP WWW服務器,這種www主機假設上比較容易,不過由于windows的某些特性,所以很容易被黑客所破壞;
另外一種則是Linux系統上的Apache+MySQL(PostgreSQL)+PHP的www服務器(簡稱LAMP),這種服務器架設上有一定程度的困難,尤其是在升級與維護方面,但是架設妥當的話,它的硬件要求、性能、安全性等方面,則相對較佳,下面我們就來主要介紹一下Apache的架設;
2.1 Apache的歷史與前景;
1995年,美國國家計算機安全協會(NCSA)的開發者創建了NCSZ全球網絡服務軟件,其最大的特點是HTTP精靈程序,它比當時的CERN服務器更容易由源碼來配置和創建,又由于當時其他服務器軟件的缺乏,他很快流行起來。但是后來,該服務器的核心開發人員幾乎都離開了NCSA,一些使用者們自己成立了一個組織來管理他們編寫的補丁,于是Apache Group應運而生。他們把該服務器軟件稱為Apache。Apache源于A patchy server的讀音,意思是充滿補丁的服務器。如今Apache慢慢地已經成為Internet上最流行的Web服務器軟件了。在所有的Web服務器軟件中,Apache占據絕對優勢,遠遠領先排名第二的Microsoft IIS。如果你對它感興趣,你可以訪問Apache的官方網站:http://www.apache.org。Apache作為自由軟件之一,像其他自由軟件一樣,他們都是由許許多多的自由開發人員投入了大量的時間和精力來實現并逐步完善的,所以我們有理由相信Apache的發展前景會更好。
2.2 Apache 2的安裝;
軟件的安裝并不困難,您可以在www.apache.org上下載源碼包進行安裝,也可以使用各操作系統自帶的軟件包管理軟件進行安裝,比如我的系統是Ubuntu,那么就可以在終端中輸入:
xiaop@xiaop-laptop:~$ sudo apt-get install apache2
不同的系統有自己的軟件包管理方式,其實都大同小異;
2.2.1 使用源代碼安裝;
(1) 獲得源代碼
xiaop@xiaop-laptop:~# lynx http://www.apache.org/dist/httpd/httpd-2_0_NN.tar.gz
NN表示當前所用的版本號
(2) 解壓縮
xiaop@xiaop-laptop:~# gzip -d httpd-2_0_NN.tar.gz
或者
xiaop@xiaop-laptop:~# tar xvf httpd-2_0_NN.tar
(3) 配置.
xiaop@xiaop-laptop:~httpd-2_0_NN# ./configure --prefix= /usr/local/apache
表示Apache將安裝在/usr/local/apache目錄下
(4) 編譯與安裝
xiaop@xiaop-laptop:~httpd-2_0_NN# make
xiaop@xiaop-laptop:~httpd-2_0_NN# make install
(5) 測試
xiaop@xiaop-laptop:~httpd-2_0_NN# /usr/local/apache/bin/apachectl start
3. Apache 2 的配置;
安裝完apache2后,可以在/etc/apache2/目錄下查看文件:
xiaop@xiaop-laptop:/etc/apache2$ ls -lh
總用量 35K
-rw-r--r-- 1 root root 24K 2007-01-16 02:10 apache2.conf
drwxr-xr-x 2 root root 104 2007-06-12 21:07 conf.d
-rw-r--r-- 1 root root 895 2007-01-16 02:11 envvars
-rw-r--r-- 1 root root 0 2007-05-17 17:34 httpd.conf
drwxr-xr-x 2 root root 2.5K 2007-07-18 08:43 mods-available
drwxr-xr-x 2 root root 608 2007-05-17 17:36 mods-enabled
-rw-r--r-- 1 root root 10 2007-05-17 17:34 ports.conf
drwxr-xr-x 2 root root 72 2007-05-19 16:47 sites-available
drwxr-xr-x 2 root root 80 2007-05-17 17:34 sites-enabled
3.1 apache2.conf;
Apache 2.0的主配置文件為apache2.conf; 我的配置文件保存在/etc/apache2/apache2.conf;
查看此文件會在第184行附近發現下面的內容:
# Include module configuration:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
# Include all the user configurations:
Include /etc/apache2/httpd.conf
# Include ports listing
Include /etc/apache2/ports.conf
# Include generic snippets of statements
Include /etc/apache2/conf.d/
可以看出apache2 根據配置功能的不同, 對配置文件進行了分割, 這樣更利于管理;
3.2 conf.d ;
下為配置文件的附加片斷,默認情況下, 僅提供了 charset 片斷,
xiaop@xiaop-laptop:/etc/apache2/conf.d$ cat charset
AddDefaultCharset UTF-8
如有需要我們可以將默認編碼修改為 GB2312, 即文件的內容為: AddDefaultCharset GB2312
3.3 httpd.conf ;
通常是一個空文件,以后設置時可以加入以下指令;
下面我們來看一下httpd.conf中的幾條指令,“#”后加入了注釋說明;
Port 80 #定義了web服務器的偵聽端口,默認值為80,它是TCP網絡端口之一。若寫入多個端口,以最后一個為準。
User apache #一般情況下,以nobody用戶和nobody組來運行web服務器,因為web
Group apache # 服務器發出的所有的進程都是以root用戶身份運行的,存在安全風險。
ServerAdmin root@localhost #指定服務器管理員的E-mail地址。服務器自動將錯誤報告到該地址。
ServerRoot /etc/httpd #服務器的根目錄,一般情況下,所有的配置文件在該目錄下
ServerName new.host.name:80 #web客戶搜索的主機名稱
KeepAliveTimeout 15 #規定了連續請求之間等待15秒,若超過,則重新建立一條新的TCP連接
MaxKeepAliveRequests 100 #永久連接的HTTP請求數
MaxClients 150 #同一時間連接到服務器上的客戶機總數
ErrorLog logs/error_log #用來指定錯誤日志文件的名稱和路徑
PidFile run/httpd.pid #用來存放httpd進程號,以方便停止服務器。
Timeout 300 #設置請求超時時間,若網速較慢則應把值設大。
DocumentRoot /var/www/html # 用來存放網頁文件
3.4 magic ;
文件中包含的是有關mod_mime_magic模塊的數據, 一般不需要修改它;
3.5 ports.conf ;
則為服務器監聽IP和端口設置的配置文件,
xiaop@xiaop-laptop:/etc/apache2$ cat ports.conf
Listen 80
3.6 mods-available ;
目錄下是一些.conf和.load 文件, 為系統中可以使用的加載各種模塊的配置文件, 而mods-enabled目錄下則是指向這些配置文件的符號連接, 從配置文件apache2.conf 中可以看出, 系統通過mods-enabled目錄來加載模塊, 也就是說, 系統僅通過在此目錄下創建了符號連接的mods-available 目錄下的配置文件來加載模塊。同時系統還提供了兩個命令 a2enmod 和 a2dismod用于維護這些符號連接。這兩個命令由 apache2-common 包提供。命令各式也非常簡單: a2enmod [module] 或 a2dismod [module]
3.7 sites-available ;
目錄下為配置好的站點的配置文件, sites-enabled 目錄下則是指向這些配置文件的符號連接, 系統通過這些符號連接來起用站點 sites-enabled目錄下的符號連接附有一個數字前綴, 如000-default, 這個數字用于決定啟動順序, 數字越小, 啟動優先級越高. 系統提供了兩個命令 a2ensite 和 a2dissite 用于維護這些符號連接。這兩個命令由 apache2-common 包提供;
3.8 /var/www ;
默認情況下將要發布的網頁文件應該置于/var/www目錄下,這一默認值可以同過主配置文件中的DocumnetRoot 選項修改
4. Apache的管理;
4.1 啟動和停止Apache;
root@xiaop-laptop:/#/etc/init.d/apache2 start
root@xiaop-laptop:/#/etc/init.d/apache2 stop
4.2 Apache的日志文件;
Apache的日至文件主要包括訪問日志和錯誤日志。訪問日志記錄了該服務器所有的請求的過程,主要記錄的是客戶的信息,通過它我們可以知道什么人訪問了該網站,什么時候訪問的,訪問的內容是什么等等。錯誤日志則是記錄了服務器出錯的細節和如何處理等。日志文件的位置是由上述主配置文件httpd.conf來規定的。下面舉一個例子來說明它的格式:
一條錯誤信息:
[Mon sep 22 14:32:52 2003] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test
下面我們來看看這個錯誤信息都表示什么:
[Mon sep 22 14:32:52 2003] #錯誤發生的時間
[error] #表示錯誤的級別。有debug,info,notice,warn,error,crit,alert,emerg,這些級別由低到高表示了錯誤的嚴重性
[client 127.0.0.1] #表示客戶端IP地址
client denied by server configuration: /export/home/live/ap/htdocs/test #標是錯誤的具體信息
訪問日志的寫法:
127.0.0.1 - xiaop [22/sep/2007:13:55:36 -0800] "GET /apache_pb.gif HTTP/1.0" 200 2326
注:
127.0.0.1 #表示訪問這臺服務器的客戶端IP地址。
xiaop #表示用戶的登錄名。
[22/sep/2003:13:55:36 -0800] #服務器完成客戶端請求的時間,格式為[日/月/年:小時:分鐘:秒 時區]
"GET /apache_pb.gif HTTP/1.0" #表示客戶端訪問該資源所使用的方法
200 #記錄的是服務器返回給客戶的狀態碼; 200表示成功,以4打頭的表示訪問出錯
2326 #表示發給客戶端的總字節數。若是“—”表示沒有找到訪問資源
但在實際應用中,對于大型網站,日志文件往往增長的很快,不利于我們查詢,降低服務器的效率,而且占用大量的磁盤空間,所以我們必須對日志進行定期的維護;
5. 配置虛擬主機;
虛擬主機是在一臺www服務器上為多個單獨的域名提供www服務,每個域名具有自己的目錄和配置,相當于將一臺主機分為多臺主機,虛擬主機技術對于主機數量不足,但又想為不同的用戶提供獨立的Web服務的需求非常有效。而對于一個公司,利用價格昂貴的服務器只提供一種域名服務,似乎是不明智的,而現在越來越多的公司喜歡在一臺服務器上使用多個域名服務,架設不同的網站,這樣做的好處是顯而易見。
Apache有兩種方式支持虛擬主機,一種是基于IP的虛擬主機,另一種是基于名字的虛擬主機。基于名字的虛擬主機使用相同的IP地址來配置不同的虛擬主機,這就彌補了因IP地址不足而帶來的問題。基于名字的虛擬主機的配置相當簡單,你只需配置你得DNS服務器使每個主機名對應正確的IP地址,然后再配置 Apache HTTP Server使它能認識不同的主機名就可以了。
假設我們組建了一家多媒體制作公司,有一臺Apache服務器和一個IP地址:192.168.1.1 要運行兩種業務,一種為電子商務網站,域名為www.business.media.com ,另一種為教學網站,域名為www.teaching.media.com 。先在DNS服務器中把域名www.business.media.com和www.teachin....conf就可以了。
NameVirtualHost 192.168.0.1
<VirtualHost 192.168.0.1>
ServerName www.business.media.com
DocumentRoot /var/www/html/business
</VirtualHost>
<VirtualHost 192.168.0.1>
ServerName www.teaching.media.com
DocumentRoot /var/www/html/teaching
</VirtualHost>
而基于IP的虛擬主機則要求使用不同的IP地址來區別不同的虛擬主機,這就要求使用多塊網卡,把不同的IP地址捆綁到不同的網卡上,或者在一塊網卡上捆綁多個IP地址。假設我們主機的IP地址為192.168.0.1(www.media.com),另外有兩個IP地址別:
<VirtualHost 192.168.0.2>
ServerAdmin webmaster@ business.media.com
DocumentRoot /var/www/html/business
ServerName www.business.media.com
ErrorLog /var/www/html/business/logs/error_log
TransferLog /var/www/html/business/logs/access_log
</VirtualHost>
<VirtualHost 192.168.0.3>
ServerAdmin webmaster@teaching.media.com
DocumentRoot /var/www/html/teaching
ServerName www.teaching.media.com
ErrorLog /var/www/html/teaching/logs/error_log
TransferLog /var/www/html/teaching/logs/access_log
</VirtualHost>
6. 配置Apache代理;
代理服務器是網絡信息服務的中轉站。如果我們把Apache代理服務器形象地比喻成代理商的話,消費者向代理商購買東西時,如果代理商有的話,可直接賣給消費者,若沒有,則代理商向廠家進貨,再賣給消費者。
這樣做有以下幾點好處:
(1)提高了訪問速度;
(2)充當防火墻,增加了安全性;
(3)可以過濾一些不良網站;
(4)具有緩存功能;
(5)節省IP開銷;
代理服務器可分為兩種類型:客戶端代理和服務器端代理;
下面我們在講解幾個指令后舉例說明各自的配置方法;
ProxyRequest On/Off #啟用或者禁用Apache代理服務。
CacheRoot "/etc/httpd/proxy" #代理緩存的根目錄。
CacheSize 5 #代理緩存的大小。
CacheGcInterval 4 #設定運行管理緩存的無用數據搜集程序的時間間隔
CacheMaxExpire 24 #文件過期時間。
CacheDefaultExpire 1 #指定未包含過期信息文件的有效期。
NoCache a-domain.com another-domain.edu #該網站的文件將不被緩存。
6.1 客戶端代理的配置;
(1) 修改/etc/httpd/conf/httpd.conf中的相關指令
(2) 修改/etc/httpd/conf/httpd.conf,添加對代理目錄的訪問控制
Order deny,allow
Deny from all
Allow from .your-domain.com
(3) 重啟httpd
6.2 服務器端代理的配置;
服務器端代理與客戶端代理不同,它是在防火墻上安裝Apache服務器,使用它提供對WWW服務器的代理訪問。這種方法把WWW服務器與外部隔開,提高了安全性,而對用戶來說,好像沒有變化一樣。假設在內部局域網中WWW服務器的IP地址為192.168.0.2,防火墻主機內部IP地址為 192.168.0.5,外部IP地址為192.9.202.1。
6.2.1 配置防火墻上的Apache;
(1) 在/etc/httpd/conf/httpd.conf中添加虛擬主機。
<VirtualHost 192.9.201.1>
ServerAdmin webmaster@business.media.com
DocumentRoot /www/docs/business.media.com
ServerName www.business.media.com
ErrorLog logs/business.media.com-error_log
CustomLog logs/business.media.com-log_common
</VirtualHost>
(2) 配置局域網中的DNS服務器,把www.business.media.com指向192.9.201.1。
6.2.2 配置局域網內部WWW服務器;
在Linux環境下,有一個非常流行的代理服務器軟件——Squid。他的功能非常的強大,支持HTTP,FTP,Gopher,SSL,和WAIS等協議的代理,而且設置簡單,只需再配置文件中稍稍改動就可以了;
7. 關于本文;
本文只是簡單的說了一下www服務器的原理及簡單應用,沒有涉及到高級應用,主要是方便初學者,里面的不足之處還請大家多指教;
8. 更新日志;
9. 參考文檔;
10. 相關文檔;
《apache2 安裝與配置》
出處:http://www.linuxsir.org/main/node/280?q=node/280