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是主配置文件。它告訴服務器將如何運行。 ? ? 一、最重要的配置選項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 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>結束的。這表示在其中間的部分都是針對指定目錄 ? ��"/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 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 ? 的日志來實現這個偉大的愿望。 ? ? 一、盯著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��客戶端主機的全稱域名或IP地址; ? ? ¨ ident��存放客戶端報告的識別信息; ? ? ¨ authuser��如果是基于用戶名認證的話,值為用戶名; ? ? ¨ date��請求的日期與時間; ? ? ¨ request��客戶端的請求行; ? ? ¨ status��返回到客戶端的三們數字的HTTP狀態碼; ? ? ¨ bytes��除去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 ? ? ? 不行,這不是我想要找的,我要再搜一搜聲明:本站部分文章收集于網絡,僅 ? 供個人學習之用,絕無任何商業目的; 本節將針對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> <hr< div="">| Updated: ? 2006-04-29 | Home ? / Index | ? |
|----------------------------------------------------------------------------------------|
版權聲明 版權所有 @zhyiwww
引用請注明來源 http://www.blogjava.net/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2006-10-25 16:59 zhyiwww 閱讀(3588) 評論(0) 編輯 收藏 所屬分類: software
?
轉載于:https://www.cnblogs.com/lzhitian/archive/2012/08/14/2637538.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Apache配置(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: security with acl
- 下一篇: Oracle Acs资深顾问罗敏 老罗技