apache配置

Apache配置(轉載)

 

Apache配置

   http://grid.tsinghua.edu.cn/home/liulk/publish/computer/ApacheConfig.html

  Linux Apache Web 服務器終極教程做者:佚名 文章來源:internet 

  根據著名的WWW服務器調查公司所做的調查,世界上百分之五十以上的WWW服務
  器都在使用Apache,是世界排名第一的WEB服務器。Apache的誕生極富有戲劇性。
  當NCSA WWW服務器項目停頓後,那些使用NCSA WWW服務器的人們開始交換他們
  用於該服務器的補丁程序,他們也很快認識到成立管理這些補丁程序的論壇是
  必要的。就這樣,誕生了Apache Group,後來這個團體在NCSA的基礎上建立了
  Apache。

    Apache的主要特徵是:

  .  能夠運行上全部計算機平臺;

  .  支持最新的HTTP 1.1協議;

  .  簡單而強有力的基於文件的配置;

  .  支持通用網關接口CGI;

  .  支持虛擬主機;

  .  支持HTTP認證;

  .  集成Perl腳本編程語言;

  .  集成的代理服務器;

  .  具備可定製的服務器日誌;

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

  .  支持安全Socket層(SSL)

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

  .  支持FastCGI;

  .  支持Java Servlets。


  安裝Apache


    下面咱們就開始漫漫征服Apache之旅,經過按部就班的需求實例,一步步
  地學習使用Apache,從入門到精通。



  系統需求

    運行Apache不須要太多的計算資源。它在有6-10MB硬盤空間和8MB RAM的
  Linux系統上運行得很好。然而,只運行Apache可能不是你想作的事情。更可能
  的是,你想運行Apache來提供WWW服務、啓動CGI進程以及充分利用全部WWW可以
  提供的使人驚奇的功能。在這種狀況下,你須要提供反映負載要求的額外的磁
  盤空間和內存空間。也就是說,若是僅僅是啓動WWW服務並不須要太多的系統資
  源,可是想要能爲大量的客戶提供服務就須要更多的系統資源。

  獲取軟件

    你能夠在http://www.apache.org中得到Apache的最新版。而幾乎全部的
  Linux發行版中均包含有Apache軟件包,你也能夠直接使用它。

  須要注意的是,Apache軟件包有兩種:一種是源代碼,下載後須要本身從新編
  譯;另外一種是可執行文件,下載後只需解壓就可使用。



  安裝軟件

    你能夠經過如下三種方法安裝Apache服務器。


    1.若是你安裝的Linux版本中帶用Apache的話,就在選擇所要安裝的服務
  器的時候,將httpd這個服務選上,Linux安裝程序將自動完成Apache的安裝工
  做,並作好基本的配置。

    2.使用可執行文件軟件包,這比較適合那些對編譯工做不是太熟悉的初級
  用戶,由於它相對比較簡單。

    下載軟件包apache_1.2.4.e.tar.gz

    tar xvzf apache_1.2.4.e.tar.gz

    這就完成了安裝工做,簡單吧!

    若是你使用的是RedHat Linux的話,你也能夠下載apache_1.2.4.rpm軟件
  安裝包,而後使用rpm -ivh   apache_1.2.4.rpm命令安裝。

    3.若是你想把Apache服務器充分利用起來的話,就必定要本身編譯
  Apache定製其功能。

  下載包含Apache源代碼的軟件包apache_1.2.4.tar.gz; 而後用tar命令將它解
  開; 將當前目錄改變爲Apache源代碼發行版的src目錄; 將配置樣本文件
  (Configuration.tmpl)複製爲Configuration文件;

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

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

  . "CC="一行指定用什麼編譯軟件編譯,通常爲"CC=gcc";

  . 若是須要將額外的標誌(參數)指定給C編譯軟件,可使用:

  EXTRA_CFLAGS=

  EXTRA_LFLAGS=

  . 若是系統須要特殊的庫和包含文件,能夠在這裏指定它們:

  EXTRA_LIBS=

  EXTRA_INCLUDES=

  . 若是你要改變代碼優化設置的話,你須將下面一句去掉註釋,然

  後改爲你所須要的值:

  #OPTIM=-O2

  Rule配置選項:用來決定須要什麼功能,通常狀況下無需改變。

  模塊配置:模塊是Apache的組成部分,它爲Apache內核增長新功能。經過使用
  模塊配置,能夠自定義在Apache服務器中須要什麼功能,這個部分也是Apache
  靈活性的表現。模塊配置行以下所示:

  AddModule modules/standard/mod_env.o

  若是你須要Apache服務器具有什麼功能,就將那個模塊用AddModule語句加到配
  置文件Configuration中去。

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

  模塊名 功能 缺省

  mod_access 提供基於主機的訪問控制命令 y

  mod_actions 可以運行基於MIME類型的CGI腳本或HTTP請求方法 y

  mod_alias 能執行URL重定向服務 y

  mod_asis 使文檔能在沒有HTTP頭標的狀況下被髮送到客戶端 y

  mod_auth 支持使用存儲在文本文件中的用戶名、口令實現認證 y

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

  mod_auth_mysql 支持使用MySQL數據庫實現基本HTTP認證 n

  mod_auth_anon 容許以匿名方式訪問須要認證的區域 y

  mod_auth_external支持使用第三方認證 n

  mod_autoindex 當缺乏索引文件時,自動生成動態目錄列表 y

  mod_cern_meta 提供對元信息的支持 n

  mod_cgi 支持CGI y

  mod_dir 可以重定向任何對不包括尾部斜槓字符命令的請求 y

  mod_env 使你可以將環境變量傳遞給CGI或SSI腳本 n

  mod_expires 讓你肯定Apache在服務器響應請求時如何處理Expires y

  mod_headers 可以操做HTTP應答頭標 y

  mod_imap 提供圖形映射支持 n

  mod_include 使支持SSI n

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

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

  mod_log_config 支持記錄日誌 y

  mod_log_referer 提供了將請求中的Referer頭標寫入日誌的功能 n

  mod_mime 用來向客戶端提供有關文檔的元信息 y

  mod_negotiation 提供了對內容協商的支持 y

  mod_setenvif 使你可以建立定製環境變量 y

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

  mod_status 容許管理員經過WEB管理Apache y

  mod_unique_id 爲每一個請求提供在很是特殊的條件下保證是惟一的標識 n


  在src目錄下執行:". /configure";

  編譯Apache:執行命令"make";

  根據機器性能的不一樣,經歷一段5-30分鐘的編譯,就大功告成了。

  將編譯好的可執行文件httpd複製到/etc/httpd/bin目錄下;

  將Apache發行版的配置文件:access.conf、httpd.conf、mime.types、
  srm.conf文件複製到/etc/httpd/conf目錄下。到此爲止,安裝完成。


  一些說明

  在Red Hat Linux 6.0中,Apache將本身的全部配置文件和日誌文件放在了
  "/etc/httpd"目錄下,其中"/etc/httpd/conf"下爲配置文
  件,"/etc/httpd/log"下爲日誌文件。

  同時,它將創建"/home/httpd"目錄,並在其下創建三個子目錄:"html/":在
  這個目錄下存放HTML(主頁)文件;"cgi-bin/":在這個目錄下能夠存放一些
  CGI程序;"icons/":在這個目錄下是服務器自帶的一些圖標。

  配置Apache基礎篇,讓WWW服務器跑起來

  Apache 服務器軟件的配置文件主要有:"access.conf":用於設置系統中的存
  取方式和環境;"httpd.conf":用於設置服務器啓動的基本環境;
  "srm.conf":主要用於作文件資源上的設定;"mime.type":記錄Apache服務器
  所能識別的MIME格式。

  在具體講解以前,咱們必須告訴你們,Apache已經在安裝時就採用了一系列的
  缺省值,已經讓WWW服務器跑起來了。你只須要將裝上Linux+Apache的主機聯入
  Internet,而後將主頁存放到"/home/httpd"目錄下便可。

  下面介紹一些最主要的配置選項的含義,以便你們用最小的精力、最小的配置
  準備好服務器。


  httpd.conf

  tpd.conf是主配置文件。它告訴服務器將如何運行。

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

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

  在standalone模式下,不存在對每一個請求啓動新進程的開銷,因此它的效率更
  高;而inetd模式被認爲比standalone模式更具安全性。

  standalone模式:

  此種模式下,WWW服務器偵聽特定端口的鏈接請求。當客戶機發出到特定端口地
  址的鏈接請求時,主服務器進程啓動子WWW服務進程來服務該請求。另外還須要
  告訴主服務器進程偵聽的特定端口地址,使用命令:

  Port [number] (缺省值爲80)

  inetd模式

  inetd 是偵聽有小於1024的端口鏈接請求的Internet守護進程(一個服務器進
  程)。與前面的方法不一樣,當客戶系統發出到WWW服務器的鏈接請求時, inetd
  啓動一個WWW服務器進程,由此進程服務此請求,完成服務後即退出。若是選擇
  經過inetd服務器來運行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進程。首先,使用如下命令取得inetd的
  進程ID:

  ps auxw |grep inetd

  而後執行命令:kill -HUP <inetd的進程ID>

  在RedHat Linux中,默認是採用inetd服務器來運行Apache,因此只要你在安裝
  時選擇了httpd,以上工做在安裝時就已經代你完成了。


  2、其它配置選項

    Server Admin命令,用來設置WEB管理員的E-Mail地址。這個地址會出如今
  系統鏈接出錯的時候,以便訪問者可以將狀況及時地告知WEB管理員。

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

  例:Server Admin admin@xxx.com

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

  命令格式: ErrorLog [log filename]

  例:ErrorLog /var/httpd/error.log

  Timeout命令,只要客戶端超過這裏設定的秒數尚未完成一個請求的話,服務
  端將終止此次請求服務。若是網絡速度較慢的話,建議在此設置較大的數值。
  以給客戶端更多機會。

  命令格式: Timeout [second]

  例:Timeout 120

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

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

  例:ServerRoot /etc/httpd

  ServerName命令,它配置服務器的Internet主機名

  命令格式: ServerName [host name]

  例:ServerName www.xxx.com


  srm.conf

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

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

  命令格式: DocumentRoot [Path]

  例:DocumentRoot /home/httpd/html

  UserDir 命令,用來指定我的主頁的位置。若是你有一個用戶test,那麼它主
  目錄是"/home/test",當客戶端輸入"http: //yourdomain/~test";;,系統就
  會到對應的目錄"/home/test/UserDir/"中去尋找。其中"UserDir"就是在
  UserDir命令中設置的指定目錄。

  命令格式: UserDir [Path]

  例: UserDir Public_html

  DirectoryIndex 命令,用來聲明首頁文件名稱。通常地,咱們使用
  "index.html"或"index.htm"做爲首頁的文件名。若是這樣設置後,那麼客戶端
  發出 WEB服務請求時,將首先調入的主頁是在指定目錄下文?quot;index.html"或
  "index.htm"。

  命令格式: DirecotryIndex [filename]

  例:DirecotryIndex index.html index.htm

  ScriptAlias命令,爲腳本程序目錄起個別名,具體可見4.7小節。

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

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


  access.conf的配置

  access.conf文件用來設置WWW站點上諸如文件、目錄和腳本項目的訪問權限。
  該文件的第一段非註釋部分以下:

  <Directory /home/httpd/html>

  Option Indexes Includes ExecCGI FollowSymLink

  AllowOverride None

  Order allow , deny

  allow from all

  </Directory>

  你們應該注意到,這一個部分是以<Directory /home/httpd/html>開始,以
  </Directory>結束的。這表示在其中間的部分都是針對指定目錄
  &#0;&#0;"/home/httpd/html"而言的。

  1.Option命令有不少的參數,各個參數的意義以下所示:

  All 准許如下全部功能(MultiViews除外);

  MultiViews 准許內容協商的Multiviews;

  Indexes 若該目錄下無index文件,則准許顯示該目錄下的文件以供選擇;

  IncludesNOEXEC 准許SSI(Server-side Includes),但不可以使用#exec和
  #include功能;

  Includes 准許SSI;

  FollowSymLinks 准許符號連接到其餘目錄;

  ExecCGI 准許該目錄下可使用CGI。

  2.而AllowOverride命令則是用來決定是否准許在"access.conf"文件中設定的
  權限是否能夠被在文件".htaccess"中設定的權限覆蓋。它有兩個參數:

  All 准許覆蓋;

  None 不許許覆蓋。

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


  allow 能夠取得控制;

  deny 禁止取得控制。

  如今咱們一塊兒來看看關於目錄"/home/httpd/html"的設置的含義:它使得這個
  目錄,若是不存在index.htm文件時,列出目錄信息以供選擇,准許SSI,容許
  執行CGI程序,開啓了動態鏈接。它不容許再使用在文件".htaccess"中設定來
  覆蓋這裏所設置的權限。使全部的人均可以取得控制。

  該文件的第二段非註釋部分以下:

  <Directory /home/httpd/cgi-bin>

  Option ExecCGI

  AllowOverride None

  </Directory>

  這個表示目錄"/home/httpd/cgi"的設置爲,當前目錄下能夠執行CGI程序。不
  容許再使用在文件".htaccess"中設定來覆蓋這裏所設置的權限。

  須要說明的是,不一樣的LINUX系統中,能夠在這個文件中看到的信息不徹底相
  同,可是根據這裏給出的信息,你們能夠參照命令的解釋自行理解文件中的設
  置,以及根據本身的須要進行相應的修改。

  4.4 使新的配置生效

  在上面,咱們可能已經根據新的需求更改了相應的配置選項,若是咱們要使得
  這個新的配置當即生效。咱們就必須從新啓動WEB服務進程。在LINUX中,咱們
  能夠十分方便地使用命令行來使得WEB服務進程重啓。

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

  5、爲用戶開闢我的主頁空間


  若是咱們利用了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實現虛擬主機服務


    什麼是虛擬主機服務

    所謂的虛擬主機服務就是指將一臺機器虛擬成多臺WEB服務器。舉個例子來
  說,一家公司想從事提供主機代管服務,它爲其它企業提供WEB服務。那麼它肯
  定不是爲每一家企業都各準備一臺物理上的服務器,而是用一臺功能較強大的
  大型服務器,而後用虛擬主機的形式,提供多個企業的WEB服務,雖然全部的
  WEB服務就是這臺服務器提供的,可是讓訪問者看起來倒是在不一樣的服務器上獲
  得WEB服務同樣。


    具體地說,就是,咱們能夠利用虛擬主機服務將兩個不一樣
  www.company1.comwww.company2.com的主頁內容都存放在同一臺主機上。而訪
  問者只需輸入公司的域名就能夠訪問到它想獲得的主頁內容。 用Apache設置虛
  擬主機服務一般能夠採用兩種方案:基於IP地址的虛擬主機和基於名字的虛擬
  主機,下面咱們分別介紹一下它們的實現方法。以便你們在具體的應用中可以
  選擇最合適的實現方法。


  設置實現基於IP地址的虛擬主機服務實現前提

    這種方式須要在機器上設置IP別名,也就是在一臺機器的網卡上綁定多個
  IP地址去爲多個虛擬主機服務。並且要使用這項功能還要肯定在你的LINUX內核
  中必須支持IP別名的設置,不然你還必須從新編譯內核。

    下面舉一個擁有兩個虛擬主機的服務設置,以供參考。

  2.配置步驟

  假設,咱們用來實現虛擬主機服務的機器,首先已經爲本身提供了WEB服務,現
  在將爲新的一家www.company1.com提供虛擬主機服務。

  規劃IP地址:爲虛擬主機申請新的IP地址。(假設本機IP地址爲202.101.2.1)

  www.company1.com 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 webmaster@yourdomain.com

  DocumentRoot /home/httpd/www.company1.com

  ServerName www.company1.com

  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地址浪費。
  設置實現基於名字的虛擬主機服務而基於名字的虛擬主機服務,是比較適合使
  用的一種方案。由於它不須要更多的IP地址,並且配置簡單,無須什麼特殊的
  軟硬件支持。現代的瀏覽器大都支持這種虛擬主機的實現方法。固然,這也就
  是指一些早期的客戶端瀏覽器也許不支持這種虛擬主機的實現方法。

    正是以上緣由,咱們沒有理由不使用基於名字的虛擬主機服務而使用基於
  IP地址的虛擬主機服務。配置基於名字的虛擬主機服務須要修改配置文
  件?quot;/etc/httpd/conf/httpd.conf",在這個配置文件中增長如下內容。

  NameVirtualHost 202.101.2.1

  <VirtualHost 202.101.2.1>

  ServerAdmin webmaster@yourdomain.com

  DocumentRoot /home/httpd/www.company1.com

  ServerName www.company1.com

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

  </VirtualHost>

  <VirtualHost 202.101.2.1>

  ServerAdmin webmaster@yourdomain.com

  DocumentRoot /home/httpd/www.company2.com

  ServerName www.company2.com

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

  </VirtualHost>

    也就是在基於IP地址的配置基礎上增長一句:NameVirtualHost
  202.101.2.1而已。在本例中,爲了體現只須要增長一次,因此特別地設置了兩
  個虛擬主機服務。

  最後也是創建相應的目錄,將主頁內容放到相應的目錄中去就能夠了。


  配置CGI

  1. 什麼是CGI

  CGI是獨立於語言的網關接口規範,它實際上能夠用任何普遍流行的應用程序開
  發語言來實現,包括C、C++、Perl、Shell腳本甚至Java。

  WEB服務器從客戶端獲得某個URL,它告訴WEB服務器,必須運行一個CGI外部應
  用程序。那麼WEB服務器啓動這一應用程序,等待它完成並返回輸出結果。最
  後,它將此應用程序的輸出結果傳輸給另外一端的WEB客戶。

  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

  這樣作後,當客戶www.xxx.com/cgi-bin/li.cgi時,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

  當Apachewww.xxx.com/~user的請求,就到/home/user/Public_html取出主頁發
  送給客戶。

  若是要爲每一個用戶添加CGI支持就在Apache的配置文件access.conf中添加下列
  配置:

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

  Options ExecCGI

  AddHandler cgi-script .cgi .pl

  </DirectoryMatch>

  注:將DirectoryMatch換成Directory亦可

  在這種方法中,Apache服務www.xxx.com/~user/cgi-bin請求翻譯成爲了
  /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與(.*)相等。

  這個設置也就實現www.xxx.com/~user/cgi-bin/xxx.cgi請求解釋爲:

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

  那麼你們想想,若是你想將這個請求解釋爲:

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

  該如何設置呢?對,應該是:

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

  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:客戶端的端口號;

  4. 一點提示

  若干年來,經過網關接口(CGI)已成爲服務器端應用程序開發的事實標準。但
  隨着時間的推移,發如今沉重的CGI負擔下許多WWW服務器系統的表現不盡人意。
  這是由於CGI規範存在瓶頸問題:每當客戶系統請求CGI應用程序時,WWW服務器
  就必須啓動新的CGI進程,直到完成任務後結束進程。這在負載不高時,會工做
  正常。可是,在高負載時,繁多的進程將成爲性能的瓶頸問題。


  因此如今開始出現新的標準來彌補這一不足,其中FastCGI是頗有前途的一種新
  的開放式標準。


  你能夠在Apache中經過添加mod_fastcgi.c模塊來支持FastCGI。


  解讀Apache日誌


    當你一步步地看到這裏的時候,相信你的WWW站點已經建好,而且已經在
  Internet上展示出來了。這時你可能就會關心誰造訪過你的站點,或者想知道
  你的Apache服務器如今的運行狀態與性能如何。下面咱們一塊兒經過解讀Apache
  的日誌來實現這個偉大的願望。

  1、盯着Apache服務器

  Apache容許經過WWW監視服務器的配置信息與運行狀態。


  1.觀看配置信息


  若是你的Apache象缺省配置同樣加入了mod_info模塊的話,你就能夠經過訪問
  http://localhost/server-info查看服務器信息。

  2.使用狀態頁

  若是你的Apache象缺省配置同樣加入了mod_status模塊的話,你就能夠

  經過訪問http://localhost/apache-status查看服務器的運行狀態信息,其中
  包括:

  ¨ 服務器系統的當前時間;

  ¨ 服務器最近一次重啓時間;

  ¨ 服務器啓動後的運行時間;

  ¨ 到目前爲止服務的訪問總數;

  ¨ 到目前爲止傳輸的字節總數;

  ¨ 服務請求的子進程數;

  ¨ 空閒子進程數;

  ¨ 每一個進程狀態、子進程服務的請求數以及該子進程傳輸的字節總數;

  ¨ 每秒平均請求數、每秒傳輸的字節數、每次請求平均傳輸字節數;

  ¨ 目前每一個子進程CPU佔用及Apache的總的CPU佔用率;

  ¨ 當前主機及處理的請求。


  2、什麼是日誌文件


  日誌文件是Apache工做的記錄,Apache包括了mod_log_config模塊,它用來記
  錄日誌。在缺省狀況下,它用通用日誌格式CLF規範來寫。CLF日誌文件內對每
  個請求均有一個單獨行,形如:host ident anthuser date request status
  bytes

  其含義以下:

  ¨ host&#0;&#0;客戶端主機的全稱域名或IP地址;

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

  ¨ authuser&#0;&#0;若是是基於用戶名認證的話,值爲用戶名;

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

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

  ¨ status&#0;&#0;返回到客戶端的三們數字的HTTP狀態碼;

  ¨ bytes&#0;&#0;除去HTTP頭標外,返回給客戶端的字節數。


  3、分析日誌文件


  有了日誌文件後,咱們能夠利用UNIX的一些工具和一此專門的日誌分析工具對
  日誌文件進行分析。


  實例一:列出訪問過本網站的主機名或IP:

  對於這個需求,咱們能夠經過一個Unix的一個腳本語句來完成:

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

  用上面的方法雖然能夠獲得訪問過本網站的主機名或IP,可是因爲有些是屢次
  訪問的,咱們但願在上面獲得的結果的基礎上作一些優化,使得列出的表中,
  每一個主機只出現一次。咱們可使用:

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

  3. 固然,咱們能夠根據須要選擇第三方提供日誌分析工具甚至本身開發一些日
  3. 志分析工具來知足咱們的需求。常見的第三方日誌分析工具備:WebTrends、
  3. Wusage、wwwstat、http-analyze、pwebstats、WebStat Explorer、
  3. AccessWatch。


  4、一些提示

  日誌一方面是咱們分析網站的第一手資料,一方面倒是吞噬大量磁盤空間的罪
  魁禍首。因此別忘了按期轉儲或刪除一些老的日誌文件。

  Apache與代理服務器

    代理服務器是位於客戶和客戶要訪問的服務器之間的系統。當客戶機使用
  URL請求訪問遠程資源時,代理服務器接受該請求並取得該資源以知足客戶機的
  請求。在一般狀況下,代理服務器是客戶機的服務器,同時也是遠程服務器的
  客戶。

    代理服務器能夠在本身的緩衝區中存儲被請求的內容,當這些信息再次被
  請求的時候,代理服務器就無需再從遠程服務器上取了,這樣代理服務器就減
  輕了網絡的瓶頸問題。

  Apache能夠配置成爲代理服務器。


  1、前向代理服務器和逆向代理服務器

  1.前向代理服務器

  前向代理服務器一般位於用戶主機和要訪問的遠程網絡之間。它從遠程服務器
  取得所要求的資源,而後返回給用戶,同時存在磁盤上,以供下次使用。

  在這種狀況下,客戶端的主機知道它們正在使用代理服務器,由於每一個主機都
  必須配置爲使用代理服務器。

  例如,必須告訴WWW瀏覽器使用代理服務器,它才能使用代理服務器。全部的遠
  程請求都經過代理服務器傳輸。

  這類代理服務器也稱爲緩衝代理服務器。逆向服務器也能夠緩衝數據,但它的
  做用愉好與前向服務器相反。

  2.逆向代理服務器

  逆向代理服務器位於互聯網資源前面,逆向服務器從原始服務器找到被請求的
  資源,並反它返回給用戶主機。

  與前向代理服務器不一樣的是,逆向代理服務器的用戶並不知道它們鏈接的是代
  理服務器而不是資源服務器自己。其結構以下圖所示:

  2、配置代理服務器


    爲了容許Apache做爲代理服務器,須要將ProxyRequests設爲On,而後根據
  你但願代理服務器作什麼而增長什麼附加配置。不管你但願作什麼,你所選的
  代理配置都應該放入一個特殊?lt;Directory>容器中。


  <Directory proxy:*>

  …

  </Directory>

  實例一:將私有IP網連到互聯網

  假設私有網上只有一臺計算機被分配了互聯網上合法的IP地址,這臺計算

  機運行Apache代理服務器,ProxyRequest設置爲On,而且不須要附加其餘配
  置,全部請求都可由這臺代理服務器代理服務。

  實例二:讓Apache允當遠程WWW站點的緩衝

  第一步:將ProxyRequest設置爲On

  第二步:建立配置以下:

  <Directory proxy:*>

  CacheRoot /www/cache

  CacheSize 1024

  CacheMaxExpire 24

  </Directory>

  這裏的意思是設置Cache目錄爲/www/cache;大小爲1024KB,即1MB;緩衝中的
  內容在24小時後失效。

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

  第一步:將ProxyRequest設置爲On

  第二步:建立配置以下:

  <Directory proxy:*>

  ProxyPass / www.mot.com /

  CacheRoot /www/cache

  CacheDefaultExpire 24

  </Directory>

  10.3 一些提示

  代理服務器,咱們將會在後面的章節中詳細介紹,這裏只是針對Apache的功能
  介紹的。用Apache做代理服務器的性能並不高,效果並很差。不建議使用。

  安裝 Apache+PHP+MySQL+imap+GD+Ldap+opens

  注意事項:

  1.若是妳是用 Redhat based 的 Linux 的話,請執行 ntsysv 將 httpd 和
  1.Mysql 不要執行

  2.將 DOWNLOAD 的檔案放到相同的目錄,再用 tar zxvf xxxxxxxx.tar.gz 來
  2.解壓縮,請依照要安裝的軟件進入適當的目錄。

  3.能夠到 http://linuxnews.idv.tw/download/ 來下載所需的程序。

  MySQL:

  ---------------------------------------------------------------

  ./configure --prefix=/usr/local/mysql --with-charset=big5

  make

  make install

  cd scripts

  ./mysql_install_db

  cd /usr/local/mysql/share/mysql/

  chmod 611 mysql.server

  ./mysql.server start

  #編輯 /etc/rc.d/rc.local 加入底下這行以便開機時自動執行 mysql

  /usr/local/mysql/share/mysql/mysql.server start

  imap:

  ---------------------------------------------------------------

  make slx

  cp ipopd/ipop*.* /usr/sbin

  cp imapd/imapd /usr/sbin

  cp c-client/c-client.a /usr/local/lib

  #請肯定你有 /usr/local/include 這個目錄

  cp c-client/rfc822.h /usr/local/include

  cp c-client/mail.h /usr/local/include

  cp c-client/linkage.h /usr/local/include

  GD:

  ---------------------------------------------------------------

  make

  make install

  Ldap:

  ---------------------------------------------------------------

  ./configure --prefix=/usr/local/ldap

  make

  make depend

  cd tests

  make

  cd ..

  make install

  Apache:

  ---------------------------------------------------------------

  ./configure --prefix=/usr/local/apache

  openssl:

  ---------------------------------------------------------------

  ./config

  make

  make test

  make install

  mod_ssl:

  ---------------------------------------------------------------

  ./configure --with-apache=../apache_1.3.19
  --with-ssl=../openssl-0.9.6 --prefix=../apache_1.3.19

  php:

  ---------------------------------------------------------------

  ./configure --with-mysql=/usr/local/mysql
  --with-apache=../apache_1.3.19 --enable-track-vars
  --with-gd=../gd-1.8.4 --with-imap=../imap-4.7c --enable-ftp
  --with-ldap=/usr/local/ldap

  make

  make install

  Apache:

  ---------------------------------------------------------------

  ./configure --prefix=/usr/local/apache
  --activate-module=src/modules/php4/libphp4.a --enable-module=ssl

  make

  make certificate

  #這時會問你一些問題,就是有關於加密的問題,最後要要求輸入啓動的密碼,
  若是輸入密碼的話之後啓動 httpd 的時候會詢問密碼,若不輸

  #入密碼的話啓動就不會問了

  #PS.啓動http

  #要加密:apachectl startssl

  #不加密:apachectl start

  make install

  修改 /etc/rc.d/rc.local 加入 /usr/local/apache/bin/apachectl start 來
  開機時自動啓動 Apache

  再來就是修改 /usr/local/apache/conf/httpd.conf 的設定檔,將 php 的支
  持加入

  創建Apache站點的基本安全機制

  對於WWW服務來講,在WWW服務器和WWW瀏覽器之間並不始終維持對話過程。辦要
  WWW服務器完成對一個URL請求的服務,鏈接就斷開了。

  在這種狀況下,在WWW上保證可使用的惟一認證機制是由HTTP自己提供 的。
  在標準的Apache服務器實現了這樣的認證,它能控制哪些主機可能訪問特定的
  站點或特色的站點的一部分。

  這種認證能夠分爲兩種,一種是基於主機的的認證,另外一種是基於用戶名/口令
  的認證。因爲互聯網上的決大多數用戶的IP地址是動態得到的,因此基於主機
  的認證方式並不總適用。因此在大多數狀況下,傳統的基於用戶名/口令的認證
  方式更爲現實。下面咱們就對這兩種認證的實現作一簡要的介紹。

  1. 基於主機的認證方式

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

  allow命令

  語法:allow from host1 host2 host3 ...

  這個命令定義了容許訪問站點或目錄的主機清單。主機清單能夠用如下幾

  種形式表示:

  ALL:表明全部主機;

  主機的全域名,www.mot.com;

  主機的部分域名,如:.mot.com;

  完整的IP地址,如:202.98.2.32;

  部分IP地址,如:202.98

  網絡地址/網絡掩碼對,如:202.98.0.0/255.255.0.0

  網絡地址/nn(CIDR定義),如:202.98.0.1/16

  deny命令

  語法:deny from host1 host2 host3 ...

  這個命令定義了禁止訪問站點或目錄的主機清單,其餘與allow命令類似。

  order命令

  語法:order deny,allow | allow,deny

  這個命令定義評價allow和deny命令的前後順序。

  例如:

  <Directory /home/httpd/html>

  order deny,allow

  deny from www.mot.com

  allow all

  </Directory>

  這組命令設置了www.mot.com訪問/home/httpd/html目錄下的文件。

  請你們注意,順序是先deny後allow,若是是:order allow,deny 那麼,先允
  許全部的主機訪問,而後再禁止,這樣是無效的,全部主機仍然可以訪問。

  2. 基於用戶名/口令的認證方式

  這種認證方式其實至關簡單,當WWW瀏覽器請求經此認證模式保護的URL

  時,將會出現一個對話框,要求用戶鍵入用戶名和口令。用戶輸入後,傳給
  WWW服務器,WWW服務器驗證它的正確性,若是正確,返回頁面,不然返回401錯
  誤。要說明的一點是,這種認證模式是基本的,並不能用於安全性要求極高的
  場合。

  Apache 中有許多模塊能夠支持這種認證方式,下面咱們就介紹一下最基本、最
  標準的mod_auth模塊。正如前面提到的同樣,mod_auth模塊使用存儲在文本文
  件中的用戶名、組名和口令來實現認證。這種方法很是適合處理少許用戶,它
  能工做得很好。若是你須要對大量的用戶,如數以千計的用戶作認證時,這種
  方法的性能將急劇降低到不可忍受,因此當這種狀況下,就須要考慮使用
  mod_dbm模塊或mod_mysql模塊來得到更好的性能。

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

  下面咱們就一塊兒來看一下如何創建須要用戶名/口令才能進行訪問的目錄。

  基本狀況: www.xxx.com

  的站點有設置爲:

  DocumentRoot /home/httpd/html

  AccessFileName .htaccess

  AllowOverride All

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

  實現步驟:

  使用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

  設置文件權限,確保Apache用戶有讀的權限

  這樣就完成了設置工做,你能夠試一試效果了。

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

  假設,www.xxx.com想讓myfriend組中的mf1與mf2兩個用戶分別能

  使用口令"mf001-1""mf002-2"訪問/home/httpd/html/backup/目錄。

  實現步驟:

  使用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

  配置工做到此結束,試一試吧!

  實例三:混合使用基於主機與基於用戶名/口令的認證方式

  若是你除了只容許讓mf1與mf2兩個用戶訪問外,還想禁www.mot.com

  外的主機訪問這個目錄的話,就將/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中有關安全方面的設置作出詳細的敘述,涉及到Apache的配置文件、Apache的目錄訪問控制、在Apache上運行CGI等安全方面的設置。
