httpd2.2的配置文件常见设置
目錄
- 1、啟動報錯:提示沒有名字fqdn
- 2、顯示服務器版本信息
- 3、修改監聽的IP和Port
- 3、持久連接
- 4 、MPM( Multi-Processing Module )多路處理模塊
- 5 、DSO:Dynamic Shared Object
- 6 、定義'Main' server (主站點) 的文檔頁面路徑
- 7、定義站點主頁面
- 8 、站點訪問控制常見機制
- 9 、?中"基于源地址"實現訪問控制
- 10 、日志設定
?
?
?摘要:一個服務的配置文件非常重要,弄懂配置文件是熟練掌握服務的必要前提。
一、httpd-2.2常見文件介紹
(1)配置文件:
主配置文件盡量別改,改自己的子配置文件
/etc/httpd/conf/httpd.conf?主配置文件
/etc/httpd/conf.d/*.conf?自配置文件
檢查配置語法:
httpd -t 通用
service httpd configtest centos7不支持
服務腳本:/etc/rc.d/init.d/httpd
腳本配置文件:/etc/sysconfig/httpd
服務控制和啟動:
chkconfig httpd on|off
service?{start|stop|restart|status|configtest|reload}?httpd
站點網頁文檔根目錄:
/var/www/html
模塊文件路徑 :
/etc/httpd/modules 軟連接
/usr/lib64/httpd/modules
主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.worker
/usr/sbin/httpd.event
主進程文件 :服務起來后會自動生成,可以查進程pid,最后不要手動加
/etc/httpd/run/httpd.pid
日志文件目錄:
/var/log/httpd
access_log: 訪問日志
error_log :錯誤日志
幫助文檔包:httpd-manual?,按完包后,重啟服務,就能看幫助文檔,沒網也可以看
?
(2)httpd 配置文件的組成:修改前先備份,養成好習慣
# grep "Section" /etc/httpd/conf/httpd.conf ?人為的分成3大段,方便管理,可以隨便放
### Section 1: Global Environment 全局環境配置
### Section 2: 'Main' server configuration 主服務器
### Section 3: Virtual Hosts 虛擬主機,全是注釋,默認沒有
?
配置格式:directive(指令) value(值)
directive: 不區分字符大小寫
value: 為路徑時,是否區分大小寫,取決于文件系統
?
二、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,默認80
Listen [IP:]PORT,不要隨意更改,可以用于只想讓特定的ip訪問,不讓其他人訪問
(1) 省略IP 表示為0.0.0.0; 端口綁定所有ip
(2) Listen 指令至少一個,可重復出現多次,寫多個,不能為空或注釋掉,注釋掉服務起不來
Listen 80
Listen 8080 寫多個就可開啟多個端口,但是訪問的還是同一個網站
注意:改了端口,要在訪問時加上自己改的端口
(3) 修改監聽socket,重啟服務進程方可生效
?
3、持久連接
Persistent Connection :連接持久建立,每個資源獲取完成后不會斷開連接,而是繼續等待其它的請求完成,默認關閉持久連接 KeepAlive Off
斷開條件:數量限制:100
時間限制:以秒為單位, httpd-2.4 支持毫秒級
副作用:對并發訪問量較大的服務器,持久連接功能會使用有些請求得不到響應
折中:使用較短的持久連接時間
設置: KeepAlive On|Off
KeepAliveTimeout 15
MaxKeepAliveRequests 100
測試:telnet?WEB_SERVER_IP?PORT
GET /URL HTTP/1.1 ? ?模仿報文首部
Host: WEB_SERVER_IP
?
4 、MPM( Multi-Processing Module )多路處理模塊
(1)MPM 工作模式介紹:prefork、worker、 event(試驗階段)
①?prefork?:多進程I/O 模型,每個進程響應一個請求,默認模型
一個主進程 :生成和回收n個子進程 , 創建套接字,不響應請求
多個子進程:工作work 進程,每個子進程處理一個請求;系統初始時,預先生成多個空閑進程,等待請求,最大不超過1024個
②?worker?:復用的多進程I/O 模型, 多進程多線程,IIS 使用此模型
一個主進程: 生成m 個子進程,每個子進程負責生成n個線程,每個線程響應一個請求 ,并發響應請求:m*n
③?event?:事件驅動模型(worker 模型的變種)
一個主進程:生成m個子進程,每個進程直接響應n個請求,并發響應請求:m*n ,有專門的線程來管理這些keep-alive?類型的監控線程,當有真實請求時, 將請求傳遞給服務線程,執行完畢后,又允許釋放 。這樣增強了高并發場景下的請求處理力 能力
httpd-2.2: event 測試版 ,centos6 默認
httpd-2.4 :event 穩定版,centos7 默認
? 圖示:
① prefork MPM
② worker MPM
③ event MPM
注意:httpd-2.2 不支持同時編譯多個模塊,所以只能編譯時選定一個;rpm 安裝的包提供三個二進制程序文件,分別用于實現對不同MPM 機制的支持
(2)確認方法:
ps aux | grep httpd
默認為/usr/sbin/httpd, 即prefork 模式
查看模塊列表:
查看靜態編譯的模塊
httpd?-l
查看靜態編譯及動態裝載的模塊
httpd?-M
動態模塊加載:不需重啟即生效
動態模塊路徑:/usr/lib64/httpd/modules
?
(3)更換使用的httpd 程序模塊:
/etc/sysconfig/httpd?在這個文件中改
① HTTPD=/usr/sbin/httpd.worker ?默認是被注釋的,去掉注釋就切換到worker程序了
重啟服務生效
pstree -p|grep httpd 查看進程和線程
httpd.worker?-l 模塊換了,命令也換了
②?Httpd 2.4 與之不同
以動態模塊方式提供
配置文件:/etc/httpd/conf.modules.d/00-mpm.conf
httpd -M |grep mpm
重啟服務 生效
pstree -p|grep httpd 查看進程和線程
?
(4)prefork 的默認配置:主配置文件中,搜索/prefork
<IfModule prefork.c> 根據工作環境設置
StartServers 8 一開啟服務就準備8個進程
MinSpareServers 5 最小的空閑進程,先預留,不夠就生成
MaxSpareServers 20 最大空閑進程
ServerLimit 256 最多進程數, 最大256
MaxClients 256 最大并發數
MaxRequestsPerChild 4000 子進程最多能處理的請求數量。在處理MaxRequestsPerChild 個請求之后, 子進程將會被父進程終止,這時候子進程占用的內存就會釋放( 為0時永遠不釋放)
</IfModule>
?
(5) worker 的默認配置:主配置文件中,搜索/worker
<IfModule worker.c>
StartServers 4 一開啟服務就準備4個進程,4x25=100線程
MaxClients 300 最多300個線程
MinSpareThreads 25 最小空閑25線程
MaxSpareThreads 75 最大空閑75線程,和上邊沖突,開服務先開啟4個進程,再殺死1個進程
ThreadsPerChild 25 每個子進程最大25個線程
MaxRequestsPerChild 0 無限制
</IfModule>
(6) 測試性能:ab命令 yum -y install httpd-tools
ab -c 100 -n 1000?http://192.168.30.106/
- c:并發連接數
-n:總的連接數
結果:發現prefork和worker性能沒有什么較大的差異
?
5 、DSO:Dynamic Shared Object
①?加載動態模塊配置:/etc/httpd/conf/httpd.conf 主配置文件
配置指定實現模塊加載格式:搜索/LoadModule
② 格式:
LoadModule <mod_name> <mod_path>
模塊文件路徑可使用相對路徑:相對于ServerRoot 服務的根(設置的為/etc/httpd)
③?httpd -M 可以查詢模塊信息,若刪除或注釋掉一個模塊,那個模塊的功能就會禁用,且httpd -M 查詢不到
因此,當我們需要用PHP時,可以寫入PHP的模塊,就能使用了
示例:
LoadModule auth_basic_module
modules/mod_auth_basic.so
?
6 、定義'Main' server (主站點) 的文檔頁面路徑
搜索/DocumentRoot
格式:DocumentRoot?"/path"
作用:文檔路徑映射:
DocumentRoot 指向的路徑為URL 路徑的起始位置
注意:
① 可以寫多行,但是下邊的會覆蓋上邊的,最后還是使用下邊的,寫到子配置文件一樣,因為子配置文件Include conf.d/*.conf在這行設置的上邊,會被這行設置覆蓋。
② 若設置的主站點不存在,那么服務會啟動失敗!
示例:
DocumentRoot "/app/site1"
http:/192.168.30.106/--> /app/site1/index.html
注意:SELinux 和iptables 的狀態,要關掉
?
7、定義站點主頁面
搜索:/DirectoryIndex
格式: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 、站點訪問控制常見機制
可基于兩種機制指明對哪些資源進行何種訪問控制訪問控制機制有兩種:客戶端來源地址,用戶賬號
①?文件系統路徑:格式
<Directory?"/path">
...
</Directory>
<Files?"/path/file">
...
</Files>
<FilesMatch?"PATTERN">
...
</FilesMatch>
例:主配置文件中,不能訪問 .ht 開頭的文件的設置
?
②?URL 路徑:支持正則,通配符
<Location?"">
...
</Location>
<LocationMatch?"">
...
</LocationMatch>
例:子配置文件,/etc/httpd/conf.d/welcome.conf 的設置
注意:支持正則,通配符
示例:
<FilesMatch "\.(gif|jpe?g|png)$"> 正則
<Files?"?at.*">?通配符
<Location?/status> 絕對路徑的目錄
<LocationMatch "/(extra|special)/data">
?
9 、<Directory> 中"基于源地址"實現訪問控制
(1)?Options?:后跟1 個或多個以空白字符分隔的選項列表,可在總配置文件中修改,也可從創建一個自配置文件中修改設置
在選項前的+ ,- 表示增加或刪除指定選項
常見選項:
Indexes?:指明的URL 路徑下不存在與定義的主頁面資源相符的資源文件時,返回索引列表給用戶,默認是不允許,加上不安全;有需要的時候,例如做yum源的時候
FollowSymLinks?:允許訪問符號所指向的源文件,例:鏈接文件,默認允許
None :全部禁用
All:全部允許
注意:若沖突,后邊的設置會覆蓋前邊的
子目錄也可以設置的和父目錄不一樣,放在下邊
例:vim /etc/httpd/conf.d/test.conf 子配置文件
?
(2) AllowOverride,和上邊實現的效果一樣,就是把設置放在目錄的隱藏文件下.htaccess
與訪問控制相關的哪些指令可以放在指定目錄下的.htaccess(由AccessFileName 指定)文件中,覆蓋之前的,.htaccess是主配置文件中設置指定的
用法:vim /etc/httpd/conf.d/test.conf
只對<directory> 語句有效
AllowOverride All: 所有指令都有效
AllowOverride None :.htaccess 文件無效
AllowOverride AuthConfig Indexes 除了AuthConfig和Indexes的其它指令都無法覆蓋
然后在.htaccess文件中設置,.htaccess放在所需要控制的目錄下,例bbs目錄
vim /app/site1/.htaccess
options +indexes -followsymlinks
?
(3) order 和allow 、deny,在2.4中已無效,有另外的權限控制
order :定義生效次序;寫在后面的表示默認法則,覆蓋,優先級高
Order allow,deny
Order deny,allow
Allow from, Deny from
來源地址的表達方法:IP、網絡:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
分析:① 若不沖突,allow,deny都產生效果,例
② 若沖突,看誰在后,在后的優先級高,但是只限于沖突的,
例:除107,這個網段的其他ip可以訪問,但這個網段以外,都拒絕
③ 沒在deny、allow中設置的,看allow/deny誰在后邊,誰優先級高
?
10 、日志設定
日志類型:
訪問日志
錯誤日志
錯誤日志:
ErrorLog logs/error_log
LogLevel warn
loglevel 可選值:
debug, info, notice, warn,error
crit, alert, emerg
?
訪問日志:搜索:/LogForma
定義訪問日志格式: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
各項設置的意思:可以隨便改自己想要的
??%h?客戶端IP 地址
??%l?遠程用戶, 啟用mod_ident 才有效,通常為減號"-" "
??%u?驗證(basic ,digest )遠程用戶, 非登錄訪問時,為一個減號"-"
??%t?服務器收到請求時的時間
??%r?First line of request ,即表示請求報文的首行;記錄了此次請求的"方法","URL" 以及協議版本
??%>s?最后的響應狀態碼
??%b?響應報文的大小,純數據大小,單位是字節;不包括響應報文http 首部
??%{Referer}i?請求報文中首部"referer" 的值;即從哪個頁面中的超鏈接跳轉至當前頁面的
防止倒鏈,i就是首部的意思
??%{User-Agent}i?請求報文中首部"User-Agent" 的值;即發出請求的應用程序
幫助文檔里都有
查詢日志:tail /var/log/httpd/access_log
?
11 、設定默認字符集
AddDefaultCharset UTF-8(全球) 默認
中文字符集:GBK, GB2312(中文簡體), GB18030
?
12 、定義路徑別名
格式:?Alias?/URL/ "/PATH/"?/URL/有沒有都無所謂,虛擬的目錄
Alias /download/ "/rpms/pub/"
例:http://www.magedu.com/download/bash.rpm?==> /rpms/pub/bash.rpm
http://www.magedu.com/images/logo.png?==> /www/htdocs/images/logo.png
?
13 、status 頁面
這個功能需要status_module 模塊
httpd -M | grep status 查詢這個模塊有沒有被加載
在總配置文件中搜索/server-status
LoadModule status_module modules/mod_status.so 這個模塊在總配置文件有加載
<Location /server-status> 本來是注釋掉的
SetHandler server-status2 這個名字隨便寫,只要訪問時用這個名字就行
Order allow,deny
Allow from 192.168.30.0/24
</Location>
ExtendedStatus On 顯示擴展信息,默認也是注釋的
顯示狀態頁面
狀態的類型:
"-"等待連接 "S"啟動 "R"處于讀取狀態
"W"發送應答 "K"保持長連接 "D"dns查詢
"C"正處于關閉狀態 "L"記錄日志 "G"優雅的終止,溫柔的斷開
"r"把空閑的worker進程清理 "."沒有正常的進程
?
轉載自:http://www.cnblogs.com/along21/p/7691642.html
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
不積跬步無以至千里
轉載于:https://www.cnblogs.com/dannylinux/articles/7999156.html
總結
以上是生活随笔為你收集整理的httpd2.2的配置文件常见设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot自动化配置的注解开关
- 下一篇: 2017-12-07 socket 读