HTTPD - Apache2 Web Server

文章來源於:https://help.ubuntu.com/10.04/serverguide/httpd.html     (能力有限,如果翻譯不給力,希望留言指出以做修改。)


           Apache 通常而且普遍的用在linux 系統上作爲web 服務器。web服務器是用來服務來自客戶端電腦的網頁請求。客戶通常的請求,看網頁使用網頁瀏覽器,比如是:Firefox,Opera,或者Mozilla。

           用戶進入統一資源定位符(URL)來指向一個web服務器,藉助於全限定字符(FQDN)和一個需求資源的路徑。例如,要看Ubuntu Web site的主頁,一個用戶將會只鍵入全限定字符。來請求指定有關付費支持的信息,一個用戶將會通過一個路徑,來查看的。

           最常用的用來傳輸網頁的協議是超文本傳輸協議(HTTP)。像在安全接口層(HTTPS)之上的超文本協議,文件傳輸協議(FTP),它是用來上傳和下載文件的協議,這樣的協議都被支持的。

          Apache web 服務器經常跟MySQL數據引擎,超文本預處理腳本語言(PHP),和其他流行的腳本語言如Python和Perl一起聯合起來用。這樣配置起來被稱爲LAMP(linux,Apache ,MySQL,和Perl/Python/PHP)和爲開發和基於web應用的部署提供了一個強大並且強有力的平臺。

          安裝:

這個Apache2 web 服務器在Ubuntu linux 系統上是可用的。來安轉Apache2:

          在一個終端窗口鍵入如下命令行:

                sudo  apt-get install   apache2

          配置:

Apache2 的配置是通過純文本配置文件中被放置的指令。這些需要指令被下面的文件和目錄分開來了:

           apache2.conf : 這個是Apache2的主要配置文件。包含了對於Apache2的全局設置。

           conf.d :包含配置文件,它們全局地應用到Apache2.其他軟件包使用apache 2服務內容可以添加文件,或符號,到這個目錄。

           envvars : Apache2 環境變量被設置的地方。

           httpd.conf : 歷史上的主要配置文件,在httpd守護進程之後命名。這個文件能夠被用戶指定特殊配置選項來全局影響Apache2.

           mods-available : 這個目錄包含了加載模塊和配置模塊的配置文件。 然而,不是所有的模塊都有特殊的配置文件。

           mods-enabled :保持了在/etc/apache2/mods-available 下文件的符號鏈接。 當一個模塊的配置文件被符號鏈接了,它將會在下一次apache2重啓的時候生效。

           ports.conf : 指示決定了Apache2正在監聽的TCP 端口。

          sites-available: 這個目錄有對於Apache2 虛擬主機的配置文件。虛擬主機允許爲Apache2配置多個站點, 通過區分的配置來配置。

          site-enabled: 像mods-enabled ,sites-enabled 包含了在 /etc/apache2/sites-available目錄下的符號鏈接。類似的,當用一個在sites-available中的配置文件被符號鏈接,這個站點配置將會在Apache2重啓過後生效。

           此外,其他的配置文件可能使用包含命令被加載進來,而且通配符能夠被包含到配置文件中使用。任何命令可能被放置到這些任何配置文件中。當Apache2開啓或者重啓的時候,它只識別主配置文件中的改變。

           服務器同樣會讀包含文檔類型的一個文件;這個文件名可以通過TypesConfig 命令來設置,默認它是 /etc/mime.types 。

這個部分來說明Apache2服務器基本的配置參數。想要了解更多的請參考Apache2 文檔。

           Apache2 運行通過一個友好的虛擬主機的默認配置。就是,它通過一個簡單的默認虛擬主機被配置(使用VirtualHost 指令)它能夠被更改或者使用,就像你有一個簡單的站點,或者當作一個作爲你有多個站點的額外的虛擬主機。如果你什麼都不做,默認虛擬主機將會作爲你默認的站點,或者是用戶能夠看到的,當它們鍵入的URL不是匹配ServerName 指定的任何你自定義的站點,要修改默認虛擬主機,編輯文件 /etc/apache2/sites-available/default。

             提示: 爲一個虛擬主機設置的指令,應用於特殊的虛擬主機。如果一個指令被設置服務器而沒有通過虛擬主機的設置來定義,默認的設置就會被使用。舉例,如果你能夠定義一個網站管理員郵件地址,而沒有爲每個虛擬主機定義個人的郵件地址。

            如果你想配置一個新的虛擬主機或站點,複製那個文件到同樣的目錄用你選擇的姓名。例如:

