在Linux上設置web站點(二)——httpd2.2的基礎配置
/etc/httpd:服務器的根目錄
conf/httpd.conf,conf.d/*:配置文件
conf/magic:MIME的配置文件
logs:日誌文件的存放路徑,符號鏈接/var/log/httpd
modules:動態模塊文件的存放路徑,符號鏈接/usr/lib64/httpd/modules
run:httpd主進程pid的存放路徑,符號鏈接/usr/run/httpd
httpd的主配置文件:/etc/httpd/conf/httpd.conf
在此配置文件中,所有的配置項均被稱為指令(Directive)
指令的格式:Directive Value
在主配置文件中,所有的指令都被分組到三個配置段中:
### Section 1: Global Environment
### Section 2: 'Main' server configuration
### Section 3: Virtual Hosts
二、常用的配置指令:
Section 1: Global Environment:全局配置段
1.Listen Directive
定義服務器監聽的有效套接字
格式:Listen [IPADDR:]port [protocol]
註意:
1.在各配置文件中,Listen指令可以出現多次,用於定義不同的監聽套接字
2.Listen指令不能省略,否則服務器無法啟動
3.如果省略IP地址,將會監聽當前服務器所有被正確配置並生效的IP地址
4.在httpd2.2中,如果更改Listen中IP地址信息,則必須重啟httpd進程才能生效,僅僅reload不能生效
2.KeepAlive Directive
開啟或關閉HTTP協議的長鏈接功能
格式:KeepAlive On|Off
KeepAliveTimeout Directive
服務器在一個長鏈接上能夠達到的子回話請求的最大時間間隔;默認的時間單位為秒
格式:KeepAliveTimeout number
MaxKeepAliveRequests Directive
一個長鏈接上所能夠接受的最大的用戶請求數量,默認是100個
格式:MaxKeepAliveRequests number
以上三條指令是與長鏈接相關的指令,長鏈接的斷開條件:
時間限制、請求數量限制
使用Telnet測試長鏈接:
設置KeepAlive On ,重載httpd服務,默認 KeepAliveTimeout的值為15
3.MPM相關指令:
MPM:多道處理模塊;
httpd-2.2的MPM不支持DSO機制,且event為測試模式
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
通過修改/etc/sysconfig/httpd文件來完成MPM功能切換;
HTTPD=/usr/sbin/httpd.worker
每次更換MPM模塊,都需要重啟httpd服務後才能生效,/etc/sysconfig/httpd是服務啟動腳本/etc/init.d/httpd的配置文件;
查看httpd或httpd.worker程序的模塊列表:
httpd -M
httpd.worker -M
查看httpd或httpd.worker程序的靜態編譯模塊列表
httpd -l
httpd.worker -l
與prefoik模塊相關的配置指令:
<IfModule prefork.c>
StartServers 8
//在服務主進程啟動之後,預先fork多少子進程
MinSpareServers 5
//最少預留的空閑子進程的數量
MaxSpareServers 20
//最多預留的空閑子進程的數量
ServerLimit 256
//為MaxClient指令定義上限
MaxClients 256
//最多的客戶端並發訪問量
MaxRequestsPerChild 4000
//每個子進程能夠處理的客戶端請求的最大值
</IfModule>
與worker模塊相關的配置指令
<IfModule worker.c>
StartServers 4
//在服務主進程啟動之後,預先fork多少個子進程;
MaxClients 300
//最多的客戶端並發訪問量
MinSpareThreads 25
//最少預留的空閑線程的數量
MaxSpareThreads 75
//最多預留的空閑線程的數量
ThreadsPerChild 25
//每個子進程可以管理的線程數量
MaxRequestsPerChild 0
//每個子進程可以處理的客戶端請求的最大值
</IfModule>
4.DSO機制:
鏈接動態模塊並將其添加至活動模塊列表
格式:LoadModule module filename
例:
LoadModule auth_basic_module modules/mod_auth_basic.so
modules是相對於ServerRoot指令定義的根目錄的路徑而言的
5.Include Directive
可以包括除了主配置文件之外的其他服務配置文件;支持Globbing
格式:Include file-path | directory-path | wildcard
示例:
Inlude conf.d/*.conf
6.User Directive
指定啟動子進程的用戶ID和組ID
格式:User User-Id
Group Group-Id
Section 2: 'Main' server configuration,定義了默認的web站點的基本屬性
7.ServerAdmin Directive
定義了發送錯誤信息的郵箱地址;
格式:ServerAdmin email-address|URL
ServerName Directive
服務器做自我標識時使用的主機名和端口號的組合;
格式:ServerName [scheme://]domain-name|ip-address[:port]
DocumentRoot Directive
為web站點的資源提供路徑映射;
格式:DocumentRoot directory-path
示例:
DocumentRoot "/var/www/html"
8.站點資源訪問控制資源指令
1)基於文件系統的訪問控制指令
a.基於指定目錄的訪問控制指令
<Directory "/PATH/TO/SOME_DIR">
Options Directive
AllowOverride Directive
Order Directive
Allow Directive
Deny Directive
</Directory>
b.基於特定文件的訪問控制指令
<File "FILENAME">
Directive Value
</File>
c.基於模式匹配的方式進行訪問控制的指令
<FilesMatch regex>
Directive Value
</FilesMatch>
<DirectoryMatch regex>
Directive Value
</DirectoryMatch>
2)基於URL的訪問控制指令
a.基於URL進行訪問控制:
<Location URL-path|URL>
Directive Value
</Location>
b.基於URL的模式匹配的方式進行訪問控制:
<LocationMatch regex>
Directive Value
</LocationMatch>
3)指令具體內容
①Options Directive
指定的目錄中激活web訪問控制相關特性;
格式:Options [+|-]option [[+|-]option] ...
取值可以是:None, All, Indexes, Includes, FollowSymLinks, SymLinksifOwnerMatch, ExecCGI, MultiViews...
Indexes:啟用DocumentRoot的索引特性;當web站點沒有定義符合要求的主頁或者主頁不存在時,在瀏覽器上允許以索引的方式列表顯示整個DocumentRoot中所有的資源給用戶選擇;一般用於資源下載站點;對於正常的web站點來說,應禁用此功能;
FollowSymLinks:跟蹤符號鏈接並找到被鏈接的文件,並可以在客戶端瀏覽器中打開;
SymLinksifOwnerMatch:只有處理客戶端請求的子進程的所有者與符號鏈接文件的所有者為同一用戶時,才跟蹤符號鏈接;
②AllowOverride Directive
控制被允許放置於.htaccess文件中的指令是否生效;
格式:AllowOverride All|None|directive-type [directive-type]
httpd允許在web站點的文檔根目錄中以及各級子目錄中使用.htaccess文件進行資源的訪問控制;凡是放置於.htaccess文件中的指令,有繼承的特性;如果每次執行指令都要讀取該文件進行比對,則運行效率會下降,所以通常建議該指令的值設置為"None";
③Order Directive
定義基於IP地址的訪問控制管理的順序;
a.配置順序:
根據指定的Allow和Deny的順序來執行;
b.範圍順序:
匹配範圍越小的,越優先執行;
格式:Order ordering
ordering可以包含兩種通用順序:
Allow, Deny:
先計算Allow指令的匹配,如果能夠匹配任意規則,則允許;
再計算Deny指令的匹配,如果能夠匹配任意規則,則阻止;
如果沒有匹配,則默認阻止所有;
Deny, Allow:
先計算Deny指令的匹配,如果能夠匹配任意規則,則阻止;
再計算Allow指令的匹配,如果能夠匹配任意規則,則允許;
如果沒有匹配,則默認允許所有;
④Deny Directive
控制阻止訪問服務器的客戶端主機;
格式:Deny from all|host|env=[!]env-variable [host|env=[!]env-variable] ...
Allow Directive
控制允許訪問服務器的客戶端主機;
格式:Allow from all|host|env=[!]env-variable [host|env=[!]env-variable] ...
host可以寫成:
域名或FQDN:example.net www.abc.com
單個IP:172.16.0.1
邏輯網段:172.16 172.16.0.0/16 172.16.0.0/255.255.0.0
示例:
Order allow,deny
Allow from all
//允許所有客戶端主機訪問當前服務器的web站點服務;
Order deny,allow
Deny from 172.16.0.1
//僅阻止IP地址為172.16.0.1的主機訪問當我服務器的web站點服務;
9.DirectoryIndex Directive
為當前web站點指定默認的主頁文件名稱;
格式:DirectoryIndex disabled | local-url [local-url] ...
註意:
1) DirectoryIndex指令之後可以設置多個本地URL作為主頁文件名稱;按照順序從前到後進行名稱匹配,如果能夠匹配成功,就將該資源當作本站點的主頁文檔;如果沒有匹配成功,且Options指令中也沒有定義Indexes特性,則web服務器阻止本次請求;
2) 如果請求資源時明確的給出URL,則DirectoryIndex指令的值無任何意義;
10.日誌相關指令
ErrorLog Directive
標明錯誤信息的日誌記錄的位置(文件路徑)
格式:ErrorLog file-path|syslog[:[facility][:tag]]
示例:
ErrorLog logs/error_log
LogLevel Directive
控制錯誤日誌記錄的詳細程度;
格式:LogLevel [module:]level [module:level] ...
level包括:emerg、alert、crit、error、warn、notice、info、debug
註意:
1) 日誌記錄等級越高,在錯誤日誌中記錄的信息就會越少;
2) 選擇的日誌記錄等級,有向上兼容的特性;
CustomLog Directive
標明記錄訪問日誌的文件的路徑及日誌記錄的格式;
格式:CustomLog file format
示例:
CustomLog logs/access_log combined
LogFormat Directive
功能:描述了在訪問日誌中記錄信息的特定格式;
格式:LogFormat format|nickname [nickname]
常用的format:
%h:遠程主機名稱;如果HostnameLookups的值設置為Off,則記錄遠程主機的IP地址;
%l:遠程登錄名稱;如果沒有登錄名,就在日誌中記錄為"-";
%u:遠程用戶名稱;記錄通過身份驗證之後訪問資源的用戶名稱;
%t:收到客戶端請求的時候的服務器的時間戳;[18/Sep/2011:19:18:28 -0400]
\"%r\":請求報文首部的首行;
"GET /index.html HTTP/1.1"
%>s:請求報文的狀態信息;
%b:以字節為單位的響應報文的長度;
\"%{Referer}i\":訪問此頁面之前通過哪個超鏈接跳轉而來;使用"{}"引用的內容是報文首部中的首部名稱;
\"%{User-Agent}i\":客戶端使用的http應用程序及相關信息;
示例:
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
四種格式,默認選擇combined
CustomLog logs/access_log combined
11.定義路徑別名的指令:
Alias Directive
將指定的URL映射至本地的文件系統路徑;
格式:Alias URL-path file-path|directory-path
示例:
Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
AliasMatch Directive
使用正則表達式將URL映射至本地的文件系統路徑;
格式:AliasMatch regex file-path|directory-path
示例:
AliasMatch ^/exam(.*)?$ "/tmp/exam$1"
<Directory "/tmp/exam/">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
12.服務器系統狀態數據查詢:
前提:LoadModule status_module modules/mod_status.so
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 172.16
</Location>
ExtendedStatus On|Off:開啟或關閉更多的額外狀態信息展示;
三、虛擬主機配置段:
### Section 3: Virtual Hosts
<VirtualHost> Directive
啟動並配置虛擬主機及相關參數;
格式:
<VirtualHost addr[:port] [addr[:port]] ...>
Directive Value
</VirtualHost>
使用虛擬主機:默認一個httpd僅能構建一個web站點,因此很多的情況下,我們需要在同一臺服務器上架構多個web站點,此時則需要使用虛擬主機來定義。如果啟用了虛擬主機,每個獨立的Web站點都必須要有至少一個獨立的主機標識:
IP地址 + Port + 主機頭(請求報文首部中的Host首部的值,通常為FQDN)
三種典型的虛擬主機實現方式:
1) 基於IP地址構建的虛擬主機;
2) 基於Port構建的虛擬主機;
3) 基於主機頭構建的虛擬主機;
註意:Main Server和Virtual Host不能同時被定義;而且一旦虛擬主機配置被激活,Main Server就不再有效;
常用指令:
NameVirtualHost Directive
功能:在使用基於主機頭構建虛擬主機時,指定虛擬主機名稱;
格式:NameVirtualHost addr[:port]
配置示例:
/etc/httpd/conf/httpd.conf中添加如下指令:
Listen172.16.88.99:8000 NameVirtualHost 172.16.88.99:80
/etc/httpd/conf.d/vhost1.conf的內容如下:
<VirtualHost 192.168.109.2:80> ServerNamewww.ppp213.com DocumentRoot"/myvhost/vhost1/" <Directory "/myvhost/vhost1"> Options None AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost>
/etc/httpd/conf.d/vhost2.conf的內容如下
<VirtualHost 192.168.109.20:8080> ServerNamewww.ppp213.cn DocumentRoot"/myvhost/vhost2/" <Directory "/myvhost/vhost2/"> Options None AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost>
/etc/httpd/conf.d/vhost3.conf的內容如下
<VirtualHost 192.168.109.20:80> ServerName www.ppp213.org DocumentRoot "/myvhost/vhost3/" <Directory "/myvhost/vhost3/"> Options None AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost>
為主機添加新的ip地址 192.168.109.20:
ip add add 192.168.109.20/16 dev eth0 label eth0:0
分別創建/myvhost/vhost1,/myvhost/vhost2,/myvhost/vhost3,並再其下創建index.html,重新載入httpd服務後,分別訪問192.168.109.2、192.168.109.20、192.168.109.20:8080
在Linux上設置web站點(二)——httpd2.2的基礎配置