怎樣進(jìn)行Apache的配置

apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改。?
主站點(diǎn)的配置(基本配置)?

(1)?基本配置:?
ServerRoot?“/mnt/software/apache2″?#你的apache軟件安裝的位置。其它指定的目錄如果沒有指定絕對(duì)路徑,則目錄是相對(duì)于該目錄。?

PidFile?logs/httpd.pid?#第一個(gè)httpd進(jìn)程(所有其他進(jìn)程的父進(jìn)程)的進(jìn)程號(hào)文件位置。?

Listen?80?#服務(wù)器監(jiān)聽的端口號(hào)。?

ServerName?www.clusting.com:80?#主站點(diǎn)名稱(網(wǎng)站的主機(jī)名)。?

ServerAdmin?admin@clusting.com?#管理員的郵件地址。?

DocumentRoot?“/mnt/web/clusting”?#主站點(diǎn)的網(wǎng)頁(yè)存儲(chǔ)位置。?

以下是對(duì)主站點(diǎn)的目錄進(jìn)行訪問控制:?

?
Options?FollowSymLinks?
AllowOverride?None?
Order?allow,deny?
Allow?from?all?
?

在上面這段目錄屬性配置中,主要有下面的選項(xiàng):?

Options:配置在特定目錄使用哪些特性,常用的值和基本含義如下:?

ExecCGI:?在該目錄下允許執(zhí)行CGI腳本。?

FollowSymLinks:?在該目錄下允許文件系統(tǒng)使用符號(hào)連接。?

Indexes:?當(dāng)用戶訪問該目錄時(shí),如果用戶找不到DirectoryIndex指定的主頁(yè)文件(例如index.html),則返回該目錄下的文件列表給用戶。?

SymLinksIfOwnerMatch:?當(dāng)使用符號(hào)連接時(shí),只有當(dāng)符號(hào)連接的文件擁有者與實(shí)際文件的擁有者相同時(shí)才可以訪問。?

其它可用值和含義請(qǐng)參閱:http://www.clusting.com/Apache/ApacheManual/mod/core.html#options?

AllowOverride:允許存在于.htaccess文件中的指令類型(.htaccess文件名是可以改變的,其文件名由AccessFileName指令決定):?
None:?當(dāng)AllowOverride被設(shè)置為None時(shí)。不搜索該目錄下的.htaccess文件(可以減小服務(wù)器開銷)。?

All:?在.htaccess文件中可以使用所有的指令。?

其他的可用值及含義(如:Options?FileInfo?AuthConfig?Limit等),請(qǐng)參看:?http://www.clusting.com/Apache/ApacheManual/mod/core.html#AllowOverride?

Order:控制在訪問時(shí)Allow和Deny兩個(gè)訪問規(guī)則哪個(gè)優(yōu)先:?

Allow:允許訪問的主機(jī)列表(可用域名或子網(wǎng),例如:Allow?from?192.168.0.0/16)。?

Deny:拒絕訪問的主機(jī)列表。?

更詳細(xì)的用法可參看:http://www.clusting.com/Apache/ApacheManual/mod/mod_access.html#order?

DirectoryIndex?index.html?index.htm?index.php?#主頁(yè)文件的設(shè)置(本例將主頁(yè)文件設(shè)置為:index.html,index.htm和index.php)?

(2)?服務(wù)器的優(yōu)化?(MPM:?Multi-Processing?Modules)?
apache2主要的優(yōu)勢(shì)就是對(duì)多處理器的支持更好,在編譯時(shí)同過使用–with-mpm選項(xiàng)來決定apache2的工作模式。如果知道當(dāng)前的apache2使用什么工作機(jī)制,可以通過httpd?-l命令列出apache的所有模塊,就可以知道其工作方式:?

prefork:如果httpd?-l列出prefork.c,則需要對(duì)下面的段進(jìn)行配置:?

?

StartServers?5?#啟動(dòng)apache時(shí)啟動(dòng)的httpd進(jìn)程個(gè)數(shù)。?

MinSpareServers?5?#服務(wù)器保持的最小空閑進(jìn)程數(shù)。?

MaxSpareServers?10?#服務(wù)器保持的最大空閑進(jìn)程數(shù)。?

MaxClients?150?#最大并發(fā)連接數(shù)。?