4.5.1  Apache的配置文件

對於RedHat Linux系統,Apache的配置文件放在/etc/httpd/conf/目錄下。若是是自行編譯安裝的Apache,則視編譯時指定的目錄路徑而定,默認是/usr/local/apache/conf。

在conf目錄下有3個Apache的配置文件:

          httpd.conf

          access.conf

          srm.conf

Apache啓動時先調用httpd.conf,而後調用srm.conf,最後調用access.conf。但現代版本的Apache爲避免管理和維護的混亂,已經改成將全部Apache的相關配置命令放在httpd.conf文件中,再也不使用srm.conf和access.conf文件。雖然這兩個文件仍然存在,但內容中沒有任何配置命令,形同虛設。

httpd.conf文件分爲如下3部分:

          Global Environment

          'Main' server configuration

          Virtual Hosts 

下面將講述這3部分的用法和與安全相關的注意點。
4.5.1.1  Global Environment

          ServerType standalone

用來指定Apache的啓動方式:standalone和inetd。standalone模式是Apache獨立運行,也是默認的啓動方式。inetd模式是守護進程監聽http的鏈接請求才啓動httpd進程,請求完畢後就結束httpd進程,這樣服務器負擔很重。

          ServerRoot "/etc/httpd"

Apache的目錄,此處是存放配置、出錯記錄、日誌文件的根目錄。目錄後面不要加「/」字符。

          LockFile /var/lock/httpd.lock