sudo cp  /etc/apache2/sites-available/default   /etc/apache2/sites-available/mynewsite

             編輯新文件來配置新站點通過使用一些下面描訴的命令。

             ServerAdmin 命令是爲提示給服務器管理員所指定的 郵箱。這個默認的值是 webmaster@localhost 。這個應該被修改爲發送給你的一個郵箱地址(如果你是這個服務器管理員)。如果你服務器有一個問題,Apache2將會顯示一個錯誤信息報告這個問題到這個郵箱地址。可以在/etc/apache2/sites-available你的站點配置文件中找到這些指令。

             Listen 指令是指定端口,和可選的IP地址,Apache2應該監聽的。如果IP地址沒有指定。Apache2 將會監聽所有分配給運行機器的ip地址。默認Listen指令的值是80.

改變這個爲127.0.0.1:80 就會導致Apache2智慧監聽你的環回接口。這樣它對於internet就不可用,可以改變爲81來改變它的監聽端口,或者什麼都不管讓它自然工作。這個指令可以在/etc/apache2/ports.conf 中找到或者被修改。

            ServerName 指令是可選的,可指定什麼FQDN你的站點應該回應。默認虛擬主機沒有指定的ServerName 指令,因此它會迴應所有在另一個虛擬主機中沒有匹配到的ServerName指令。如果你已經得到了ubunturocks.com的域名並且希望在你Ubuntu服務器中利用它,那麼在你的虛擬主機配置文件中的ServerName指令的值就應該是ubunturocks.com 。 加入這個指令到你開始建立的虛擬主機中(/etc/apache2/sites-available/mynewsite)。

             你可能像讓你站點回應www.ubunturocks.com ,因爲很多使用認爲www的前綴更合適。可以使用ServerAlias 指令。你同樣可能會使用通配符在ServerAlias指令中。

            例如,如下的配置將會讓你的站點回應任何以.ubunturocks.com的站點請求。

             ServerAlias     *.ubunturocks.com

          DocumentRoot 指令指定了Apache2應該要查找構成站點文件的位置。默認值是 /var/www 。沒有站點被配置那兒,但是你可以註釋RedirectMatch 指令它在/etc/apache2/apache2.conf 的請求,將會重定向到 /var/www/apache2-default ,這個是默認Apache2站點等待的地方。改變這個值在你虛擬主機文件中,並且記住如果需要創建站點目錄。

            /etc/apache2/sites-available 目錄沒有被Apache2 分析,在/etc/apache2/sites-enabled 的符號鏈接指向 “available” 站點。

           使新虛擬主機有效,可以使用a2ensite 功能 並重啓Apache2 :

           sudo   a2ensite mynewsite

           sudo    /etc/init.d/apache2   restart

           主要:確定爲虛擬主機更改了一個描述性的名字來替代mynewsite。 一個方法就是在 虛擬主機ServerName指令後面命名這個文件。

類似的,使用a2dissite 功能來使站點失效。這個在多個虛擬主機的配置問題,解決故障的時候會非常有用:

           sudo  a2dissite  mynewsite

           sudo  /etc/init.d/apache2   restart

默認設置

