Apache配置文件詳細說明(僅學習)
時間:2023-06-28 11:54:01 | 來源:網(wǎng)站運營
時間:2023-06-28 11:54:01 來源:網(wǎng)站運營
Apache配置文件詳細說明(僅學習):本文鏈接:
https://blog.csdn.net/tellmewhyto/article/details/81225937一、背景最近想用php寫一個數(shù)據(jù)展示的小項目用于平時的工作,然后就想使用集成環(huán)境phpstudy(自己懶,嫌配置apache、mysql、php有點麻煩),但是在啟動phpstudy的時候卻一直報錯“[mpm_winnt:crit] [pid 1248:tid 392] AH02538: Child: Parent process exited abruptly. Child process is ending”
我一臉懵逼,之前使用phpstudy都是挺好的,這次為什么主進程會被自動kill掉呢?(apache主進程pid保存在文件logs/httpd.pid中,該pid用于識別主進程),然后開始了慢慢分析:主進程被kill了,說明apache在加載配置的時候失敗,對于apache的配置文件,我只綁定過虛擬域名,所以開始查看conf/vhost.conf文件中關(guān)于虛擬域名的配置:
然而粗心的我并沒發(fā)現(xiàn)其中的配置有問題,還以為是apache在加載vhost.conf的時候和其他配置文件有沖突導致的主進程自己被kill掉了(腦回路比較大).由此,開始了apache的小小的學習之路,在這里記錄一下。
二、Apache httpd.conf配置文件參數(shù)說明
ServerRoot : Apache的主目錄
Listen:apache監(jiān)聽的端口號
LoadModule:加載動態(tài)模塊
User/Group:apache進程執(zhí)行者
ServerAdmin:服務(wù)器返回客戶端的錯誤信息中會包含該郵件地址,所以推薦寫郵箱地址
ServerName:服務(wù)器域名,無需配置
DocumentRoot:網(wǎng)站根目錄(apache運行項目的根地址)
Option指令是Apache配置文件中比較常見的指令,該指令可以在Apache服務(wù)器核心配置(server config)、虛擬主機配置(virtual host)、特定目錄配置(directory)以及.htaccess文件中使用,該指令主要作用是控制特定目錄啟動哪些服務(wù)器特性
Options +Indexes :加上該指令可以在網(wǎng)頁上查看項目某個目錄下的所有文件,例如訪問/index 等同訪問 index.php或index.html
Options +FollowSymLinks:服務(wù)器允許在此目錄中使用符號鏈接。如果該配置項位于<Location>配置段中,將會被忽略掉
Options +All:默認設(shè)置,開啟除MultiViews之外的特性
Options +None:不啟動任何服務(wù)器特性
Options +ExceCGI:允許使用mod_cgi木塊執(zhí)行CGI腳本
Options +MultiViews:允許使用mod_negotiation模塊提供內(nèi)容協(xié)商的“多重視圖”,即自動選擇最匹配客戶端要求的文件
Options +SymLInksIfOwnerMatch:只有當符號連接和符號連接指向的目標文件或目錄的所有者是同一用戶時,才會使用符號連接。如果該配置選項位于<Location>配置段中,將會被忽略
Options +includes:允許使用mod_include模塊提供的服務(wù)器端包含功能
“+”的選項將強制覆蓋當前的可選項設(shè)置
“-”的選項將強制從當前可選項設(shè)置中除去
Allow from allRequire all granted :允許所有有權(quán)限的人訪問apache的運行目錄
AllowOverride None/all:禁止(允許)用戶對目錄配置文件(.htaccess)修改,不建議開啟
Order allow,deny :apache會按照Order中的最后一條規(guī)則為準,如果allow all 但是deny 某個ip,最后會deny 某個ip
<IfModule>容器作用于模塊,如果該模塊載入的話就會執(zhí)行里面的內(nèi)容
DirectoryIndex index.html index.php :#優(yōu)先級從左往右一次遞減(會優(yōu)先訪問index.html)
<Files >:提供基于文件名的訪問控制. 該段將根據(jù)他們在配置文件中出現(xiàn)的順序被處理:在<directory>段和.htaccess文件被處理之后,但是在<Location>段之前,<Files>能嵌入到<Directory>段中來限制作用的文件范圍。也可以用于.htaccess文件中,允許用戶在文件層面上控制對文件的訪問
上面一行是錯誤日志的存放位置
下面一行是分割日志的操作
LogLevel :用于調(diào)整記錄在錯誤日志中的信息的詳細程度:
emerg:緊急(系統(tǒng)無法使用)
alert:必須立即采取措施
crit:致命情況
error:錯誤情況
warn:警告情況
notice:一般重要情況
info:普通信息
debug:調(diào)試信息
(當指定了某個級別的時候,高于它級別的信息會被記錄)
LogFormat:定義文件的記錄方式,其中各個代表的指令如下:
ErrorDocument:批示當遇到錯誤的時候服務(wù)器將返回客戶端什么樣的回答,例如
ErrorDocument 404 /missing.html
當服務(wù)器返回的錯誤碼是404的時候,服務(wù)器返回客戶端這個missing.html頁面
EnableMMAP:指示httpd在遞送中如果讀取一個文件的內(nèi)容,是否可以使用內(nèi)存映射(會帶來性能的提高,有時會有問題)
EnableSendfile:控制httpd是否可以使用操作系統(tǒng)內(nèi)核的sendfile支持來將該文件發(fā)送到客戶端(sendfile機制避免了分開的讀和寫操作以及緩沖區(qū)分配,但是在一些平臺上會引發(fā)問題)
Include : 在服務(wù)器配置文件中引入其他的配置文件
*****寫apache配置時,千萬不能出現(xiàn)拼寫錯誤,不然服務(wù)器會一直重啟失敗的******ps:當我寫下這句話的時候,我突然意識到一定是我的vhost.conf文件配置錯了,想想都覺得搞笑......
三、問題解決
后來又重新去看了下vhost.conf文件,發(fā)現(xiàn)是DocumentRoot后面的地址
我多加了一個/導致apache一直啟動失敗....內(nèi)心一萬個
順便在這里記錄下在使用phpstudy遇到的其他問題
1.報錯:
Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in
解決:需要升級php的使用版本(建議至少使用5.6的版本)
2.
四、淺談apache工作模式
1.perfork模式常見配置如下:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
StartServers : 當開啟apache時開啟的子進程數(shù)
MinSpareServers: 服務(wù)器中最小數(shù)量的空閑進程數(shù)
MaxSpareServers: 服務(wù)器中最大數(shù)量的空閑進程數(shù)
MaxClients: apache能同時并發(fā)處理的最大請求
MaxRequestsPerChild: 每個子進程能處理的最大請求數(shù)(0表示無限,即一直不死亡)
當使用apache的perfork模式的時候,apache會開啟$startServers個進程,接著apache的空閑進程數(shù)會保持在$MinSpareServers和$MaxSpareServers之間,當站點負載比較高的時候,可以考慮同時增大這兩個值來提高apache服務(wù)的性能;另外,MaxClients是apache能同時處理的最大請求,之前在某段時間,gerrit在晚上十點后經(jīng)??ㄗ。莻€時候設(shè)置的MaxClients數(shù)是56,后來將這個值增加為102(具體設(shè)置和當時的DB能相應(yīng)的請求有關(guān)),理論上這個值越大越好,但是apache默認的限制是256,適當增加這個值也能提高性能;$MaxRequestsPerChild看上面的介紹就行了
***profork是單一線程的進程,所以每個進程在同一時間里僅能處理一個請求(也就是一個請求一個進程)******該模式比較吃資源,對于內(nèi)存的使用比較大;但優(yōu)點是比較穩(wěn)定***2.work模式常見配置如下:
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
StartServers: 當開啟apache服務(wù)時產(chǎn)生的子進程數(shù)
MaxClients: 最大數(shù)量的工作線程數(shù)量
MinSpareThreads: 最小數(shù)量的空閑線程數(shù)
MaxSpareThreads: 最大數(shù)量的空閑線程數(shù)
ThreadsPerChild: 每個子進程能產(chǎn)生的線程數(shù)量
MaxRequestsPerChild: 每個子進程能處理的最大請求數(shù)(0表示無限,即一直不死亡)
當使用apache的work模式的時候,apache會開啟$startServers個進程,該值的最大缺省值是16,加大時 也需要顯式聲明ServerLimit(最大值是20000).接著每個進程會產(chǎn)生$ThreadsPerChild個線程,當現(xiàn)有的線程數(shù)無法承受負載時,控制進程將產(chǎn)生新的子進程.$MinSpareThreads和$MaxSpareThreads的值對apache的性能影響并不大,因此可以適當調(diào)整一下就好.在此模式下,
對apache性能影響比較大的是$ThreadsPerChild,默認最大缺省值是64,如果64不夠用,這時要顯式使用 ThreadLimit指令,它的最大缺省值是20000;
*** worker是一種基于線程的模型,一個進程內(nèi)部可以啟動N個線程(最大20000個),每個線程處理一個客戶請求。理論上線程的開銷要小于進程,但是由于Linux本身對多線程特性的支持并不是太好,所以可能會導致多線程程序運行出問題的幾率比單線程程序要大的多,而且一旦一個線程出現(xiàn)問題,可能會導致整個進程出現(xiàn)問題。***3.event模式event模型是一個基于線程的、更高級的事件驅(qū)動模型,可以實現(xiàn)一個線程處理N個請求
***在apache的早期版本2.0默認prefork,2.2版本是worker,2.4版本是event.***