保留默認值,不要更改。

          PidFile /var/run/httpd.pid

指定記錄Apache的父進程id的文件名及路徑。

          ScoreBoard /var/run/httpd.scoreboard

指定用於儲存服務器進程處理信息的文件名和路徑。

          #ResourceConfig conf/srm.conf

          #AccessConfig conf/access.conf

在標準的配置中,服務器啓動時會處理這兩個文件。由於如今的Apache只使用httpd.conf文件,摒棄了srm.conf和access.conf文件,因此這兩行用「#」註釋掉。

           Timeout 300

設置超時時間。若是遠程客戶端超過300秒還沒連上Apache Server,或者Apache Server超過300秒沒有傳送字節給客戶端,就當即斷開鏈接。

           KeepAlive On

KeepAlive容許客戶端的每一個鏈接有多個請求,設爲Off時此項無效。

           MaxKeepAliveRequests 100

設置每次鏈接期間所容許的最大請求數目。設爲0時表示容許無限制數目。設置數字越大,則服務器性能越高。

           KeepAliveTimeout 15

設置等待同一個客戶端的同一個鏈接發出下一個鏈接請求超過必定的時間就斷線。

           MinSpareServers 5

          MaxSpareServers 20

設置最小的閒置服務處理程序的數目和最大的閒置服務處理程序的數目。若是實際數目少於MinSpareServers,則將增長處理程序;反之,若是實際數目超過MaxSpareServers,一些多餘的處理程序將被殺掉。

           StartServers 8

