Web學習之——02Apache的基本配置(全局配置、主服務器配置)

主要內容:

         httpd相關包信息

         httpd的安裝及主頁面

         httpd的配置文件

         httpd的全局配置

         httpd的主服務器配置

一、httpdRPM包介紹及其相關信息:

CentOS6httpd的相關包信息:

wKioL1YL0GPghvoKAAKPiA-7Tzc672.jpg

CentOS7上的httpd的相關信息:

wKiom1YL0LzDZKVSAAH9-8UkCAw473.jpg

httpd安裝後各文件的內容及存放位置】:

CentOS6

服務腳本:/etc/rc.d/init.d/httpd

運行目錄:/etc/httpd

配置文件:/etc/httpd/conf/

           主配置文件:httpd.conf

         擴展配置文件:/etc/httpd/conf.d/*.conf

socket:

           http:80/tcp

           https:443/tcp

網頁文件目錄(DocumentRoot)

           靜態頁面:/var/www/html

           動態頁面(CGI):/var/www/cgi-bin/

           默認主頁面:index.html  index.php

httpd的安裝】:

注意:httpd的默認安裝會試圖通過反解當前主機的IP地址來爲httpd服務器提供一個主機名稱,如果反解失敗會報錯,會提示主機名稱解析失敗並使用127.0.0.1作爲當前主機的主機名。所以在沒有配置DNS的情況下,建議首先配置/etc/hosts文件爲其提供一個主機名。

1、   編輯/etc/hosts文件,爲當前主機配置相應的主機名:

wKioL1YL0SjyVfh5AAB178NBCPM848.jpg

2、   通過yum來安裝httpd,如果需要手冊(httpd-manual:官方提供的httpd的配置手冊),也可以一併安裝;

wKiom1YL0Uqx-hu7AAF3UDsRxA8365.jpg

3、   安裝完成後通過“chkconfig”命令來設置開機啓動:

[root@localhost ~]# chkconfig --list httpd
httpd              0:off1:off2:off3:off4:off5:off6:off
[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# chkconfig --list httpd
httpd              0:off1:off2:on3:on4:on5:on6:off

4、   通過“service httpd start”或“/etc/rc.d/init.d/httpd”來啓動服務:

[root@localhost ~]# service httpd start
Starting httpd: httpd: Could not reliablydetermine the server's fully qualified domain name, using localhost.localdomainfor ServerName    #此處有點小問題;
                                                          [  OK  ]
[root@localhost ~]# /etc/rc.d/init.d/httpdrestart
Stopping httpd:                                           [  OK  ]
Starting httpd: httpd: Could not reliablydetermine the server's fully qualified domain name, using localhost.localdomainfor ServerName
                                                          [  OK  ]
在/etc/httpd/conf/httpd.conf文件中將# ServerName www.example.com:80 的註釋符#號去掉即可;

wKiom1YL0cShkEJgAAB6chacVoc950.jpg

5、   通過“netstat”“ss”命令來查看80/tcp端口是否處於監聽狀態:

[root@localhost ~]# netstat -tan | grep 80
tcp       0      0 :::80                       :::*                        LISTEN
[root@localhost ~]# ss -tnl | grep 80
LISTEN     0     128                     :::80                      :::*

6、   80/tcp端口被監聽說明服務已經啓動了,在客戶機的瀏覽器中輸入服務器地址驗證安裝。

wKiom1YL0j3jRKI2AAL2vQR7I2g707.jpg

看到上面的頁面表示httpd已經能夠正常工作了哈,上面的頁面是一個測試頁面,在我們提供默認主頁面後該頁面就會被替換。

7、   httpd提供默認主頁(在"/var/www/html"目錄下新建一個名爲index.html的文件),內容如下:

wKioL1YL0pOj1yV5AACPgwpDUjQ054.jpg

8、   再次通過瀏覽器訪問:

wKiom1YL0raj6a5-AADDruRiSn4556.jpg

自定義主頁設置成功,能正常訪問;

二、配置httpd的工作屬性:

指令的說明:

/etc/httpd/conf/httpd.conf:

1、指令不區分字符大小寫,但約定俗成的習慣:單詞的首字母大寫;指令的值很有可能區分大小寫;有些指令可以重複使用多次;

2、所有以“#”號開頭的都爲註釋;

配置文件的構成:

整個配置文件由3段組成:

(1)全局配置:對主服務器或虛擬機都有效,且有些功能是服務器自身工作屬性;

(2)主服務器:主站屬性;

(3)虛擬主機:虛擬主機及屬性定義

注:第二段和第三段(即主機和虛擬主機)不能同時使用;

wKiom1YL0y6AfGhoAAEf_eerAQk450.jpg

說明:大多數配置修改後,使用service httpd reload即能生效;而修改了監聽的地址和端口通常需要重啓服務;

第一段:全局配置:

1、配置監聽的地址和端口:

Listen [IP:]PORT     //Listen可重複使用多次

#Listen 12.34.56.78:80
Listen 80

2、配置所選用的MPM的屬性:

MPM:意爲多路處理模塊,也就是我們所說的Apache的工作模式,共有3中模式:

   prefork:一個主進程產生多個子進程,一個子進程響應一個請求;

   worker:一個進程生成多個線程,一個線程響應一個請求;

   event:基於事件驅動;

說明:

     event在apache2.4版本之前是以測試狀態提供,網上並沒有太多的資料,在更新至2.4版本之後正式上線
prefork:當httpd啓動起來之後,會生成一個主進程,它負責監聽用戶的請求,一旦請求進來後,它不負責自己響應,而是讓其生成的子進程來響應,而主進程繼續監聽請求。
        需要考慮的是:剛啓動服務的時候需要創建幾個空閒進程,太多不好太少也不好。最少保證有幾個空閒進程來響應請求進來,這是必須的。 最多設定多少個空閒進程,多餘的空閒進程需要回收回來。
 
所以Prefork有如下幾個關鍵作用:
(1)啓動服務時綁定特權端口:Linux系統中,只有管理員有權限使用小於1024的特權端口;但運行一些公共可用的服務,一定不能以管理員身份運行;
(2)派發或回收子進程
(3)讀取分析主配置文件
(4)監聽每個用戶請求並且派發子進程
httpd 命令的使用:
Usage: httpd [-D name] [-d directory] [-ffile]
            [-C "directive"] [-c "directive"]
            [-k start|restart|graceful|graceful-stop|stop]
            [-v] [-V] [-h] [-l] [-L] [-t] [-S]
Options:
  -Dname            : define a name for usein <IfDefine name> directives
  -ddirectory       : specify an alternateinitial ServerRoot
  -ffile            : specify an alternateServerConfigFile
  -C"directive"     : processdirective before reading config files
  -c"directive"     : processdirective after reading config files
  -elevel           : show startup errors oflevel (see LogLevel)
  -Efile            : log startup errors tofile
 -v                 : show versionnumber
 -V                 : show compilesettings
 -h                 : listavailable command line options (this page)
 -l                 : list compiledin modules
 -L                 : listavailable configuration directives
  -t-D DUMP_VHOSTS  : show parsed settings(currently only vhost settings)
 -S                 : a synonym for-t -D DUMP_VHOSTS
  -t-D DUMP_MODULES : show all loaded modules
 -M                 : a synonym for-t -D DUMP_MODULES
 -t                 : run syntaxcheck for config files


參數說明:
   httpd –l    用於查看核心模塊;
[root@localhost ~]# httpd -l
Compiled in modules:
 core.c
 prefork.c
#prefork被直接編譯進了核心模塊,所以默認使用的就是prefork模型;
 http_core.c
 mod_so.c
[root@localhost ~]#

httpd–M   檢查DSO模塊加載情況(通過2種方式查詢已加載的模塊數量應該相等)

[root@localhost ~]# httpd -M | grep -v"static\|Loaded Modules" | wc -l
Syntax OK
52
[root@localhost ~]# grep"^LoadModule" /etc/httpd/conf/httpd.conf | wc -l
52
【配置prefork模型】:
    Apache服務默認就是以prefork模式啓動的,無須更改啓動模式,下面來看看如何更改其模型參數:
    編輯主配置文件:vim /etc/httpd/conf/httpd.conf找到與模塊相關的參數:IfModule爲指令,意爲判斷模塊是否存在,如果存在那麼參數則生效,反之如果不存在此模塊,參數將不會生效。
<IfModule prefork.c>                   #如果存在這個模塊,那麼提供以下屬性;
StartServers       8                       #剛啓動Web服務時啓動幾個空閒子進程;
MinSpareServers    5                      #最少空閒進程數;
MaxSpareServers   20                     #最大空閒進程數;
ServerLimit      256                       #限定最多允許並發進來的活動用戶連接個數;
MaxClients       256                     #服務器所允許同時所連接進來的鏈接數,一般來說與上面保持一致,或者大於上面的數。
MaxRequestsPerChild  4000          #一個服務器進程最多可以處理多少個進程,一旦超出請求後無論如何將進程結束並新啓動新進程
</IfModule>                                          #最後以IfModule結尾;


如果一個進程需要20M內存,那麼256*20=5G內存,通常說ServerLimit是相當消耗內存的,256已經足夠;
例:工作中,通過觀察發現服務器每個請求進來並處理結束之間的過程大概需要50毫秒,在一秒鐘之內一個進程可以處理20個請求,那麼一共開啓了256個那 麼即意味着256*20=每秒的併發數量,因此還需要再計算極端情況:對於一個站點來說一般都有高峯期,假如一次性進來的請求遠遠超於預想的閥值,該如何處理?

如果發現服務器滿負荷工作時,但服務器上仍然有空閒,可以將MaxClientsServerLimit值調大。

【配置worker模型】;

當第一個用戶請求到達的時候線程發現需要複製文件,通過內核將文件複製給其進程,所以第二個用戶請求同一個文件,對於第二個線程來說這個文件已存在,因爲線程是共享同一個進程空間,所以速度得到提升;

缺點:共享意味着爭用,共享資源被稱作臨界資源,線程共享進程空間就可能產生資源爭用,並不是全狀態並行。所以一個進程裏不能啓用太多線程;可啓用多個進程然後由每個進程再啓用多個線程,但無論如何每個線程也都是一個獨立的執行實體(線程要能運行必須給其cpu資源)。

更改apache當前工作模式爲worker模式:

     編輯文件/etc/sysconfig/httpd,將以下參數的註釋信息去掉:

HTTPD=/usr/sbin/httpd.worker

wKioL1YL1KKDe_97AAEZsjdUylM719.jpg

更改模式後必須重新啓動服務:

[root@localhost ~]# service httpd restart
Stopping httpd:                                           [  OK  ]
Starting httpd:                                            [  OK  ]

啓動完畢後,查看其進程狀態:

[root@localhost ~]# ps -ef | grep httpd
root     34786      1  0 22:24 ?        00:00:00 /usr/sbin/httpd.worker  #以root用戶身份生成的父進程(用於派發工作進程)
apache   34788  34786  0 22:24 ?        00:00:00 /usr/sbin/httpd.worker #以apache用戶身份運行的工作進程(該工作進程派發線程)
apache   34789  34786  0 22:24 ?        00:00:00 /usr/sbin/httpd.worker
apache   34791  34786  0 22:24 ?        00:00:00 /usr/sbin/httpd.worker
root     34907   1947  0 22:26 pts/0    00:00:00 grep httpd

【worker屬性配置】:

<IfModule worker.c>
StartServers         4                #配置啓動多少個用於監聽的服務,注意:這裏並不是服務器進程,而是線程;
MaxClients         300                #最大支持的用戶連接數;
MinSpareThreads     25                #最小的空閒線程數;
MaxSpareThreads     75               #對大的空閒線程數 ;
ThreadsPerChild     25                  #允許每個進程最多生成多少個線程;
MaxRequestsPerChild  0                 #設置一個獨立的子進程將能處理的請求數量;
</IfModule>

3、配置服務器支持keep-alived:

KeepAlive {On | Off }    #啓用之後支持一次連接可以發送多個請求(對於非常繁忙的服務器建議Off)
KeepAliveTimeout 15           #15秒之後斷開長連接;
MaxKeepAliveRequests 100  #一次長連接之內最多允許50個請求;

4、配置加載的模塊:

# Example:
# LoadModule     foo_module modules/mod_foo.so
#LoadModule指令模塊名稱   模塊所在的路徑(相對於ServerRoot而言)
LoadModule auth_basic_modulemodules/mod_auth_basic.so
LoadModule auth_digest_modulemodules/mod_auth_digest.so
LoadModule authn_file_modulemodules/mod_authn_file.so
LoadModule authn_alias_modulemodules/mod_authn_alias.so

wKiom1YL1UuzsE5XAAD47HmYImE771.jpg

第二段:主服務器配置:

5、配置站點根目錄(網頁存放目錄)

DocumentRoot ""
#與之配對使用兩個容器類指令:Directory指令限定的是文件系統上站點目錄的路徑(/var/www/html);Location指令限定的是URL路徑
<Directory "FS_PATH">  
</Directory> 
 
<Location "URL">
</Location>
#兩種路徑定義方法
/var/www/html/images/logo.jpg   => <Directory "/var/www/html" ></Directory>
http://www.magedu.com/images/logo.jpg  =>  <Location "/"></Location>  
#這裏的“/”==/var/www/html

wKioL1YL1aHB1aoLAAJgzA1yTKI589.jpg

6、配置頁面文件屬性:

<Directory "FS_PATH">
    Options
        Indexes: 是否允許索引頁面文件(不安全,建議關閉);
        FollowSynLinks: 是否跟隨軟鏈接文件(不安全,建議關閉);
        SymLinksifOwnerMatch:相對安全的跟隨軟鏈接指令(如果軟鏈接文件的屬主與網頁訪問用戶匹配則允許)
        ExecCGI:是否允許執行CGI腳本;
        All  允許上述所有;
        None  不允許上述所有;
</Directory>

Example:是否允許索引?

首先刪除歡迎頁面文件和默認主頁面文件,或者將二者改名:

[root@localhost ~]# cd /etc/httpd/conf.d/
[root@localhost conf.d]# mvwelcome.conf{,.bak}
[root@localhost conf.d]# cd /var/www/html/
[root@localhost html]# mv index.html{,.bak}
[root@localhost html]# service httpd reload
Reloading httpd:
[root@localhost html]#

wKiom1YL1fbRKEHxAADb6ZSumcY965.jpg

此時是能正常索引的,現在來禁止索引功能:


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