摘要:一個服務的配置文件非常重要,弄懂配置文件是熟練掌握服務的必要前提。 一、httpd-2.2常見文件介紹 (1)配置文件: 主配置文件儘量別改,改自己的子配置文件 /etc/httpd/conf/httpd.conf 主配置文件 /etc/httpd/conf.d/*.conf 自配置文件 檢查 ...
摘要:一個服務的配置文件非常重要,弄懂配置文件是熟練掌握服務的必要前提。
一、httpd-2.2常見文件介紹
主配置文件儘量別改,改自己的子配置文件
/etc/httpd/conf/httpd.conf 主配置文件
/etc/httpd/conf.d/*.conf 自配置文件
service httpd configtest centos7不支持
service {start|stop|restart|status|configtest|reload} httpd
主進程文件 :服務起來後會自動生成,可以查進程pid,最後不要手動加
幫助文檔包:httpd-manual ,按完包後,重啟服務,就能看幫助文檔,沒網也可以看
# grep "Section" /etc/httpd/conf/httpd.conf 人為的分成3大段,方便管理,可以隨便放
### Section 1: Global Environment 全局環境配置
### Section 2: 'Main' server configuration 主伺服器
### Section 3: Virtual Hosts 虛擬主機,全是註釋,預設沒有
二、Httpd 2.2 常見配置:可以在官網或安裝幫助包查看幫助
vim /etc/httpd/conf/httpd.conf 總配置文件
1、啟動報錯:提示沒有名字fqdn
在總配置文件搜索 /ServerName,把註釋去掉,隨便寫,最好寫自己的網站名;啟動就不報錯了
修改後:
2、顯示伺服器版本信息
ServerTokens:管理響應首部信息的,顯示伺服器版本信息
搜索/ServerTokens,文件預設是OS,可以註釋掉、刪掉,有預設值full
ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
配置文件在的設置 首部顯示的信息
① ServerTokens Prod[uctOnly]:Server: Apache
② ServerTokens Major: Server:Apache/2
③ ServerTokens Minor: Server:Apache/2.0
④ ServerTokens Min[imal]: Server:Apache/2.0.41
⑤ ServerTokens OS: Server:Apache/2.0.41 (Unix)
⑥ ServerTokens Full (or not specified):Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhost basis. After version 2.0.44, this directive also controls the information presented by the ServerSignature directive.
建議使用:ServerTokens Prod 安全,顯示越詳細越不安全
可以查看幫助信息,要安裝httpd-manual包,幫助信息很詳細
實例:cur -I 192.168.37.106 查詢頭部信息
3、修改監聽的IP和Port
Listen [IP:]PORT,不要隨意更改,可以用於只想讓特定的ip訪問,不讓其他人訪問
(2) Listen 指令至少一個,可重覆出現多次,寫多個,不能為空或註釋掉,註釋掉服務起不來
Listen 8080 寫多個就可開啟多個埠,但是訪問的還是同一個網站
3、持久連接
Persistent Connection :連接持久建立,每個資源獲取完成後不會斷開連接,而是繼續等待其它的請求完成,預設關閉持久連接 KeepAlive Off
副作用:對併發訪問量較大的伺服器,持久連接功能會使用有些請求得不到響應
4 、MPM( Multi-Processing Module )多路處理模塊
(1)MPM 工作模式介紹:prefork、worker、 event(試驗階段)
① prefork :多進程I/O 模型,每個進程響應一個請求,預設模型
一個主進程 :生成和回收n個子進程 , 創建套接字,不響應請求
多個子進程:工作work 進程,每個子進程處理一個請求;系統初始時,預先生成多個空閑進程,等待請求,最大不超過1024個
② worker :復用的多進程I/O 模型, 多進程多線程,IIS 使用此模型
一個主進程: 生成m 個子進程,每個子進程負責生n個線程,每個線程響應一個請求 ,併發響應請求:m*n
一個主進程:生成m個子進程,每個進程直接響應n個請求,併發響應請求:m*n ,有專門的線程來管理這些keep-alive 類型的監控線程,當有真實請求時, 將請求傳遞給服務線程,執行完畢後,又允許釋放 。這樣增強了高併發場景下的請求處理力 能力
httpd-2.2: event 測試版 ,centos6 預設
httpd-2.4 :event 穩定版,centos7 預設
註意:httpd-2.2 不支持同時編譯多個模塊,所以只能編譯時選定一個;rpm 安裝的包提供三個二進位程式文件,分別用於實現對不同MPM 機制的支持
預設為/usr/sbin/httpd, 即prefork 模式
動態模塊路徑:/usr/lib64/httpd/modules
① HTTPD=/usr/sbin/httpd.worker 預設是被註釋的,去掉註釋就切換到worker程式了
② Httpd 2.4 與之不同
配置文件:/etc/httpd/conf.modules.d/00-mpm.conf
(4)prefork 的預設配置:主配置文件中,搜索/prefork
MinSpareServers 5 最小的空閑進程,先預留,不夠就生成
MaxRequestsPerChild 4000 子進程最多能處理的請求數量。在處理MaxRequestsPerChild 個請求之後, 子進程將會被父進程終止,這時候子進程占用的記憶體就會釋放( 為0時永遠不釋放)
(5) worker 的預設配置:主配置文件中,搜索/worker
StartServers 4 一開啟服務就準備4個進程,4x25=100線程
MaxSpareThreads 75 最大空閑75線程,和上邊衝突,開服務先開啟4個進程,再殺死1個進程
ThreadsPerChild 25 每個子進程最大25個線程
(6) 測試性能:ab命令 yum -y install httpd-tools
ab -c 100 -n 1000 http://192.168.30.106/
結果:發現prefork和worker性能沒有什麼較大的差異
5 、DSO:Dynamic Shared Object
① 載入動態模塊配置:/etc/httpd/conf/httpd.conf 主配置文件
② 格式:
LoadModule <mod_name> <mod_path>
模塊文件路徑可使用相對路徑:相對於ServerRoot 服務的根(設置的為/etc/httpd)
③ httpd -M 可以查詢模塊信息,若刪除或註釋掉一個模塊,那個模塊的功能就會禁用,且httpd -M 查詢不到
因此,當我們需要用PHP時,可以寫入PHP的模塊,就能使用了
6 、定義'Main' server (主站點) 的文檔頁面路徑
DocumentRoot 指向的路徑為URL 路徑的起始位置
① 可以寫多行,但是下邊的會覆蓋上邊的,最後還是使用下邊的,寫到自配置文件一樣,因為子配置文件Include conf.d/*.conf在這行設置的上邊,會被這行設置覆蓋。
http:/192.168.30.106/--> /app/site1/index.html
7、定義站點主頁面
格式:DirectoryIndex index.html index.html.var
① 查詢http://192.168.30.106/ 及其子目錄時,不指定文件,可以預設打開目錄下的index.html文件
② 若沒有設置中的兩個文件,看其他設置:下設置9,預設是報錯;
有特定設置會顯示特定設置,如首頁;子配置文件 /etc/httpd/conf.d/welcome.conf 有設置,若只有 / 或多個,目錄下沒有index.html,就顯示報錯頁面,welcome.conf這個設置優先順序高,安全
8 、站點訪問控制常見機制
可基於兩種機制指明對哪些資源進行何種訪問控制訪問控制機制有兩種:客戶端來源地址,用戶賬號
例:子配置文件,/etc/httpd/conf.d/welcome.conf 的設置
<FilesMatch "\.(gif|jpe?g|png)$"> 正則
<LocationMatch "/(extra|special)/data">
9 、<Directory> 中"基於源地址"實現訪問控制
(1) Options :後跟1 個或多個以空白字元分隔的選項列表,可在總配置文件中修改,也可從創建一個自配置文件中修改設置
Indexes :指明的URL 路徑下不存在與定義的主頁面資源相符的資源文件時,上設置7,返回索引列表給用戶,預設是不允許,加上不安全;有需要的時候,例如做yum源的時候
FollowSymLinks :允許訪問符號所指向的源文件,例:鏈接文件,預設允許
例:vim /etc/httpd/conf.d/test.conf 子配置文件
(2) AllowOverride,和上邊實現的效果一樣,就是把設置放在目錄的隱藏文件下.htaccess
與訪問控制相關的哪些指令可以放在指定目錄下的.htaccess(由AccessFileName 指定)文件中,覆蓋之前的,.htaccess是主配置文件中設置指定的
用法:vim /etc/httpd/conf.d/test.conf
AllowOverride None :.htaccess 文件無效
AllowOverride AuthConfig Indexes 除了AuthConfig和Indexes的其它指令都無法覆蓋
然後在.htaccess文件中設置,.htaccess放在所需要控制的目錄下,例bbs目錄
options +indexes -followsymlinks
(3) order 和allow 、deny,在2.4中已無效,有另外的許可權控制
order :定義生效次序;寫在後面的表示預設法則,覆蓋,優先順序高
例:除107,這個網段的其他ip可以訪問,但這個網段以外,都拒絕
③ 沒在deny、allow中設置的,看allow/deny誰在後邊,誰優先順序高
10 、日誌設定
debug, info, notice, warn,error
定義訪問日誌格式:LogFormat format strings,
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog logs/access_log combined
http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
• %l 遠程用戶, 啟用mod_ident 才有效,通常為減號"-" "
• %u 驗證(basic ,digest )遠程用戶, 非登錄訪問時,為一個減號"-"
• %r First line of request ,即表示請求報文的首行;記錄了此次請求的"方法","URL" 以及協議版本
• %b 響應報文的大小,純數據大小,單位是位元組;不包括響應報文http 首部
• %{Referer}i 請求報文中首部"referer" 的值;即從哪個頁面中的超鏈接跳轉至當前頁面的
• %{User-Agent}i 請求報文中首部"User-Agent" 的值;即發出請求的應用程式
查詢日誌:tail /var/log/httpd/access_log
AddDefaultCharset UTF-8(全球) 預設
中文字元集:GBK, GB2312(中文簡體), GB18030
格式: Alias /URL/ "/PATH/" /URL/有沒有都無所謂,虛擬的目錄
例:http://www.magedu.com/download/bash.rpm ==> /rpms/pub/bash.rpm
http://www.magedu.com/images/logo.png ==> /www/htdocs/images/logo.png
httpd -M | grep status 查詢這個模塊有沒有被載入
LoadModule status_module modules/mod_status.so 這個模塊在總配置文件有載入
<Location /server-status> 本來是註釋掉的
SetHandler server-status2 這個名字隨便寫,只要訪問時用這個名字就行
ExtendedStatus On 顯示擴展信息,預設也是註釋的
"C"正處於關閉狀態 "L"記錄日誌 "G"優雅的終止,溫柔的斷開