設置啓動並初始化後啓動服務進程的數目。

           MaxClient 150

設置服務運行的總數量。一旦達到此數目,新來的客戶端就被拒絕,因此該限制數目不能設得過小。

           MaxRequestsPerChild 100

設置每一個子程序處理結果前的要求數目,設爲0表示不限制。

           #Listen 3000

#Listen 12.34.56.78:80

Listen 80

設置Apache監聽的鏈接端口或IP地址及端口,默認是80。

           #BindAddress *

該選項用來支持虛擬主機,並告知服務器監聽哪一個IP地址。可使用「*」,或具體的IP地址和完整的域名。

           #LoadModule foo_module libexec/mod_foo.so

DSO(Dynamic Shared Object)支持。DSO模塊的概念和做用與Windows的DLL文件極其類似。

           #ExtendedStatus On

當「server-status」管理程序被執行時,檢查Apache的運行狀態信息。默認是Off。
4.5.1.2  'Main' Server Configuration

若是在第一部分「Global Environment」中的ServerType命令設爲inetd的話,那麼這部分就沒有任何效果,直接跳到ServerAdmin命令。

           Port 80

設置Standalone服務器監聽的鏈接端口,也能夠設爲其餘端口,必須小於1 023。必須以root身份才能更改端口。

           User apache

           Group apache