MaxRequestsPerChild?1000?#每個(gè)子進(jìn)程被請(qǐng)求服務(wù)多少次后被kill掉。0表示不限制,推薦設(shè)置為1000。?

?

在該工作模式下,服務(wù)器啟動(dòng)后起動(dòng)5個(gè)httpd進(jìn)程(加父進(jìn)程共6個(gè),通過ps?-ax|grep?httpd命令可以看到)。當(dāng)有用戶連接時(shí),apache會(huì)使用一個(gè)空閑進(jìn)程為該連接服務(wù),同時(shí)父進(jìn)程會(huì)fork一個(gè)子進(jìn)程。直到內(nèi)存中的空閑進(jìn)程達(dá)到MaxSpareServers。該模式是為了兼容一些舊版本的程序。我缺省編譯時(shí)的選項(xiàng)。?

worker:如果httpd?-l列出worker.c,則需要對(duì)下面的段進(jìn)行配置:?

?

StartServers?2?#啟動(dòng)apache時(shí)啟動(dòng)的httpd進(jìn)程個(gè)數(shù)。?

MaxClients?150?#最大并發(fā)連接數(shù)。?

MinSpareThreads?25?#服務(wù)器保持的最小空閑線程數(shù)。?

MaxSpareThreads?75?#服務(wù)器保持的最大空閑線程數(shù)。?

ThreadsPerChild?25?#每個(gè)子進(jìn)程的產(chǎn)生的線程數(shù)。?

MaxRequestsPerChild?0?#每個(gè)子進(jìn)程被請(qǐng)求服務(wù)多少次后被kill掉。0表示不限制,推薦設(shè)置為1000。?

?

該模式是由線程來監(jiān)聽客戶的連接。當(dāng)有新客戶連接時(shí),由其中的一個(gè)空閑線程接受連接。服務(wù)器在啟動(dòng)時(shí)啟動(dòng)兩個(gè)進(jìn)程,每個(gè)進(jìn)程產(chǎn)生的線程數(shù)是固定的(ThreadsPerChild決定),因此啟動(dòng)時(shí)有50個(gè)線程。當(dāng)50個(gè)線程不夠用時(shí),服務(wù)器自動(dòng)fork一個(gè)進(jìn)程,再產(chǎn)生25個(gè)線程。?

perchild:如果httpd?-l列出perchild.c,則需要對(duì)下面的段進(jìn)行配置:?

?

NumServers?5?#服務(wù)器啟動(dòng)時(shí)啟動(dòng)的子進(jìn)程數(shù)?

StartThreads?5?#每個(gè)子進(jìn)程啟動(dòng)時(shí)啟動(dòng)的線程數(shù)?

MinSpareThreads?5?#內(nèi)存中的最小空閑線程數(shù)?

MaxSpareThreads?10?#最大空閑線程數(shù)?

MaxThreadsPerChild?2000?#每個(gè)線程最多被請(qǐng)求多少次后退出。0不受限制。?

MaxRequestsPerChild?10000?#每個(gè)子進(jìn)程服務(wù)多少次后被重新fork。0表示不受限制。?

?

該模式下,子進(jìn)程的數(shù)量是固定的,線程數(shù)不受限制。當(dāng)客戶端連接到服務(wù)器時(shí),又空閑的線程提供服務(wù)。?如果空閑線程數(shù)不夠,子進(jìn)程自動(dòng)產(chǎn)生線程來為新的連接服務(wù)。該模式用于多站點(diǎn)服務(wù)器。?
(3)?HTTP返頭回信息配置:?

ServerTokens?Prod?#該參數(shù)設(shè)置http頭部返回的apache版本信息,可用的值和含義如下:?

Prod:僅軟件名稱,例如:apache?
Major:包括主版本號(hào),例如:apache/2?
Minor:包括次版本號(hào),例如:apache/2.0?
Min:僅apache的完整版本號(hào),例如:apache/ 2.0.54?
OS:包括操作系統(tǒng)類型,例如:apache/2.0.54(Unix)?
Full:包括apache支持的模塊及模塊版本號(hào),例如:Apache/2.0.54?(Unix)?mod_ssl/2.0.54?OpenSSL/0.9.7g?
ServerSignature?Off?#在頁(yè)面產(chǎn)生錯(cuò)誤時(shí)是否出現(xiàn)服務(wù)器版本信息。推薦設(shè)置為Off?

(4)?持久性連接設(shè)置?