這個部分解釋了Apache2服務器的默認設置配置。例如,如果你加入了一個虛擬主機,你爲這虛擬主機設置的配置優先於那個虛擬主機。在虛擬主機內沒有定義的一個指令,默認值就會被使用。

                DirectoryIndex 是當一個用戶請求一個目錄的索引,通過指定在目錄名的後面加上一個正斜槓,這個就成爲服務器傳送的默認頁。

 例如,當有一個用戶請求頁 http://www.example.com/this_directory/,他或者她就會得到DirectoryIndex 如果它存在,如果不存在,並且index選項被指定,就產生一個服務器的目錄別表,或者一個允許拒絕頁,二者之一都是對的。服務器將會嘗試在DirectoryIndex 指令中列出的文件中的一個,並返回它找到的第一個。如果它沒有找到任何這些文件中的任何一個並且這個index爲了那個目錄設置了,服務器將會產生並返回一個列表,以HTML的格式,包含了這些目錄的子目錄和文件。這個默認的值,可以在/etc/apache2/mods-available/dir.conf 就是“index.html  index.cgi  index.pl  index.php index.xhtml index.htm ”. 因此,如果Apache2 在一個請求的目錄中匹配到任何這些名字中的一個文件,第一個將會被顯示。

               ErrorDocument 指令允許你爲Apache2指定一個文件來處理特殊的錯誤事件。例如,如果一個用戶請求一個並不存在的資源,一個404錯誤將會發生,並且依照Apache2的默認配置,文件/usr/share/apache2/error/HTTP_NOT_FOUND.html.var 將會被顯示。 那個文件不在服務器DocumentRoot裏面,但是有一個Alias指令在/etc/apache2/apache2.conf 可以重定向請求/error目錄到/usr/share/apache2/error/。

看默認ErrorDocument指令的一個默認列表,使用這個命令:

                grep  ErrorDocument   /etc/apache2/apache2.conf

默認,服務器寫傳輸日誌到文件/var/log/apache2/access.log 。你可以改變這個通過在你虛擬主機配置文件中使用CustomLog 指令,或者省略它接受默認,被指定在/etc/apache2/apache2.conf 。你同樣可以指定文件什麼錯誤被記錄,通過ErrorLog 指令,它的默認是/var/log/apache2/error.log 。這些傳輸日誌是被分開於解決Apache2服務器問題的幫助的。你同樣可以指定LogLevel(默認是“warn”),LogFormat (看/etc/apache2/apache2.conf 中的默認值)。

                一些選項被指定在每個基本目錄上,而不是每個服務器。選項是這些指令的其中一個。一個Directory 節被關閉如XML 標籤;像這樣:

 <Directory  /var/www/mynewsite>

.......

</Directory>


這個帶有Directory 節的選項指令接受一個或者更多的下面值(在其他之中),被空格區分:

              ExecCGI  允許CGI 腳本執行。 如果這個選項沒有選擇,CGI腳本就不會被執行。

             大多數文件不應該作爲CGI腳本執行。這樣將會是非常危險的。CGI腳本應該放在你DocumentRoot 目錄外面的一個目錄,並且僅僅這個目錄有ExecCGi選項的設置。這個是默認的,並且默認的CGI腳本是在/usr/lib/cgi-bin 。

             Includes   允許服務器端包含。服務器端包含允許一個HTML文件去包含其他的文件。這不是一個普通的選項。瞭解更多信息去看the Apache2 SSI HOWTO。

             IncludesNOEXEC   允許服務器端包含,但是使在 CGI 腳本中 #exec 和 #include 命令失效。

                                 爲了安全因素,這些經常不會被設置,而且確定不應該被設置在你的DocumentRoot 目錄中。使小心地使這個選項有效在一個每個基本目錄,僅當你確定你想用戶看你全部的文件夾內容。

             Multview   支持協商內容的多重查看。這個選項爲了安全因素默認是失效的。看Apache2 documentation  on this option 。

            SymLinksifOwnerMatch   僅僅遵循符號鏈接,如果目標文件或者目錄跟這個鏈接有着同樣的擁有者。


httpd 設置:

