天天看點

HTTPD詳解

1、HTTPD服務的相關資訊

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

●運作目錄:/etc/httpd

●主配置檔案:/etc/httpd/conf/httpd.conf

●擴充配置:/etc/httpd/conf.d/*.conf

●網頁檔案根目錄:/var/www/html

●CGI:./var/www/cgi-bin/

2、配置檔案的構成

全局配置

(1)配置監聽的位址和端口:

  Listen [IP:] PORT

(2)配置所選用的MPM子產品(多道處理子產品)

★prefork.c子產品(一個非線程型的、預派生的MPM)

prefork模式使用多個子程序,每個子程序隻有一個線程。每個程序在某個确定的時間隻能維持一個連接配接。在大多數平台上,Prefork MPM在效率上要比Worker MPM要高,但是記憶體使用大得多。prefork的無線程式設計在某些情況下将比worker更有優勢:他能夠是喲哦那個那些沒有處理好線程安全的第三方子產品,并且對于那些線程調試困難的平台而言,他也更容易調試一些。      

主程序綁定特權端口;

派發或或回收子程序;

讀取分析主配置檔案;

# httpd -l
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c      

工作方式:一個單獨的控制程序(父程序)負責産生子程序,這些子程序用于監聽請求并作出應答。Apache總是試圖保持一些備用的(spare)或是空閑的子程序用于迎接即将到來的請求。這樣用戶端就無需在得到服務前等候子程序的産生。在Unix系統中,父程序通常以root身份運作以便綁定80端口,而Apache産生的子程序通常以一個低特權的用于運作。User和Group指令用于配置子程序的低特權使用者。運作子程序的使用者必須要對他所服務的内容有讀取的權限,但是對服務内容之外的其他資源必須擁有盡可能少的權限。

ServerLimit   20000

StartServers   5

MinSpareServers   5

MaxSpareServers   10

MaxClients   1000

MaxRequestsPerChild 0

ServerLimit     2000

//預設的MaxClient最大是256個線程,假如想配置更大的值,就的加上ServerLimit這個參數。20000是ServerLimit這個參數的最大值。假如需要更大,則必須編譯apache,此前都是無需重新編譯Apache。

生效前提:必須放在其他指令的前面

//指定伺服器啟動時建立的子程序數量,prefork預設為5。

//指定空閑子程序的最小數量,預設為5。假如目前空閑子程序數少于MinSpareServers ,那麼Apache将以最大每秒一個的速度産生新的子程序。此參數不要設的太大。

//配置空閑子程序的最大數量,預設為10。假如目前有超過MaxSpareServers數量 的空閑子程序,那麼父程序将殺死多餘的子程序。此參數不要 設的太大。假如您将該指令的值配置為比MinSpareServers小,Apache将會自動将其修改成"MinSpareServers+1"。

MaxClients   256

//限定同一時間用戶端最大接入請求的數量(單個程序并發線程數),預設為256。任何超過MaxClients限制的請求都将進入等候隊列,一旦一個連結被釋放,隊列中的請求将得到服務。要增大這個值,您必須同時增大ServerLimit 。

MaxRequestsPerChild 10000

//每個子程序在其生存期内允許伺服的最大請求數量,預設為10000.到達MaxRequestsPerChild的限制後,子程序将會結束。假如MaxRequestsPerChild為"0",子程序将永遠不會結束。

将MaxRequestsPerChild配置成非零值有兩個好處:

1.能夠防止(偶然的)記憶體洩漏無限進行,進而耗盡記憶體。

2.給程序一個有限壽命,進而有助于當伺服器負載減輕的時候減少活動程序的數量。

★worker.c子產品(支援混合的多線程多程序的多路處理子產品)

   worker MPM 使用多個子程序,每個子程序有多個線程。每個線程在某個确定的時間隻能維持一個連接配接。通常來說,在一個高流量的HTTP伺服器上,Worker MPM是個比較好的選擇,因為Worker MPM的記憶體使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,假如一個線程崩潰,整個程序就會連同其任何線程一起"死掉".由于線程共享記憶體空間,是以一個程式在運作時必須被系統識别為"每 個線程都是安全的"。

# httpd.worker -l
Compiled in modules:
  core.c
  worker.c
  http_core.c
  mod_so.c      

httpd預設情況是以prefork為子產品的,要以work模型則需要編輯配置檔案,打開httpd.worker模型

vim /etc/sysconfig/httpd
# The service must be stopped before changing this variable.
#
HTTPD=/usr/sbin/httpd.worker
#
# To pass additional options (for instance, -D definitions) to the
# httpd binary at startup, set OPTIONS here.
#
#OPTIONS=      

ServerLimit   50

ThreadLimit   200

MaxClients   5000

MinSpareThreads   25

MaxSpareThreads   500

ThreadsPerChild   100

ServerLimit 16

//伺服器允許配置的程序數上限。這個指令和ThreadLimit結合使用配置了MaxClients最大允許配置的數值。任何在重新開機期間對這個指令的改變都将被忽略,但對MaxClients的修改卻會生效。

ThreadLimit 64

//每個子程序可配置的線程數上限。這個指令配置了每個子程序可配置的線程數ThreadsPerChild上限。任何在重新開機期間對這個指令的改變都将被忽略,但對ThreadsPerChild的修改卻會生效。預設值是"64".

StartServers 3

//伺服器啟動時建立的子程序數,預設值是"3"。

MinSpareThreads 75

//最小空閑線程數,預設值是"75"。這個MPM将基于整個伺服器監控空閑線程數。假如伺服器中總的空閑線程數太少,子程序将産生新的空閑線程。

MaxSpareThreads 250

//配置最大空閑線程數。預設值是"250"。這個MPM将基于整個伺服器監控空閑線程數。假如服 務器中總的空閑線程數太多,子程序将殺死多餘的空閑線 程。MaxSpareThreads的取值範圍是有限制的。Apache将按照如下限制自動修正您配置的值:worker需要其大于等于 MinSpareThreads加上ThreadsPerChild的和

MaxClients 400

//允許同時伺服的最大接入請求數量(最大線程數量)。任何超過MaxClients限制的請求都将進入等候 隊列。預設值是"400",16 (ServerLimit)乘以25(ThreadsPerChild)的結果。是以要增加MaxClients的時候,您必須同時增加 ServerLimit的值。

ThreadsPerChild 25

//每個子程序建立的常駐的執行線程數。預設值是25。子程序在啟動時建立這些線程後就不再建立新的線程了。

//配置每個子程序在其生存期内允許伺服的最大請求數量。到達MaxRequestsPerChild的限制後,子程序将會結束。假如MaxRequestsPerChild為"0",子程序将永遠不會結束。

2.給程序一個有限壽命,進而有助于當伺服器負載減輕的時候減少活動程序的數量。

注意

對于KeepAlive連結,隻有第一個請求會被計數。事實上,他改變了每個子程序限制最大連結數量的行為。

工作方式:

每個程序能夠擁有的線程數量是固定的。伺服器會根據負載情況增加或減少程序數量。一個單獨的控制程序(父程序)負責子程序的建 立。每個子程序能夠建立 ThreadsPerChild數量的服務線程和一個監聽線程,該監聽線程監聽接入請求并将其傳遞給服務線程處理和應答。Apache總是試圖維持一個備 用(spare)或是空閑的服務線程池。這樣,用戶端無須等待新線程或新程序的建立即可得到處理。在Unix中,為了能夠綁定80端口,父程序一般都是以 root身份啟動,随後,Apache以較低權限的使用者建立子程序和線程。User和Group指令用于配置Apache子程序的權限。雖然子程序必須對 其提供的内容擁有讀權限,但應該盡可能給予他較少的特權。另外,除非使用了suexec ,否則,這些指令配置的權限将被CGI腳本所繼承。

(3)配置伺服器支援長連接配接

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive ON       #将長連接配接選項打開keep      

(4)加載子產品配置

# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so      

●主伺服器

(1)站點目錄配置

#ServerName www.example.com:80  #主機名定義
DocumentRoot           #配置站點目錄
<Directory "">
</Directory>
<Location "URL">      

(2)配置頁面檔案通路屬性

<Directory "FS_PATH">
   Option
      Indexes:是否允許索引頁面檔案
</Directory>      

注:在生産線上非下載下傳站點,不允許使用索引頁面,非常的不安全

FollowSynlinks:是否跟随連結檔案:      
SymlinksifOwnerMatch :
ExecCGI:是否運作執行CGI腳本;      

(3)APACHE通路控制

利用Apache實作通路控制的配置指令包括如下3種.

1.Order指令

Order指令用于指定允許通路控制或者拒絕通路控制規則的順序。

Order隻能設定為“Order Allow,Deny"或Order Deny ,Allow",分别用來表明使用者先設定允許的通路位址還是先設定禁止通路的位址。

Order選項用于定義預設的通路權限與Allow和Deny語句的處理順序,而Allow和Deny語句可以針對客戶機的域名或IP位址進行設定,以決定哪些客戶機能夠通路伺服器。

Order語句設定的兩種值的具體含義如下.

★Allow,Deny

預設禁止所有客戶機的通路,且Allow語句在Deny語句之前被比對。如果某條件即配Deny語句,又比對Allow語句,則Deny語句會起作用(因為Deny語句覆寫了Allow語句)。

★Deny,Allow

預設允許所有客戶機通路,且Deyn語句在Allow語句之前被比對。如果某條件即比對Deny語句,又比對Allow語句,則Allow語句會起作用(因為Allow語句覆寫了Deny語句)。

2、Allow指令

Allow指令指明運作通路的位址或位址序列。例如Allow from all指令表明允許所有IP來的通路請求。

3、Deny指令

Deny指令指明禁止通路的位址或位址序列。例如Deny from all指令表明禁止所有的IP來的範圍請求。

4、userdir配置讓每個使用者擁有自己的站點

<IfModule mod_userdir.c>
    #
    #
    UserDir disabled          #禁用
    #
    # To enable requests to /~user/ to serve the user's public_html
    # directory, remove the "UserDir disabled" line above, and uncomment
    # the following line instead:
    #
    #UserDir public_html      #啟用      

5、定義預設首頁面

DirectoryIndex   index.php index.jsp  index.html  #優先找到的話放在最左側      

6、配置日志功能

日志有兩類,通路日志和錯誤日志。

錯誤日志:

ErrorLog logs/error_log
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common                                      
LogFormat "%{Referer}i -> %U" referer                                             
LogFormat "%{User-agent}i" agent      

通路日志

CustomLog logs/access_log combined
#
# Optionally add a line containing the server version and virtual host
# name to server-generated pages (internal error documents, FTP directory
# listings, mod_status and mod_info output etc., but not CGI generated詳細日志:      

7、設定虛拟目錄和目錄權限

要從主目錄以外的其他目錄中進行釋出,就必須建立虛拟目錄。虛拟目錄是一個為于Apache主目錄外的目錄,它不包含在Apache主目錄中,但在通路Web站點的使用者看來,它與位于主目錄中的子目錄是一樣的。每個虛拟目錄有一個别名,使用者在Web浏覽器中可以通過此名來通路虛拟目錄,如http://Server IP //Alias檔案名,就可以通路虛拟目錄下的任何檔案裡。

使用Alias選項可以建立虛拟目錄,在主配置檔案中,Apache預設已經建立了兩個虛拟目錄,這兩條語句分别建立了"/icons/"和“/manual"兩個虛拟目錄,它們對應的實體路徑分别是”/var/www/icons"和“/var/www/manual"兩個虛拟目錄,它們對用的實體路徑分别是”/var/www/icons/"和“/var/www/manual"

Alias /icons "/var/wwwicons/"
Alias /manual "/var/www/manual"      

在實際使用過程中,使用者可以自己建立虛拟目錄,比如建立名為/test的虛拟目錄,它所對應的路徑為上面幾個例子中常用的/var/www/html/rhel5:

Alias  /test  "/var/www.html/rhel5"      

如果需要對其機型進行權限設定,可以加入以下語句:

<Directory "/var/www/html/rhel5">
  AllowOverride  None
Options Indexes
Order allow,deny
Allow from all
</Directory>      

8、腳本路徑别名,必須要裝載CGI子產品

  CGI:協定

ScriptAlias /PATH /PAHT/TO/SOMEDIR
CGI測試腳本
#!/bin/bash
cat <<EOF
Content-Type:test/html
<pre>
The hostname is: `/bin/hostname`.
The time is:`date`.
</pre>      

9、認證和授權使用執行個體

(1)使用主配置檔案配置使用者認證及授權

在本例中,使用者可以在Apache的主配置檔案httpd.conf中加入以下語句,建立對目錄/var/www/html/rhel5通路的使用者認證和授權機制:

<Directory ”/var/www/html/rhel5"
AllowOverride None
AuthType Basic
AuthName "rhel5"
AuthUserFile /etc/httpd/passwd_auth
Require user rhel5 cgweb
</Directory>      

●AllowOveride:該選項定義了不使用htaccess檔案

●AuthType Basic:AuthType 選項定義了對使用者實施認證的類型,最常用的是由mod_auth提供的Basic

●AuthName:定義了Web浏覽器顯示輸入使用者/密碼對話框時的領域内容。

●AuthUserFile:定義了密碼檔案的路徑,即使用htpasswd建立的密碼檔案。

●Require user:定義了允許那些使用者通路,各使用者之間用空格分開。

需要注意的是,在AuthFile選項定義中,還要使用語句事先建立認證使用者rhel5和cgweb,該選項中的定義才能生效。

具體語句如下:

#htpasswd -c /etc/httpd/passwd_auth rhel5
#htpasswd -c /etc/httpd/passwd_auth cgweb      

(2)使用.htaccess檔案配置使用者認證和授權

在本例中,為了完成如上述例子統一的功能,需要先在主配置檔案中加入以下語句:

<Directory "/var/www/html/rhel5">
AllowOverride AuthConfig
</Directory>      

上述語句中的AllowOverride選項允許在.htaccess檔案中使用認證和授權指令。

然後,在.htaccess檔案中添加以下語句即可:

AuthType Basic
AuthName "Please Login:"
AuthUserFile /etc/httpd/passwd_auth
Require user rhel5 cgweb      

在AuthUserFile選項定義中,也要使用如下語句事先建立認證使用者rhel5和cgweb,該選項中定義才能生效:

#htpasswd -c /etc/httpd/passwd_auth rhel5
#htpasswd /etc/httpd/passwd_authcgweb      

●虛拟主機

虛拟主機和主伺服器不能同時使用,關閉主伺服器,首先注釋掉DocumentRoot主目錄

(1)基于端口的虛拟主機

<VirtualHost 192.168.2.221:80>
  ServerName 123.com
  DocumentRoot "/web/host1"
  DirectoryIndex index.html
</VirtualHost>
<VirtualHost 192.168.2.221:8080>
  ServerName 456.com
  DocumentRoot "/web/host2"
  DirectoryIndex index.html
</VirtualHost>      

(2)基于IP位址的虛拟主機

<VirtualHost 192.168.2.221:80>
  ServerName 123.com
  DocumentRoot "/web/host1"
  DirectoryIndex index.html
</VirtualHost>
<VirtualHost 192.168.2.225:80>
  ServerName 456.com
  DocumentRoot "/web/host2"
  DirectoryIndex index.html
</VirtualHost>      

(3)基于主機名的虛拟主機。首先開啟NameVirtualHost 192.168.2.221:80

<VirtualHost 192.168.2.221:80>
  ServerName www.abc.com
  DocumentRoot "/web/host1"
  DirectoryIndex index.html
</VirtualHost>
<VirtualHost 192.168.2.225:80>
  ServerName www.cba.org
  DocumentRoot "/web/host2"
  DirectoryIndex index.html
</VirtualHost>      
[root@node1 ~]# elinks -dump http://www.abc.com
     node1
[root@node1 ~]# elinks -dump http://www.cba.org
     node2      
上一篇: samba服務

繼續閱讀