KeepAlive?On?#開啟持久性連接功能。即當(dāng)客戶端連接到服務(wù)器,下載完數(shù)據(jù)后仍然保持連接狀態(tài)。?

MaxKeepAliveRequests?100?#一個(gè)連接服務(wù)的最多請(qǐng)求次數(shù)。?

KeepAliveTimeout?30?#持續(xù)連接多長(zhǎng)時(shí)間,該連接沒有再請(qǐng)求數(shù)據(jù),則斷開該連接。缺省為15秒。?

別名設(shè)置?
對(duì)于不在DocumentRoot指定的目錄內(nèi)的頁(yè)面,既可以使用符號(hào)連接,也可以使用別名。別名的設(shè)置如下:?

Alias?/download/?“/var/www/download/”?#訪問時(shí)可以輸入:http://www.custing.com/download/?

?#對(duì)該目錄進(jìn)行訪問控制設(shè)置?
Options?Indexes?MultiViews?
AllowOverride?AuthConfig?
Order?allow,deny?
Allow?from?all?
?

CGI設(shè)置?

ScriptAlias?/cgi-bin/?“/mnt/software/apache2/cgi-bin/”?#?訪問時(shí)可以:http://www.clusting.com/cgi-bin/?。但是該目錄下的CGI腳本文件要加可執(zhí)行權(quán)限!?

?#設(shè)置目錄屬性?
AllowOverride?None?
Options?None?
Order?allow,deny?
Allow?from?all?
?

個(gè)人主頁(yè)的設(shè)置?(public_html)?