指定運行httpd的用戶和用戶組。必須首先以root身份指派。

           ServerAdmin root@localhost

設置管理員的電子郵件地址,當Apache有問題時會自動發E-mail通知管理員。

           #ServerName localhost

設置主機名稱,能夠用域名和IP地址。

           DocumentRoot "/var/www/html"

設置Apache放置網頁的目錄路徑。

           <Directory/>

Options FollowSymLinks

AllowOverride None

<Directory/>

設置Apache可以訪問的每個目錄被訪問時所執行的動做。本章後面將詳細敘述Apache的目錄存取方法。

           <Directory "/car/www/html">

Options Indexes Include FollowSymLinks

AllowOverride None

Order allow, deny

Allow from all

</Directory>

此處設置Apache的網頁目錄的執行動做。本章節後面將詳細敘述目錄的存取方法。

           <Directory/>

AllowOverride None

Options None

Allow from all

</Directory>

此處能夠防止用戶建立本身的.htaccess文件。在這個文件中能夠改變全局參數,以至會影響到整個系統的安全。能夠在httpd.conf文件中加入的命令中都加上上面的代碼。

           UserDir public_html

設置用戶在本身的目錄下創建public_html放置網頁,即/home/*/public_html/。這樣在瀏覽器地址欄輸入「http://Apache服務器/用戶名/」就能顯示網頁。設置的目錄必須告知用戶,不然他們不知道網頁放在什麼地方。

           DirectoryIndex index.html index.htm index.shtml index.php index.php4 index.php3 index.cgi

設置Apache的默認首頁文檔。

           AccessFileName .htacess

指定控制存取的文件名稱。Apache默認的是.htaccess。本章將在後面詳細敘述該文件的用法。

           <Files ~ "^\.ht>

Order allow,deny

Deny from all

</Files>

防止用戶端看到ht開頭的文件內容。由於.htaccess記載了相關信息,.htpasswd記載了密碼信息,不容許其餘人訪問這些文件。

           #CacheNegotiatedDocs

指定Proxy服務器是否將交互產生的文件存在Cache中。將該命令註釋掉則是不指定。

           UseCanonicalName On

設置是否使用標準的名稱,默認是On。

           TypeConfig /etc/mime.types

指定存放MIME文件類型的文件。

           Default Type text/plain

若是Apache不能識別此文件類型時,則按照預設的格式顯示,通常以文本文件顯示。

           <IfModule mod_mine_magic.c>

MIMEMagicFile conf/magic

</ifModule>

mod_mime_magic模塊可讓Apache由文件內容決定其MIME類型。若是存在該模塊,纔會處理MIMEMagicFile這一段。上面3行是當沒有該模塊時就處理這一段。

           HostnameLookups off

設置Apache是否向名稱服務器解析該IP地址,記錄此連接的名稱(如Hacker.com.cn)。由於DNS解析要花必定時間,因此默認設爲off,僅記錄IP。

           ErrorLog /var/log/httpd/error_log

指定Apache發生錯誤時記錄文件的位置。若是在<VirtualHost>中沒有指定記錄文件,則用/var/log/httpd/error_log,不然使用<VirtualHost>指定的文件。

           LogLevel warn

指定記錄的詳細等級,有8個等級:debug、info、notice、warn、error、crit、alert和emerg。按從詳細到簡略排列。

           LogFormat "%h %l %u %t\"%r"\"%>s%b\"{Referer}I"\"%{UserAgent}I\""combind

Logformat"%h%l%u%t\"%r"\"%>s%b"common

Logformat "%{Referer}I->%U"referer

LogFormat"%{User-agent}I"agint

定義4種格式的別名:combind、commen、referer和agint。

           #CustomLog /var/log/httpd/access_log common

CustomLog /var/log.httpd/access_log combind

指定記錄文件使用哪一種自定義的格式。其餘不使用的自定義格式將被註釋掉。

以上是關於日誌文件的,將在後面的Apache日誌文件中詳細敘述。

           ServerSignature On

設爲On,當Apache產生錯誤時,就在網頁上顯示Apache的版本信息、主機名稱、端口等一行信息。設爲Off,就不顯示相關的信息。設爲E-mail時,就有「mailto:」給管理員的超連接。

           Alias/icons /"var/www/icons/"

使用較短的別名,其格式爲:Alias 別名 原名。能夠無限制地創建別名。注意別名的後面若是有「/」,那麼在使用URL時也得有「/」。

           ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

和Alias相似,設置服務器腳本目錄。

應該強制性地使用ScriptAlias命令來限定CGI程序位於某個或者某幾個特定的位置。通常能夠設置多個ScriptAlias。必須保證cgi-bin目錄不在html目錄下,這一點很是重要,這樣能夠防止黑客經過瀏覽它們而查看CGI程序。

           IndexOptions FancyIndexing

以特定的圖形顯示文件清單。

           AddIconByEncoding (CMP, /icons/compressed.gif) x-compress x-gzip

……

DefaultIcon /icons/unknown.gif

指定顯示文件清單時各類文件類型的對應圖形。
4.5.1.3  Virtual Hosts

這部分是設置虛擬主機的。所謂虛擬主機,就是指一臺服務器做爲多域名的Web服務器。ISP常常經過一臺服務器爲其客戶提供Web服務。而客戶一般但願主頁以本身的名字出現,而不是在該ISP的名字後面,由於使用單獨的域名和根網址能夠看起來更正式一些。傳統上,用戶必須本身設立一臺服務器才能達到擁有單獨域名的目的,然而這須要維護一個單獨的服務器。不少小單位缺少足夠的維護能力,更爲合適的方式是租用別人維護的服務器。ISP也沒有必要爲一個機構提供一個單獨的服務器,徹底可使用虛擬主機的能力,使服務器爲多個域名提供Web服務,並且不一樣的服務互不干擾,對外就表現爲多個不一樣的服務器。虛擬主機就是解決這種問題的方案,使客戶的域名實際指向ISP的同一臺服務器。
1.Apache支持虛擬主機的方式

Apache有兩種支持虛擬主機的方式。一是爲每個虛擬主機設置單獨的httpd進程,二是爲全部的主機設置一個單獨的httpd進程。

           爲每個虛擬機設置單獨的httpd進程

在httpd.conf文件的第一部分Global Environment中的BindAddress命令或Listen命令就是用來指定虛擬主機的地址和端口的。

BindAddress命令用來指定單一的地址,可使用域名或IP地址。該命令在httpd.conf文件中只能出現一次。

Listen命令可讓httpd進程監聽多個地址或端口。反覆使用Listen命令就能實現這個要求。

           爲全部的主機設置一個單獨的httpd進程

這是一個經常使用的方法。用戶只要維護一個httpd.conf文件。在此文件的第三部分Virtual Host中,用<VirtualHost></VirtualHost>命令來爲全部的虛擬主機進行配置。有多個虛擬主機就有多個<VirtualHost>段。在不一樣的虛擬主機的<VirtualHost>段中能夠指定不一樣的ServerAdmin、ServerName、DocumentRoot、ErrorLog和TransferLog。
2.虛擬主機的實現方式

虛擬主機有三種實現方式:以主機名稱的方式虛擬、以IP的方式虛擬、以端口的方式虛擬。下面就舉一個在httpd.conf的第三部分Virtual Host中實現上面說起的方式的例子。

           以主機名稱的方式虛擬

若是用戶的一臺服務器有多個域名,Virtual Host文件舉例以下:

NameVirtualHost 210.12.195.6

<VirtualHost hacker.con.cn>

ServerAdmin bright@hacker.com.cn

DocumentRoot /var/www/html/hacker

ServerName hacker.com.cn

</VirtualHost>

<VirtualHost pcfrient.com.cn>

ServerAdmin admin@pcfrient.com.cn

DocumentRoot /var/www/html/pcfrient

Servername pcfrient.com.cn

</VirtualHost>

           以IP的方式虛擬

註冊域名是要花一筆費用的。解決方案是能夠用IP的方式來虛擬。在Linux中能夠爲一個網卡捆綁兩個IP地址。如服務器的地址是210.12.195.6,如今有一個IP地址210.12.195.9沒有使用。將210.12.195.9捆綁到服務器的網卡中,執行下列命令:

#ifconfig eth0:0 210.12.195.9

這樣,服務器就有兩個IP地址了。以IP的方式虛擬和以主機名稱的方式虛擬相似,請看下面的例子:

NameVirtualHost 210.12.195.6

<VirtualHost 210.12.192.6>

ServerAdmin bright@hacker.com.cn

DocumentRoot /var/www/html/hacker

</VirtualHost>

<VirtualHost 210.12.192.9>

ServerAdmin bright@hacker.com.cn

DocumentRoot /var/www/html/pcfrient

</VirtualHost>

以IP的方式虛擬不用NameVirtualHost命令。

           以主機名稱和IP的方式虛擬

就是上面的兩個方式的結合。看下面的例子:

NameVirtualHost 210.12.195.6

<VirtualHost hacker.con.cn>

ServerAdmin bright@hacker.com.cn

DocumentRoot /var/www/html/hacker

ServerName hacker.com.cn

</VirtualHost>

<VirtualHost 210.12.195.6>

ServerAdmin bright@hacker.com.cn

DocumentRoot /var/www/html/pcfrient

</VirtualHost>

           以端口的方式虛擬

http默認的端口是80,若是用戶要開設另外一個端口443做爲另外一個虛擬主機,舉例以下:

Listen 80

Listen 443

<VirtualHost 210.12.192.6:80>

ServerAdmin bright@hacker.com.cn

DocumentRoot /var/www/html/hacker

</VirtualHost>

<VirtualHost 210.12.195.6:443>

ServerAdmin suying@hacker.com.cn

DocumentRoot /var/www/html/pcfrient

</VirtualHost>

           以不一樣的IP和端口的方式虛擬

該方式是以IP的方式虛擬和以端口的方式虛擬的結合。假設服務器捆綁了兩個IP地址,210.12.192.6和210.12.195.9,後面的IP地址用端口443。舉例以下:

Listen 210.12.192.6:80

Listen 210.12.195.9:443

<VirtualHost 210.12.192.6:80>

ServerAdmin bright@hacker.com.cn

DocumentRoot /var/www/html/hacker

</VirtualHost>

<VirtualHost 210.12.195.9:443>

ServerAdmin suying@hacker.com.cn

DocumentRoot /var/www/html/pcfrient

</VirtualHost>



|----------------------------------------------------------------------------------------|
                           版權聲明  版權全部 @zhyiwww
            引用請註明來源 http://www.blogjava.net/zhyiwww    
|----------------------------------------------------------------------------------------|php

posted on 2006-10-25 16:59 zhyiwww 閱讀(8213) 評論(0)  編輯  收藏 所屬分類: softwarehtml

相關文章
相關標籤/搜索