轉自:http://book.51cto.com/art/201108/282390.htm
?
1.Apache安裝
? (1)使用RPM方式安裝Apache使用如下命令。
rpm -ivh apr-1.2.7-11.i386.rpm rpm -ivh postgresql-libs-8.1.11-1.el5_1.1.i386.rpm rpm -ivh apr-util-1.2.7-7.el5.i386.rpm rpm -ivh apr-util-ldap-1.3.9-3.el6.x86_64.rpm rpm -ivh httpd-tools-2.2.15-5.el6.x86_64.rpm rpm -ivh httpd-2.2.3-11.el5_1.3.i386.rpm
? (2) 使用YUM方式,可直接使用如下命令安裝。
?
yum -y install httpd.i*
?
2. 8.4 Apache服務配置
在Apache服務安裝完成后,需要修改Apache服務配置文件以滿足使用需求。
8.4.1? 常規配置(1)
1.Apache服務啟動、暫停
Apache屬于System V服務,其啟動、暫停相關命令如下。
- service?httpd?start?????#啟動 ?
- service?httpd?stop??????#停止 ?
- service?httpd?restart???????#重新啟動 ?
- service?httpd?reload????#重新加載 ?
- service?httpd?status????#查看當前啟動狀態 ?
?
2.Apache服務自動加載
設置Apache服務下一次開機運行狀態可通過以下命令或使用ntsysv命令在服務設置界面中配置,如圖8-2所示。
- chkconfig?httpd?on??????????????????#在運行級別2、3、4、5上設置為自動運行。 ?
- chkconfig?httpd?off?????????????????#在運行級別2、3、4、5上設置為不自動運行。 ?
- chkconfig?httpd?--level?35?on???????#在運行級別3、5上設置為自動運行。 ?
- chkconfig?httpd?--level?35?off??????#在運行級別3、5上設置為不自動運行。 ?
![]() |
圖8-2? ntsysv命令配置服務 |
3.修改SELinux狀態
在Apache服務器中并不是所有的操作都會受到SELinux的影響,下面列出的是所有與Apache服務器有關的SELinux配置。
- setsebool?-P?httpd_enable_cgi?1?????????????????????① ?
- chcon?-t?-R?httpd_sys_script_exec_t?/var/www/cgi????????② ?
- setsebool?-P?httpd_enable_homedirs?1????????????????????③ ?
- setsebool?-P?httpd_tty_comm?1???????????????????????④ ?
- setsebool?-P?httpd_unified?0????????????????????????????⑤ ?
- setsebool?-P?httpd_builtin_scripting?0??????????????????⑥ ?
- setsebool?-P?httpd_can_network_connect?1????????????⑦ ?
- setsebool?-P?httpd_suexec_disable_trans?1???????????⑧ ?
- setsebool?-P?httpd_disable_trans?1??????????????????????⑨ ?
- semanage?port?-a?-t?http_port_t?-p?tcp?81???????????⑩ ?
其中各行含義如下。
①:允許Apache執行CGI程序。
②:修改CGI文件的安全上下文件。
③:允許Apache訪問用戶家目錄。
④:允許Apache訪問終端。
⑤:取消Apache訪問文件的安全上下文檢查。
⑥:取消SELinux對腳本程序的限制。
⑦:允許通過網絡連接到httpd服務。
⑧:允許Apache使用su進行身份切換。
⑨:取消SELinux對Apache的限制。
⑩:允許Apache偵聽81端口的HTTP請求(修改了Apache的偵聽端口)。
除了上述SELinux配置外,推薦使用如下命令修改網頁文件的安全上下文(并不是所有的網頁文件都會因為安全上下文而受到SELinux的限制)。
- #/var/site/bbs.example.com為網頁文件存放目錄。 ?
- chcon?-R?-t?httpd_sys_content_t??/var/site/bbs.example.com ?
4.配置文件結構
Apache服務配置文件有以下幾個共性。
(1)以"#"開始的是注釋行(在執行時將被忽略)。
(2)關鍵字對大小寫不敏感。
(3)大多數參數都使用"參數 值"的方式配置。
(4)大多數參數在有多個值時,使用空格分隔。
主配置文件/etc/httpd/conf/httpd.conf由以下3部分組成(在本章的配置中如無特殊說明,所有參數的修改均指該配置文件)。
?
8.4.1? 常規配置(2)
(1)Global Environment:全局配置(如圖8-3所示)。該部分參數主要對Apache運行環境及狀態進行設置。
![]() |
(點擊查看大圖)圖8-3? Global Environment |
![]() |
圖8-4? Main server configuration |
![]() |
圖8-5? Virtual Hosts |
- Include?conf.d/*.conf?
有很多Apache的模塊在安裝后會自動在/etc/httpd/conf.d中創建一個配置文件將模塊載入,如果在安裝了模塊后,又不想使用該模塊時,可以將/etc/httpd/conf.d對應的配置文件改一個名字即可(改后的名字不能以.conf結尾)。使用如下命令查看Apache已載入的模塊,如圖8-6所示。
?
- httpd?-M?
?
![]() |
圖8-6? httpd -M |
在Apache中可通過容器Direcotry、File、Location對配置(參數位于"Main server configuration"部分)或某個虛擬主機進行顆粒化的控制。最常用的容器是文件系統和網絡空間。
(1)文件系統容器使用以下格式。在定義目錄或文件時可以使用通配符("*"匹配任何字符串,"?"匹配任何單個的字符)或正規表達式。
- < Directory ?目錄 > ?
- ?????參數 ?
- </ Directory > ?
- < Files ?文件 > ?
- ?????參數 ?
- </ Files > ?
- < DirectoryMatch ?目錄正規表達式 > ?
- ?????參數 ?
- </ DirectoryMatch > ?
- < FilesMatch ?文件正規表達式 > ?
- ?????參數 ?
- </ FilesMatch > ?
(2)網絡空間使用以下格式。在定義目錄或文件時可以使用通配符("*"匹配任何字符串,"?"匹配任何單個的字符)或正規表達式。
- < Location ?路徑 > ?
- ?????參數 ?
- </ Location > ?
- < LocationMatch ?路徑正規表達式 > ?
- ?????參數 ?
- </ LocationMatch > ?
?
?
8.4.1? 常規配置(3)
下面看幾個使用容器的例子(例子中其他參數后述內容中講解,這里只說明容器的使用方式)。
(1)對/var/site/bbs.example.com目錄進行訪問控制。
- < Directory ?/var/site/bbs.example.com > ?
- ?????Order?Allow,Deny ?
- ?????Allow?From?All ?
- ?????Deny?From?192.168.0.0/24 ?
- </ Directory > ?
(2)對/var/site/bbs.example.com/account.html進行訪問控制。
- < Files ?/var/site/bbs.example.com/account.html > ?
- ?????Order?Allow,Deny ?
- ?????Allow?From?All ?
- ?????Deny?From?192.168.0.0/24 ?
- </ Files > ?
(3)對/var/site/bbs.example.com目錄和該目錄下的account.html實現不同的訪問控制。
- < Directory ?/var/site/bbs.example.com > ?
- ?????Order?Allow,Deny ?
- ?????Allow?From?All ?
- ?????Deny?From?192.168.0.0/24 ?
- ????? < Files ?account.html > ?
- ?????????Order?Allow,Deny ?
- ?????????Allow?From?All ?
- ?????????Deny?From?192.168.0.23 ?
- ????? </ Files > ?
- </ Directory > ?
(4)使用通配符對/var/site目錄下所有以.example.com結尾的目錄進行訪問控制。
- < Directory ?/var/site/*.example.com > ?
- ?????Order?Allow,Deny ?
- ?????Allow?From?All ?
- ?????Deny?From?192.168.0.0/24 ?
- </ Directory > ?
(5)使用正規表達式對Word、 Excel及mp3文件進行訪問控制。
- < FilesMatch ?\.(?i:doc?x|xls?x|mp3)$ > ?
- ?????Order?Allow,Deny ?
- ?????Allow?From?All ?
- ?????Deny?From?192.168.0.0/24 ?
- </ FilesMatch > ?
(6)對網站根目錄進行訪問控制。
- < Location ? /> ?
- ?????Order?Allow,Deny ?
- ?????Allow?From?All ?
- ?????Deny?From?192.168.0.0/24 ?
- </ Location > ?
(7)對網站中admin目錄下的所有html文件進行訪問控制。
- < Location ?/admin/*.html > ?
- ?????Order?Allow,Deny ?
- ?????Allow?From?All ?
- ?????Deny?From?192.168.0.0/24 ?
- </ Location > ?
5.語法檢查
在每次修改完Apache配置文件后,可通過httpd -t檢查配置文件是否正確。如果在配置文件中有錯誤httpd -t會顯示出錯誤的內容及行數等信息,如圖8-7所示。
![]() |
圖8-7? httpd -t |
6.初始配置
(1)ServerName。配置服務器用于識別自己的主機名和端口。當未指定ServerName時,Apache會嘗試對IP地址進行反向解析來推斷FQDN。推薦使用ServerName指定一個FQDN及端口。在下面的例子配置Apache的FQDN(可以是A記錄,也可以是CNAME別名)為 www.example.com 。
- ServerName?www.example.com:80?
(2)ServerAdmin。配置Apache中返回的錯誤信息中所包含的管理員郵箱。在下面的例子配置管理員的郵箱為 tonyzhang@example.com 。
- ServerAdmin?tonyzhang@example.com?
(3)ServerSignature。配置Apache生成文檔的頁腳。該參數可指定為Off表示不生成任何頁腳,On表示生成ServerTokens參數配置的值。E-Mail生成ServerTokens參數配置的值的同時,使用ServerAdmin的值在服務器IP地址上增加一個mailto:的鏈接,如圖8-8所示。在RHEL 5.x默認為On。
?
![]() |
圖8-8? E-Mail |
?
Prod:返回Apache的產品名稱,如圖8-9所示。
Major:返回Apache主版本號,如圖8-10所示。
![]() |
圖8-9? Prod |
![]() |
圖8-10? Major |
8.4.1? 常規配置(4)
Minor:返回Apache主版本號及次版本號,如圖8-11所示。
Min:返回Apache主版本號、次版本號、編譯版本號,如圖8-12所示。
OS:返回Apache主版本號、次版本號、編譯版本號、操作系統,如圖8-13所示。
Full:返回最詳細的信息,如圖8-14所示。
![]() |
圖8-11? Minor |
![]() |
圖8-12? Min |
![]() |
圖8-13? OS |
![]() |
圖8-14? Full |
7.默認網站配置
如果希望以最簡單的方式配置一個網站,只需要將網站內容放入參數DirectoryRoot所指定的目錄中(在RHEL 5.x中該參數默認值為/var/www/html)并保證網站所有內容User參數所指定的用戶(在RHEL 5.x中該參數默認值為apache)至少是有讀和執行的權限即可。
8.默認首頁配置
當客戶端訪問Web服務器時,如果沒有指定所訪問頁面時,Apache將根據DirectoryIndex參數的設置在目錄查找相應頁面顯示。如下面的例子中Apache將嘗試查找客戶端所指定顯示的目錄中是否有名為index.html、index.html.var、default.html其中之一的文件,如果有則顯示其內容,如果沒有默認情況顯示目錄中所有內容(如果目錄中存在多個DirectoryIndex參數所指定文件,則根據順序顯示第一個指定文件)。
- DirectoryIndex?index.html?index.html.var?default.html?
9.目錄瀏覽配置
如果客戶端訪問的目錄中沒有DirectoryIndex參數定義的頁面時,默認情況顯示目錄中所有內容,如圖8-15所示。對于大多數企業網站來說并不需要這樣的功能,可以將Options參數(默認在/etc/httpd/conf/httpd.conf中320行左右,如圖8-16所示)中Indexes值刪除禁止使用這樣的目錄瀏覽功能。
![]() |
圖8-15? 目錄瀏覽 |
![]() |
圖8-16? Option |
10.偵聽IP及端口配置
Apache在默認情況下,會偵聽本機所有IP地址的80端口,如圖8-17所示。可通過修改Listen參數改變偵聽的IP或端口。Listen參數語法如下。
- Listen?[IP地址]:端口?
?
![]() |
圖8-17? 偵聽IP及端口 |
?
8.4.1? 常規配置(5)
在配置Listen參數時至少需要端口,如不指定IP地址,默認為本機IP地址。可以指定多個Listen參數指定偵聽本機的某幾個IP地址的端口。在下面的例子中盡管本機有兩個IP地址指定但Apache處理192.168.0.10的80端口收到的客戶端請求,如圖8-18所示。
- Listen?192.168.0.10:80?
?
![]() |
(點擊查看大圖)圖8-18? Listen |
11.超時配置
Apache超時設置一般是通過Timeout(單位:秒,在RHEL 5.x默認為120)參數設置,但影響Apache超時的參數還有以下幾個。
(1)KeepAlive:是否支持持久連接(在RHEL 5.x默認為off)。KeepAlive 參數決定當處理完客戶發起的HTTP請求后是否立即關閉TCP連接,如果KeepAlive 設置為On,那么用戶完成一次訪問后,不會立即斷開連接,當后繼有請求時,會繼續在這一次TCP連接中完成,而不用重復建立新的TCP連接和關閉TCP連接,這樣可以提高用戶訪問速度。如果使用了代理服務器推薦配置為on。
(2)MaxKeepAliveRequests:在持久連接期間,所允許的最大請求數量。指定為0時表示不作限制(在RHEL 5.x默認為100)。
(3)KeepAliveTimeout:在同一個客戶客戶端連接中,下一個請求的等待時間(單位為秒,在RHEL 5.x默認為15)。
KeepAlive參數的設置需要根據實際情況判斷,比如Web服務器內存是否充足、網頁內容是否由動態腳本生成、網頁是否引用大量JavaScript、CSS或類型文件、是否使用代理服務器等等。下面是幾種常見情況下KeepAlive參數的配置方法。
(1)當客戶端瀏覽的網頁,包含多個JavaScript、CSS或其他類似文件,并且這些文件位于同一臺Web服務器時,一般將KeepAlive設置為"on"。
(2)當客戶端瀏覽的網頁,只包含少量JavaScript、CSS或其他類似文件,KeepAlive的設置作用不大。
(3)當客戶端瀏覽的是動態網頁,其內容大多通過動態腳本生成時,一般將KeepAlive設置為"off"。
12.連接配置
Apache提供以下幾個參數用于對連接數量等進行配置。
(1)StartServers:指定啟動Apache時啟動的httpd進程個數(在RHEL 5.x默認為8)。
(2)ServerLimit:指定Apache允許配置同時處理的客戶端請求的最大值。
(3)MaxClients:指定Apache可以同時處理的客戶端請求(在RHEL 5.x默認為256),這是對Apache性能影響最大的參數。如果請求總數已達到這個值,那么下面的請求就要排隊,直到某個已處理請求完畢。可以根據硬件配置和負載情況來動態調整這個值。256也是Apache默認情況最大的值,如果希望配置為大于256時,需要首先將ServerLimit參數的值配置為大于MaxClients的值。
(4)MinSpareThreads:Apache保持的最小空閑線程數(在RHEL 5.x默認為5)。
(5)MaxSpareThreads:Apache保持的最大空閑線程數(在RHEL 5.x默認為20)。如果空閑進程數大于這個值,Apache會自動刪除某些多余進程。這個值一般不要設得過大,但如果設得比MinSpareServers小,Apache會自動把它調整為MinSpareServers+1。
(6)MaxRequestsPerChild:每個子進程被請求服務多少次后被刪除掉。0表示不限制(在RHEL 5.x默認為4000)。
13.字符集配置
如果確定所有的頁面都為GB2312時,可將AddDefaultCharset 參數設置為GB2312。但是如果有一些頁面并不是GB2312時,這樣設置會導致在頁面中字符集設置(在頁面中使用<META http-equiv="Content-Type" content="text/html; charset=gb2312" />)無效,這是因為Apache已經先將GB2312指定為頁面默認的字符集,因此這種情況下最好的解決方法是將AddDefaultCharset 參數設置為Off,并在頁面(對于動態頁面也可以在對應的腳本引擎中設置,如PHP可以在/etc/php.ini通過default_charset參數設置)中設置字符集。
14.單IP并發配置
當在網站中提供了HTTP方式的下載時,目前大多數客戶端在下載時都采用多線程下載工具(如迅雷、超級旋風、網際快車等),這樣會給Web服務器帶來巨大的壓力。解決這類問題也有很多種方式,其中一種就是在Apache中對單個IP的并發數及下載速度進行限制。
單個IP并發數限制可通過mod_limitipconn模塊實現。mod_limitipconn是一個非官方的模塊(mod_limitipconn官方網站: http://dominia.org/djao/limitipconn.html ),使用該模塊后當同一個IP的連接到達限制的時候,Apache對客戶端的Get請求發送"HTTP/1.1 503 Service Temporarily Unavailable"(該模塊并不能阻止DDOS或類似的攻擊)。使用如下命令安裝mod_limitipconn(RPM包下載地址 http://dominia.org/djao/limit/mod_limitipconn-0.23-1.el5.i386.rpm )。
- rpm?-ivh?mod_limitipconn-0.23-1.el5.i386.rpm?
在安裝完成后,會在/etc/httpd/conf.d目錄中建立一個名為limitipconn.conf的配置文件。在該文件中已將limitipconn.so模塊裝載,如圖8-19所示。
![]() |
圖8-19? limitipconn.conf |
8.4.1? 常規配置(6)
mod_limitipconn配置時使用Location指定要限制并發的目錄,MaxConnPerIP指定單個IP最大并發的數量,NoIPLimit指定在Location所指定目錄中不作限制的目錄,OnlyIPLimit指定只限制特定類型的文件(根據MIME內容類型)。在下面的例子中將限制網站的根目錄(但不包括css目錄)及/media目錄(只限制所有視頻文件)的單個IP最大并發數量為5個(但根目錄下mp3目錄不限制)。
- < If ?Module?mod_limitipconn.c > ?
- ???? < Location ? /> ?
- ????????MaxConnPerIP?5 ?
- ????????NoIPLimit?css/* ?
- ???? </ Location > ?
- ???? < Location ?/media > ?
- ????????MaxConnPerIP?5 ?
- ????????OnlyIPLimit?audio/mpeg?video ?
- ???? </ Location > ?
- </ IfModule > ?
?
提示:MIME(Multipurpose Internet Mail Extensions,多用途互聯網郵件擴展)是一個互聯網標準,它擴展了電子郵件標準,使其能夠支持非ASCII字符、二進制格式附件等多種格式的郵件消息。這個標準被定義在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等中。由RFC 822轉變而來的RFC 2822規定電子郵件標準不允許在郵件消息中使用7位ASCII字符集以外的字符。正因如此一些非英語字符消息和二進制文件,圖像,聲音等非文字消息都不能在電子郵件中傳輸。MIME規定了用于表示各種各樣的數據類型的符號化方法。此外在萬維網中使用的HTTP協議中也使用了MIME的框架。
15.下載速度配置
根據來源IP進行帶寬限制可通過bw_mod模塊實現。bw_mod是一個非官方的模塊,使用該模塊后傳輸速度到達限制的時候,Apache斷開與客戶端的連接。bw_mod配置方法如下。
(1)使用如下命令安裝相關軟件包。
- yum?-y?install?httpd-devel.i*?
(2)下載(下載地址: http://www.ivn.cl/files/source/mod_bw-0.8.tgz )源碼包后,使用如下命令解壓。
?
- tar?-xzvf?mod_bw-0.8.tgz?
(3)編譯mod_bw。
- cd?mod_bw ?
- apxs?-cia?mod_bw.c ?
(4)mod_bw在配置時有以下參數。
BandWidthModule [On|Off]:當BandWidthModule On時,才開啟bw_mod的帶寬限制功能。
BandWidth [客戶端來源] [bytes/s]:設置帶寬限制的最大值,如在客戶端來源使用all關鍵字時表示所有訪問Apache的客戶端(客戶端來源表示方法如表8-3所示),當BandWidth值為0,則表示不限制帶寬。
- BandWidth?all?204800????????????????????① ?
- BandWidth?192.168.0.30?102400???????② ?
其中各行含義如下。
①:將所有客戶端最大帶寬限制為200kbit/s。
②:將IP地址為192.168.0.30的客戶端最大帶寬限制為100kbit/s。
MinBandWidth [客戶端來源] [bytes/s]:設置帶寬限制的最大值,如果在客戶端來源使用all關鍵字時表示所有訪問Apache的客戶端,客戶端來源表示方法如表8-3所示。如果只有一個客戶端連接到Apache時,該參數沒有作用,Apache會根據BandWidth的值限制其帶寬,如果有多個客戶端連接到Apache時,Apache會根據MinBandWidth的值限制每個客戶端帶寬,根據BandWidth的值限制總帶寬。當MinBandWidth值為0,則表示每個客戶端帶寬最大為256 bytes/s,當MinBandWidth值為-1時,每個客戶端帶寬最大為BandWidth的值。在下面的例子中將每個客戶端最大帶寬限制為200kbit/s。
表8-3?BandWidth來源
客戶端指定方法 |
示 ???? 例 |
滿足示例的客戶端 |
IP 指定單一主機 |
192.168.0.30 |
客戶端 IP 地址為 192.168.0.30 |
指定網段 |
192.168.0.0/255.255.255.0 |
客戶端所在網段為 192.168.0.0/24 |
指定網段 |
192.168.0.0/24 |
|
域名單一主機 |
client.example.com |
客戶端 FQDN 為 client.example.com |
域名指定范圍 |
.example.com |
客戶端 FQDN 的 DNS 后綴為 example.com |
所有客戶端 |
all |
? |
?
- BandWidth?all?204800 ?
- MinBandWidth?all?-1?
BandWidth u:[User-Agent] [bytes/s]:通過客戶端信息限制帶寬。
- BandWidth?"u:^Mozilla/5(.*)"?102400?① ?
- BandWidth?"u:wget"?204800???????????????????② ?
其中各行含義如下。
①:將使用FireFox的客戶端最大帶寬限制為100kbit/s。
②:將使用wget的客戶端最大帶寬限制為200kbit/s。
LargeFileLimit [文件類型] [文件大小] [bytes/s]:對于指定類型超過指定大小(單位為kbytes)的文件使用特定限制帶寬。在下面的例子中將所有超過500KB的AVI文件帶寬限制為300kbit/s。
- LargeFileLimit?.avi?500?307200?
?
?
8.4.1? 常規配置(7)
MaxConnection [客戶端來源] [最大連接數] :設置最大連接數,當直接最大連接數時,Apache將返回503錯誤給客戶端。如在客戶端來源使用all關鍵字時表示所有訪問Apache的客戶端,MaxConnection參數在使用時必須有對應的BandWidth,否則該參數將被忽略。
- BandWidth?all?204800????????????????????① ?
- MaxConnection?all?200???????????????????② ?
- BandWidth?192.168.0.30?102400???????③ ?
- MaxConnection?192.168.0.30?5????????④ ?
其中各行含義如下。
①:將所有客戶端最大帶寬限制為200kbit/s。
②:將所有客戶端最大連接數設置為200。
③:將IP地址為192.168.0.30的客戶端最大帶寬限制為100kbit/s。
④:將IP地址為192.168.0.30的客戶端最大連接數設置為5。
MaxConnection u:[User-Agent] [Max]:通過客戶端信息限制最大連接數。
- MaxConnection?"u:^Mozilla/5(.*)"?20?① ?
- MaxConnection?"u:wget"?5????????????????② ?
其中各行含義如下。
①:將使用FireFox的客戶端最大連接數限制為20。
②:將使用wget的客戶端最大連接數限制為5。
在使用BandWidth、MinBandWidth、LargeFileLimit、MaxConnection參數時可以根據客戶端來源不同指定多個。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
