httpd.conf文件配置_Web服務(wù)器教程
首先用“記事本”程序打開(kāi)“httpd.conf”配置文件。此文件存放在Apache服務(wù)器安裝路徑下的“conf”文件夾內(nèi)。
一、使用 mod_vhost_alias
1.簡(jiǎn)單的動(dòng)態(tài)虛擬主機(jī)
(1)從 Host: 頭中取得服務(wù)器名字 Server Name
UseCanonicalName Off
(2)這里的日志格式,可以在將來(lái)通過(guò)第一個(gè)參數(shù)域來(lái)分隔不同的虛擬主機(jī)的日志
LogFormat "%V %h %l %u %t \"%r\" %s %b" VCommon
CustomLog logs/Access_log vcommon
(3)在返回請(qǐng)求的文件名的路徑中包含進(jìn)服務(wù)器名字: server name
VirtualDocumentRoot /www/hosts/%0/docs
VirtualScriptAlias /www/hosts/%0/CGI-bin
2.更為有效的基于 IP 地址的虛擬主機(jī)
(1)從 IP 地址反解析得到服務(wù)器名字(server name)
UseCanonicalName DNS
(2)在日志中包含 IP 地址,便于后續(xù)分發(fā)
LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
(3)在文件路徑中包含 IP 地址
VirtualDocumentRootIP /www/hosts/%0/docs
VirtualScriptAliasIP /www/hosts/%0/cgi-bin
二、使用 mod_rewrite
1. 使用 mod_rewrite 實(shí)現(xiàn)簡(jiǎn)單的動(dòng)態(tài)虛擬主機(jī)
(1)從 Host: 頭獲取服務(wù)器名字
UseCanonicalName Off
(2)可分割的日志
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
<Directory /www/hosts>
ExecCGI is needed here because we can't force
CGI execution in the way that ScriptAlias does
Options FollowSymLinks ExecCGI
</Directory>
(3)接下來(lái)是關(guān)鍵部分
RewriteEngine On
a ServerName derived from a Host: header may be any case at all RewriteMap lowercase int:tolower
首先處理普通文檔:
允許變名 /icons/ 起作用 - 其他變名類(lèi)同
RewriteCond %{REQUEST_URI} !^/icons/
允許 CGIS
RewriteCond %{REQUEST_URI} !^/cgi-bin/
開(kāi)始“變戲法”
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1
現(xiàn)在處理 CGIs - 我們需要強(qiáng)制使用一個(gè) MIME 類(lèi)型
RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd- cgi]
2.使用獨(dú)立的虛擬主機(jī)配置文件 vhost.map
(1)vhost.map 文件包含了類(lèi)似下面的內(nèi)容:
www.customer-1.com /www/customers/1
www.customer-2.com /www/customers/2
...
www.customer-N.com /www/customers/N
(2)http.conf 包含了:
RewriteEngine on
RewriteMap lowercase int:tolower
(3)定義映像文件
RewriteMap vhost txt:/www/conf/vhost.map
(4)和上面的例子一樣,處理變名
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{REQUEST_URI} !^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
(5)這里做基于文件的重新映射
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/docs/$1
RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/cgi-bin/$1
.htaccess文件功能
.htaccess文件的功能:"分布式配置文件"提供了針對(duì)目錄改變配置的方法,即:在一個(gè)特定的文檔目錄中放置一個(gè)包含一個(gè)或多個(gè)指令的文件, 以作用于此目錄及其所有子目錄。作為用戶(hù),所能使用的命令受到限制。管理員可以通過(guò)Apache 的AllowOverride指令來(lái)設(shè)置.子目錄中的指令會(huì)覆蓋更高級(jí)目錄或者主服務(wù)器配置文件中的指令。
一、錯(cuò)誤文檔的定位
(1)常用的客戶(hù)端請(qǐng)求錯(cuò)誤返回代碼:
401 Authorization Required
403 Forbidden
404 Not Found
405 Method Not Allowed
408 Request Timed Out
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
(2)常見(jiàn)的服務(wù)器錯(cuò)誤返回代碼:
500 Internal Server Error
(3)用戶(hù)可以利用.htaccess指定自己事先制作好的錯(cuò)誤提醒頁(yè)面。一般情況下,人們可以專(zhuān)門(mén)設(shè)立一個(gè)目錄,例如errors放置這些頁(yè)面。然后再.htaccess中,加入如下的指令:
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html
一條指令一行。
上述第一條指令的意思是對(duì)于404,也就是沒(méi)有找到所需要的文檔的時(shí)候得顯示頁(yè)面為/errors目錄下的notfound.html頁(yè)面。不難看出語(yǔ)法格式為:
ErrorDocument 錯(cuò)誤代碼 /目錄名/文件名.擴(kuò)展名
如果所需要提示的信息很少的話(huà),不必專(zhuān)門(mén)制作頁(yè)面,直接在指令中使用HTML號(hào)了,例如下面這個(gè)例子:
ErrorDocument 401 "<body bgcolor=#ffffff>
你沒(méi)有權(quán)限訪(fǎng)問(wèn)該頁(yè)面!
</body>"
二、文檔訪(fǎng)問(wèn)的密碼保護(hù)要利用.htaccess對(duì)某個(gè)目錄下的文檔設(shè)定訪(fǎng)問(wèn)用戶(hù)和對(duì)應(yīng)的密碼,首先要做的是生成一個(gè).htpasswd的文本文檔,例如:
zheng:y4E7Ep8e7EYV
這里密碼經(jīng)過(guò)加密,用戶(hù)可以自己找些工具將密碼加密成.htaccess支持的編碼。該文檔最好不要放在www目錄下,建議放在www根目錄文檔之外,這樣更為安全些。
有了授權(quán)用戶(hù)文檔,可以在.htaccess中加入如下指令了:
AuthUserFile .htpasswd的服務(wù)器目錄
AuthGroupFile /dev/null (需要授權(quán)訪(fǎng)問(wèn)的目錄)
AuthName EntERPassword
AuthType Basic (授權(quán)類(lèi)型)
require user wsabstract (允許訪(fǎng)問(wèn)的用戶(hù),如果希望表中所有用戶(hù)都允許,可以使用 require valid-user)
注:括號(hào)部分為學(xué)習(xí)時(shí)候自己添加的注釋
三、拒絕來(lái)自某個(gè)IP的訪(fǎng)問(wèn)
如果我不想某個(gè)政府部門(mén)訪(fǎng)問(wèn)到我的站點(diǎn)的內(nèi)容,那可以通過(guò).htaccess中加入該部門(mén)的IP而將它們拒絕在外。 例如:
order allow,deny
deny from 210.21.112.43
deny from 219.146.95
allow from all
注: 第二行拒絕某個(gè)IP,第三行拒絕某個(gè)IP段,也就是219.146.95.0~219.146.95.255 想要拒絕所有人?用deny from all好了。不止用IP,也可以用域名來(lái)設(shè)定。
四、保護(hù).htaccess文檔
在使用.htaccess來(lái)設(shè)置目錄的密碼保護(hù)時(shí),它包含了密碼文件的路徑。從安全考慮,有必要把.htaccess也保護(hù)起來(lái),不讓別人看到其中的內(nèi)容。雖然可以用其他方式做到這點(diǎn),比如文檔的權(quán)限。不過(guò),.htaccess本身也能做到,只需加入如下的指令:
<Files .htaccess>
order allow,deny
deny from all
</Files>
五、URL轉(zhuǎn)向
我們可能對(duì)網(wǎng)站進(jìn)行重新規(guī)劃,將文檔進(jìn)行了遷移,或者更改了目錄。這時(shí)候,來(lái)自搜索引擎或者其他網(wǎng)站鏈接過(guò)來(lái)的訪(fǎng)問(wèn)就可能出錯(cuò)。這種情況下,可以通過(guò)如下指令來(lái)完成舊的URL自動(dòng)轉(zhuǎn)向到新的地址:
Redirect /舊目錄/舊文檔名 新文檔的地址
或者整個(gè)目錄的轉(zhuǎn)向:
Redirect 舊目錄 新目錄
改變?nèi)笔〉氖醉?yè)文件
一般情況下缺省的首頁(yè)文件名有default、index等。不過(guò),有些時(shí)候目錄中沒(méi)有缺省文件,而是某個(gè)特定的文件名,比如在pmwiki中是pmwiki.php。這種情況下,要用戶(hù)記住文件名來(lái)訪(fǎng)問(wèn)很麻煩。在.htaccess中可以輕易的設(shè)置新的缺省文件名:
DirectoryIndex 新的缺省文件名
也可以列出多個(gè),順序表明它們之間的優(yōu)先級(jí)別,
例如:
DirectoryIndex filename.html index.cgi index.pl default.htm
rewrite重寫(xiě)功能
Apache模塊 mod_rewrite,一個(gè)基于一定規(guī)則的實(shí)時(shí)重寫(xiě)URL請(qǐng)求的引擎此模塊提供了一個(gè)基于正則表達(dá)式分析器的重寫(xiě)引擎來(lái)實(shí)時(shí)重寫(xiě)URL請(qǐng)求。它支持每個(gè)完整規(guī)則可以擁有不限數(shù)量的子規(guī)則以及附加條件規(guī)則的靈活而且強(qiáng)大的URL操作機(jī)制。此URL操作可以依賴(lài)于各種測(cè)試,比如服務(wù)器變量、環(huán)境變量、HTTP頭、時(shí)間標(biāo)記,甚至各種格式的用于匹配URL組成部分的查找數(shù)據(jù)庫(kù)。此模塊可以操作URL的所有部分(包括路徑信息部分),在服務(wù)器級(jí)的(httpd.conf)和目錄級(jí)的(.htaccess)配置都有效,還可以生成最終請(qǐng)求字符串。此重寫(xiě)操作的結(jié)果可以是內(nèi)部子處理,也可以是外部請(qǐng)求的轉(zhuǎn)向,甚至還可以是內(nèi)部代理處理。但是,所有這些功能和靈活性帶來(lái)一個(gè)問(wèn)題,那就是復(fù)雜性,因此,不要指望一天之內(nèi)就能看懂整個(gè)模塊。更多的討論、細(xì)節(jié)、示例,請(qǐng)查看詳細(xì)的URL重寫(xiě)文檔。
(1)特殊字符的引用:
在Apache 1.3.20中,TestString和Substitution中的特殊字符可以用前導(dǎo)斜杠(\)來(lái)實(shí)現(xiàn)轉(zhuǎn)義(即忽略其特殊含義而視
之為普通字符)。 比如,Substitution可以用"\___FCKpd___27quot;來(lái)包含一個(gè)美元符號(hào),以避免mod_rewrite把它視為反向引用。
(2)環(huán)境變量
此模塊會(huì)跟蹤兩個(gè)額外的(非標(biāo)準(zhǔn))CGI/SSI環(huán)境變量,SCRIPT_URL和SCRIPT_URI。他們包含了當(dāng)前資源的邏輯網(wǎng)絡(luò)視圖,而標(biāo)準(zhǔn)CGI/SSI變量SCRIPT_NAME和SCRIPT_FILENAME包含的是物理系統(tǒng)視圖。注意:這些變量保持的是其最初被請(qǐng)求時(shí)的URI/URL,即在任何重寫(xiě)操作之前的URI/URL。其重要性在于他們是重寫(xiě)操作重寫(xiě)URL到物理路徑名的原始依據(jù)。
示例:
SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html
SCRIPT_FILENAME=/u/rse/.www/index.html
SCRIPT_URL=/u/rse/
SCRIPT_URI=http://en1.engelschall.com/u/rse/
(3)rewrite的指令
rewrite的指令有很多比如RewriteBase 指令
RewriteBase指令顯式地設(shè)置了目錄級(jí)重寫(xiě)的基準(zhǔn)URL。在下文中,你將看到RewriteRule可以用于目錄級(jí)的配置文件中(.htaccess)并在局部范圍內(nèi)起作用,即規(guī)則實(shí)際處理的只是剝離了本地路徑前綴的一部分。處理結(jié)束后,這個(gè)路徑會(huì)被自動(dòng)地附著回去。默認(rèn)值是"RewriteBase physical-directory-path"。
在對(duì)一個(gè)新的URL進(jìn)行替換時(shí),此模塊必須把這個(gè)URL重新注入到服務(wù)器處理中。為此,它必須知道其對(duì)應(yīng)的URL前綴或者說(shuō)URL基準(zhǔn)。通常,此前綴就是對(duì)應(yīng)的文件路徑。但是,大多數(shù)網(wǎng)站URL不是直接對(duì)應(yīng)于其物理文件路徑的,因而一般不能做這樣的假定! 所以在這種情況下,就必須用RewriteBase指令來(lái)指定正確的URL前綴。
如果你的網(wǎng)站服務(wù)器URL不是與物理文件路徑直接對(duì)應(yīng)的,而又需要使用RewriteBase指令,則必須在每個(gè)對(duì)應(yīng)的.htaccess文件中指定RewriteRule 。
例如,目錄級(jí)配置文件內(nèi)容如下:
/abc/def/.htaccess -- /abc/def 目錄的配置文件
注意:/abc/def 是 /xyz 的物理路徑(例如存在一條'Alias /xyz /abc/def'指令)。
RewriteEngine On
讓服務(wù)器知道我們使用的是 /xyz 而不是物理路徑 /abc/def
RewriteBase /xyz
重寫(xiě)規(guī)則
RewriteRule ^oldstuff\.html$ newstuff.html
注:上述例子中,對(duì)/xyz/oldstuff.html的請(qǐng)求被正確地重寫(xiě)為對(duì)物理文件/abc/def/newstuff.html的請(qǐng)求。
以下列出了內(nèi)部處理的詳細(xì)步驟:
請(qǐng)求:
/xyz/oldstuff.html
內(nèi)部處理過(guò)程:
/xyz/oldstuff.html -> /abc/def/oldstuff.html (per-server Alias)
/abc/def/oldstuff.html -> /abc/def/newstuff.html (per-dir RewriteRule)
/abc/def/newstuff.html -> /xyz/newstuff.html (per-dir RewriteBase)
/xyz/newstuff.html -> /abc/def/newstuff.html (per-server Alias)
結(jié)果:
/abc/def/newstuff.html
雖然這個(gè)過(guò)程看來(lái)很繁復(fù),但是由于目錄級(jí)重寫(xiě)的到來(lái)時(shí)機(jī)已經(jīng)太晚了,它不得不把這個(gè)(重寫(xiě))請(qǐng)求重新注入到Apache核心中,所以Apache內(nèi)部確實(shí)是這樣處理的。但是:它的開(kāi)銷(xiāo)并不象看起來(lái)的那樣大,因?yàn)橹匦伦⑷胪耆贏pache服務(wù)器內(nèi)部進(jìn)行,而且這樣的過(guò)程在Apache內(nèi)部也為其他許多操作所使用。所以,你可以充分信任其設(shè)計(jì)和實(shí)現(xiàn)是正確的。
- 推薦!各類(lèi)建站程序偽靜態(tài)規(guī)則代碼
- 詳細(xì)的DedeCMS(織夢(mèng))目錄權(quán)限安全設(shè)置教程
- iis安全設(shè)置全方位教程
- 巧妙出招致勝服務(wù)器管理
- Win Server 2003個(gè)人網(wǎng)絡(luò)服務(wù)器安全攻略
- Windows 2003校園Web服務(wù)器常見(jiàn)問(wèn)題
- 清除IIS配置文件后門(mén)隱患
- Web服務(wù)器和應(yīng)用程序服務(wù)器有什么區(qū)別
- 虛擬主機(jī)下asp.net 2.0的導(dǎo)航控件treeview,menu等出錯(cuò)
- IIS6.0服務(wù)器架站無(wú)法訪(fǎng)問(wèn)解決方案總結(jié)
- 圖解支持多語(yǔ)言環(huán)境的IIS服務(wù)器配置
- IIS服務(wù)器排錯(cuò)指南及錯(cuò)誤代碼大全
Web服務(wù)器教程Rss訂閱服務(wù)器教程搜索
Web服務(wù)器教程推薦
- 輕松架設(shè)Win2003中WEB服務(wù)器
- apache2.2.8在windows2003下的安全設(shè)置
- nginx虛擬主機(jī)防webshell完美版
- apache 封 用戶(hù)IP 的方法
- 如何測(cè)試 Macintosh Web 服務(wù)器
- IIS開(kāi)啟GZIP壓縮效率對(duì)比及部署方法
- IIS VS Nginx 如何合理對(duì)比以及看待IIS和Nginx的性能
- 虛擬主機(jī)下asp.net 2.0的導(dǎo)航控件treeview,menu等出錯(cuò)
- Web文件的ContentType類(lèi)型大全
- Apache服務(wù)器限制并發(fā)連接和下載速度
- 相關(guān)鏈接:
- 教程說(shuō)明:
Web服務(wù)器教程-httpd.conf文件配置
。