Apache配置

根據著名的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是主配置文件。它告訴服務器將如何運行。

  一、最重要的配置選項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,以上工作在安裝時就已經代你完成了。


  二、其它配置選項

    Server Admin命令,用來設置WEB管理員的E-Mail地址。這個地址會出現在
  系統連接出錯的時候,以便訪問者能夠將情況及時地告知WEB管理員。

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

  例:Server Admin [email protected]

  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

  五、爲用戶開闢個人主頁空間


  如果我們利用了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 [email protected]

  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 [email protected]

  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 [email protected]

  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
  的日誌來實現這個偉大的願望。

  一、盯着Apache服務器

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


  1.觀看配置信息


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

  2.使用狀態頁

  如果你的Apache象缺省配置一樣加入了mod_status模塊的話,你就可以

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

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

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

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

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

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

  ¨ 服務請求的子進程數;

  ¨ 空閒子進程數;

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

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

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

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


  二、什麼是日誌文件


  日誌文件是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頭標外,返回給客戶端的字節數。


  三、分析日誌文件


  有了日誌文件後,我們可以利用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。


  四、一些提示

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

  Apache與代理服務器

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

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

  Apache可以配置成爲代理服務器。


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

  1.前向代理服務器

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

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

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

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

  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


  不行,這不是我想要找的,我要再搜一搜聲明:本站部分文章收集於網絡,僅
  供個人學習之用,絕無任何商業目的;
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章