這個部分說明一些基本 httpd 守護進程的配置設置。

          LockFile  這個LockFile 指令設置這個路徑給服務器用 USE_FCNTL_SERIALIZED_ACCEPT 或者USE_FLOCK_SERIALIZED_ACCEPT 選項編譯的鎖文件。它應該被存在本地磁盤上,它應該以默認值除非日誌目錄定位在一個NFS共享上。如果是這個情況,默認值應該被改到本地磁盤的一個位置而且一個只能被root讀的目錄。

         PidFile   這個PidFile 指令設置在服務器記錄它的進程ID(Pid)的文件。這個文件應該只能夠被root讀取。在大部分情況下,它應該被設爲默認值。

         User    這個User 指令設置服務器迴應請求使用的用戶ID。這個設置決定了服務器的進入。任何對這個用戶不可達的文件將會同樣對你網站拜訪者不可進入。爲User的默認值是www-data。

         警告:除非你確實知道你正在做什麼,不要設置User 指令給root 。使用root 作爲User 將會給你的web服務器帶來大的安全漏洞。

        Group 指令更User 指令相似。Group 設置服務器回答請求下的組。這個默認值同樣是www-data。

Apache2 模塊:

Apache2 是一個模塊服務。這表明,僅僅大部分基本功能被包含在內核服務中。擴展的特性是通過可被加載到Apache2中的模塊使變得可用的。默認,一個基本的模塊設置在編譯時就被包含了進這個服務了。如果服務是使用動態加載模塊方式被編譯的,模塊就能夠被獨立地編譯,而且可在任何時間使用LoadModule 指令被添加。否則,Apache2一定會重新編譯添加或者移除模塊。

               Ubuntu 編譯Apache2 允許動態模塊的加載。配置指令可能有條件的被包含進一個特定的模塊,用<IfModule>塊來圍住它們。

你能夠安裝額外的Apache2模塊並使用它們在你的web 服務器中。例如,運行下面命令在一個終端中來安轉MySQL授權的模塊:

            sudo apt-get install  libapache2-mod-auth-mysql

看/etc/apache2/mods-available目錄,看附加的模塊。

使用a2enmod 功能使得一個模塊生效:

           sudo  a2enmod auth_mysql

           sudo   /etc/init.d/apache2  restart

類似地,a2dismod 將會使一個模塊失效:

           sudo  a2dismod  auth_mysql

           sudo   /etc/init.d/apache2  restart

HTTPS 配置

mod_ssl 模塊爲Apache2 服務器增加了一個重要的特性---能夠保密的通信。因此,當你的瀏覽器正在使用SSL 通信,在導航欄中的URL的開頭就會是以https://作爲前綴。

mod_ssl 模塊在 apache2-common包中是可用的。執行下面的命令行在一個終端提示中使mod_ssl模塊生效:

             sudo  a2enmod ssl

有一個默認的HTTPS配置文件在/etc/apache2/sites-available/default-ssl 。爲了讓Apache2提供HTTPS,一個證書和密鑰同樣是需要的。默認的HTTPS配置將會使用一個由ssl-cert包產生的證書和一個密鑰。它們作測試很好,但是自動產生的證書和密鑰應該被一個站點或服務器的證書替代。要知道產生一個密鑰並獲得一個證書看the section called “Certificates” 。

爲HTTPS配置Apache2 ,鍵入如下:

        sudo  a2ensite default-ssl

目錄/etc/ssl/certs 和/etc/ssl/private 都是默認的路徑,如果你安裝證書和密鑰在另一個目錄中,請確保適當地改變了SSLCertificateFile 和 SSLCcertificateKeyFile 。

伴隨着Apache2的HTTPS的配置,重啓服務使得新設置生效:

         sudo  /etc/init.d/apache2  restart

        當Apache2啓動的時候,你需要鍵入的密碼依賴於你如何獲得證書的。

你可以通過在瀏覽器地址欄中鍵入 https://your_hostname/url/ 來查看你的安全服務頁。

參考:

         Apache2 Documentation 包含了Apache2 配置指令更深入的信息。同樣看apache2-doc 包來查看官方Apache2文檔。

        想要了解更多SSL相關的信息,請看Mod SSL Documentation 站點。

        O‘Reilly 的Apache Cookbook對於爲了達到Apache2的具體配置是一個很好的資源。

        對於Ubuntu中的Apache2的具體問題,詢問freenode.net 上#ubuntu-server IRC 頻道

        經常整合PHP和MySQL 的使用,Apache MySQL  PHP Ubuntu Wiki 頁是一個很好的資源。

  

           




            



               






           


          

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章