UserDir?public_html?(間用戶的主頁(yè)存儲(chǔ)在用戶主目錄下的public_html目錄下?URL?http://www.clusting.com/~bearzhang/file.html?將讀取?/home/bearzhang/public_html/file.html?文件)?

chmod?755?/home/bearzhang?#使其它用戶能夠讀取該文件。?

UserDir?/var/html?(the?URL?http://www.clusting.com/~bearzhang/file.html?將讀取?/var/html/bearzhang/file.html)?

UserDir?/var/www/*/docs?(the?URL?http://www.clusting.com/~bearzhang/file.html?將讀取?/var/www/bearzhang/docs/file.html)?

日志的設(shè)置?

(1)錯(cuò)誤日志的設(shè)置?
ErrorLog?logs/error_log?#日志的保存位置?
LogLevel?warn?#日志的級(jí)別?

顯示的格式日下:?
[Mon?Oct?10?15:54:29?2005]?[error]?[client?192.168.10.22]?access?to?/download/?failed,?reason:?user?admin?not?allowed?access?

(2)訪問日志設(shè)置?

日志的缺省格式有如下幾種:?
LogFormat?“%h?%l?%u?%t?“%r”?%>s?%b?“%{Referer}i”?“%{User-Agent}i””?combined?
LogFormat?“%h?%l?%u?%t?“%r”?%>s?%b”?common?#common為日志格式名稱?
LogFormat?“%{Referer}i?->?%U”?referer?
LogFormat?“%{User-agent}i”?agent?
CustomLog?logs/access_log?common?

格式中的各個(gè)參數(shù)如下:?

%h?–客戶端的ip地址或主機(jī)名?

%l?–The?這是由客戶端?identd?判斷的RFC?1413身份,輸出中的符號(hào)?“-”?表示此處信息無(wú)效。?

%u?–由HTTP認(rèn)證系統(tǒng)得到的訪問該網(wǎng)頁(yè)的客戶名。有認(rèn)證時(shí)才有效,輸出中的符號(hào)?“-”?表示此處信息無(wú)效。?

%t?–服務(wù)器完成對(duì)請(qǐng)求的處理時(shí)的時(shí)間。?

“%r”?–引號(hào)中是客戶發(fā)出的包含了許多有用信息的請(qǐng)求內(nèi)容。?

%>s?–這個(gè)是服務(wù)器返回給客戶端的狀態(tài)碼。?

%b?–最后這項(xiàng)是返回給客戶端的不包括響應(yīng)頭的字節(jié)數(shù)。?

“%{Referer}i”?–此項(xiàng)指明了該請(qǐng)求是從被哪個(gè)網(wǎng)頁(yè)提交過來的。?

“%{User-Agent}i”?–此項(xiàng)是客戶瀏覽器提供的瀏覽器識(shí)別信息。?

下面是一段訪問日志的實(shí)例:?
192.168.10.22?–?bearzhang?[10/Oct/2005:16:53:06?+0800]?“GET?/download/?HTTP/1.1”?200?1228?
192.168.10.22?–?–?[10/Oct/2005:16:53:06?+0800]?“GET?/icons/blank.gif?HTTP/1.1”?304?–?
192.168.10.22?–?–?[10/Oct/2005:16:53:06?+0800]?“GET?/icons/back.gif?HTTP/1.1”?304?–?

各參數(shù)的詳細(xì)解釋,請(qǐng)參閱:http://www.clusting.com/Apache/ApacheManual/logs.html?

用戶認(rèn)證的配置?
(1)in?the?httpd.conf:?
AccessFileName?.htaccess?
………?
Alias?/download/?“/var/www/download/”?
?
Options?Indexes?
AllowOverride?AuthConfig?
?
(2)?create?a?password?file:?
/usr/local/apache2/bin/htpasswd?-c?/var/httpuser/passwords?bearzhang?

(3)onfigure?the?server?to?request?a?password?and?tell?the?server?which?users?are?allowed?access.?
vi?/var/www/download/.htaccess:?
AuthType?Basic?
AuthName?“Restricted?Files”?
AuthUserFile?/var/httpuser/passwords?
Require?user?bearzhang?
#Require?valid-user?#all?valid?user?

虛擬主機(jī)的配置?
(1)基于IP地址的虛擬主機(jī)配置?
Listen?80?
?
DocumentRoot?/www/example1?
ServerName?www.example1.com?
?
?
DocumentRoot?/www/example2?
ServerName?www.example2.org?
?

(2)?基于IP和多端口的虛擬主機(jī)配置?
Listen?172.20.30.40:80?
Listen?172.20.30.40:8080?
Listen?172.20.30.50:80?
Listen?172.20.30.50:8080?

?
DocumentRoot?/www/example1-80?
ServerName?www.example1.com?
?

?
DocumentRoot?/www/example1-8080?
ServerName?www.example1.com?
?

?
DocumentRoot?/www/example2-80?
ServerName?www.example1.org?
?

?
DocumentRoot?/www/example2-8080?
ServerName?www.example2.org?
?

(3)單個(gè)IP地址的服務(wù)器上基于域名的虛擬主機(jī)配置:?
#?Ensure?that?Apache?listens?on?port?80?
Listen?80?

#?Listen?for?virtual?host?requests?on?all?IP?addresses?
NameVirtualHost?*:80?

?
DocumentRoot?/www/example1?
ServerName?www.example1.com?
ServerAlias?example1.com.?*.example1.com?
#?Other?directives?here?
?

?
DocumentRoot?/www/example2?
ServerName?www.example2.org?
#?Other?directives?here?
?

(4)在多個(gè)IP地址的服務(wù)器上配置基于域名的虛擬主機(jī):?
Listen?80?

#?This?is?the?“main”?server?running?on?172.20.30.40?
ServerName?server.domain.com?
DocumentRoot?/www/mainserver?

#?This?is?the?other?address?
NameVirtualHost?172.20.30.50?

?
DocumentRoot?/www/example1?
ServerName?www.example1.com?
#?Other?directives?here?…?
?

?
DocumentRoot?/www/example2?
ServerName?www.example2.org?
#?Other?directives?here?…?
?

(5)在不同的端口上運(yùn)行不同的站點(diǎn)(基于多端口的服務(wù)器上配置基于域名的虛擬主機(jī)):?
Listen?80?
Listen?8080?

NameVirtualHost?172.20.30.40:80?
NameVirtualHost?172.20.30.40:8080?

?
ServerName?www.example1.com?
DocumentRoot?/www/domain-80?
?

?
ServerName?www.example1.com?
DocumentRoot?/www/domain-8080?
?

?
ServerName?www.example2.org?
DocumentRoot?/www/otherdomain-80?
?

?
ServerName?www.example2.org?
DocumentRoot?/www/otherdomain-8080?
?

(6)基于域名和基于IP的混合虛擬主機(jī)的配置:?
Listen?80?

NameVirtualHost?172.20.30.40?

?
DocumentRoot?/www/example1?
ServerName?www.example1.com?
?

?
DocumentRoot?/www/example2?
ServerName?www.example2.org?
?

?
DocumentRoot?/www/example3?
ServerName?www.example3.net?
?

SSL加密的配置?

首先在配置之前先來了解一些基本概念:?

證書的概念:首先要有一個(gè)根證書,然后用根證書來簽發(fā)服務(wù)器證書和客戶證書,一般理解:服務(wù)器證書和客戶證書是平級(jí)關(guān)系。SSL必須安裝服務(wù)器證書來認(rèn)證。?因此:在此環(huán)境中,至少必須有三個(gè)證書:根證書,服務(wù)器證書,客戶端證書。?在生成證書之前,一般會(huì)有一個(gè)私鑰,同時(shí)用私鑰生成證書請(qǐng)求,再利用證書服務(wù)器的根證來簽發(fā)證書。?

SSL所使用的證書可以自己生成,也可以通過一個(gè)商業(yè)性CA(如Verisign?或?Thawte)簽署證書。?

簽發(fā)證書的問題:如果使用的是商業(yè)證書,具體的簽署方法請(qǐng)查看相關(guān)銷售商的說明;如果是知己簽發(fā)的證書,可以使用openssl自帶的CA.sh腳本工具。?

如果不為單獨(dú)的客戶端簽發(fā)證書,客戶端證書可以不用生成,客戶端與服務(wù)器端使用相同的證書。?
(1)?conf/ssl.conf?配置文件中的主要參數(shù)配置如下:?

Listen?443?
SSLPassPhraseDialog?buildin?
#SSLPassPhraseDialog?exec:/path/to/program?
SSLSessionCache?dbm:/usr/local/apache2/logs/ssl_scache?
SSLSessionCacheTimeout?300?
SSLMutex?file:/usr/local/apache2/logs/ssl_mutex?

?

#?General?setup?for?the?virtual?host?
DocumentRoot?“/usr/local/apache2/htdocs”?
ServerName?www.example.com:443?
ServerAdmin?you@example.com?
ErrorLog?/usr/local/apache2/logs/error_log?
TransferLog?/usr/local/apache2/logs/access_log?

SSLEngine?on?
SSLCipherSuite?ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL?

SSLCertificateFile?/usr/local/apache2/conf/ssl.crt/server.crt?
SSLCertificateKeyFile?/usr/local/apache2/conf/ssl.key/server.key?
CustomLog?/usr/local/apache2/logs/ssl_request_log?“%t?%h?%{SSL_PROTOCOL}x?%{SSL_CIPHER}x?“%r”?%b”?

?

(2)?創(chuàng)建和使用自簽署的證書:?
a.Create?a?RSA?private?key?for?your?Apache?server?
/usr/local/openssl/bin/openssl?genrsa?-des3?-out?/usr/local/apache2/conf/ssl.key/server.key?1024?

b.?Create?a?Certificate?Signing?Request?(CSR)?
/usr/local/openssl/bin/openssl?req?-new?-key?/usr/local/apache2/conf/ssl.key/server.key?-out?/usr/local/apache2/conf/ssl.key/server.csr?

c.?Create?a?self-signed?CA?Certificate?(X509?structure)?with?the?RSA?key?of?the?CA?
/usr/local/openssl/bin/openssl?req?-x509?-days?365?-key?/usr/local/apache2/conf/ssl.key/server.key?-in?/usr/local/apache2/conf/ssl.key/server.csr?-out?/usr/local/apache2/conf/ssl.crt/server.crt?

/usr/local/openssl/bin/openssl?genrsa?1024?-out?server.key?
/usr/local/openssl/bin/openssl?req?-new?-key?server.key?-out?server.csr?
/usr/local/openssl/bin/openssl?req?-x509?-days?365?-key?server.key?-in?server.csr?-out?server.crt?

(3)?創(chuàng)建自己的CA(認(rèn)證證書),并使用該CA來簽署服務(wù)器的證書。?
mkdir?/CA?
cd?/CA?
cp?openssl-0.9.7g/apps/CA.sh?/CA?
./CA.sh?-newca?
openssl?genrsa?-des3?-out?server.key?1024?
openssl?req?-new?-key?server.key?-out?server.csr?
cp?server.csr?newreq.pem?
./CA.sh?-sign?

cp?newcert.pem?/usr/local/apache2/conf/ssl.crt/server.crt
cp?server.key?/usr/local/apache2/conf/ssl.key/

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊6 分享