本文主要講述httpd的主配置文件中可以配置的選項以及參數,以2.2系列的爲主,在http2.4以後會添加一些新的功能和模塊,配置文件可能也會有一些差別,關於2.4的配置文件將在後續推出,敬請期待!
如果httpd是yum安裝或者是rpm包安裝的話,主配置文件會默認保存在/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf爲主配置文件的輔助性配置文件
1、監聽套接字
Listen [IP:]port
此指令可以出現多次,用於指定監聽多個不同的套接字,IP地址可以省略,如果IP地址省略則表示監聽在本機所有的ip地址上
2、配置實用Keepalive,主要是配置保持連接中的超時時間和最大連接數
KeepAlive {On|Off}
KeepAliveTimeout 2 超時時間爲2s,單位默認爲s
MaxKeepAliveRequests 50 最大連接數
3.MPM,爲多道處理模塊
prefork:一個進程響應一個請求
worker:一個進程生成多個線程,一個線程響應一個請求
event:一個進程同事響應多個請求,但不會生成線程
http -l 查看編譯進內核的模塊
如果向使用不同的MPM,直接修改文件/etc/sysconfig/httpd文件中的HTTPD項即可
<IfModule preforck.c> 判斷模塊是否存在
StartServers 默認啓動的工作進程數
MinSpareServers 最少空閒進程數
MaxSpareServers 最大空閒進程數
ServerLimit 最大活動進程數
MaxClients 最大併發連接數,最多允許發起的連接請求個數
MaxRequestsPerChild 每個子進程在生命週期內最大允許服務的請求個數
</IfModule>
<IfModule worker.c>
StartServers 默認啓動的工作進程數
MaxClients 最大併發連接數
MinSpareThreads 最少空閒線程數
MaxSpareThreads 最多空閒線程數
ThreadsPerChild 每個自己進程生成的線程數
MaxRequestsPerChild 每個子進程在生命週期內最大允許服務的請求個數
</IfModule>
4.DOS模塊的加載方式,動態模塊
LoadModule module_name /path/to/module
可以使用絕對路徑,也可以使用相對路徑,如果使用相對路徑,則是相對於ServerRoot所定義的位置而言的
httpd -m 列出所有已加載的DOS模塊與非DOS模塊
5.配置站點根目錄
DocumentRoot /path/to/somewhere
只能使用絕對路徑
6.頁面訪問屬性
<Direcotry "/path/to/somewhere">
Options 選項
Indexes:缺少指定的默認主頁時,允許將目錄中的所有文件以列表形式返回給用戶,危險:慎用
FollowsymLinks:允許跟隨符號鏈接所指向的歲暗示文件
None:所有的都不啓用
All: 所有的都啓用
ExecCGI: 允許使用mod_cgi模塊執行CGI腳本
Includes: 允許mod_include模塊實現服務器端包含
IncludesNOEXEC:允許包含但不允許執行CGI腳本
MultiViews:允許使用mod_negotication實現內容協商
SymLinksIfOwnerMatch:在鏈接文件屬主屬組與原始文件的屬主屬組相同時,允許跟隨符號連接所指向的原始文件
</Direcotry>
7.基於主機的訪問控制(2.2系列的配置)
<Direcotry "/path/to/somewhere">
Options
AllowOverride
None 不禁用下面選項
Order 次序,寫在後面的爲默認
allow,deny: 沒有允許的都拒絕
deny,allow:沒有拒絕的都允許
Allow from 允許通過的主機
Deny from 拒絕通過的主機
可以是單獨的ip地址,也可以是一個網段
192.168.0
192.168.0.0
192.168.0.0/24
192.168.0.0/255.255.255.0
表示的都爲192.168.0網段
</Direcotry>
如果都匹配或都不匹配時則以默認的爲準,否則以匹配到的爲準
8.定義默認主頁面
DirectoryIndex
查詢順序爲依次查詢
9.用戶目錄
如果期望讓每個用戶都可以創建個人站點,基於http://Sevrer_IP/~Username/
userdir disablied:禁止
userdir public_html: 是指用戶家目錄下的目錄名稱,所有位於此目錄中的文件均可以通過前述的訪問路徑進行訪問
用戶的家目錄得賦予運行http進程的用戶擁有執行權限,可以通過setfacl -m來進行設置
10.配置日誌功能
access.log 訪問日誌,其需要記錄的內容需要自定義
error.log 錯誤日誌,
訪問日誌:
CustomLog "/path/to/log_file" LogFormat
LofFormat定義的日誌格式,只解釋最常用的一種
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
%h: 客戶端地址
%l:遠程的登陸名,通常爲-
%u: 認證時的遠程用戶名,通常爲-
%t: 接收到的請求時的時間,爲標準英文格式時間+時區
\":表示轉義,顯示"
%r:請求報文的起始行
%>s: 響應狀態碼
%b:以字節響應報文的長度,不包含頭報文
%{Referer}i:記錄指定請求報文首部的內容
%{User-Agent}i:用戶使用的工具
詳情請參考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
11.路徑別名
Alias /alias/ "/path/to/somewhere"
意味着訪問http://Server_IP/alias時,其頁面文件來自於/path/to/somewhere中
12.指定默認的字符集
AddDefaultCharset
13.腳本路徑別名(CGI接口)
CGI:Common Gateway Interface(通用網關接口)使web可以跟一個應用程序進行通信,從通信環境中獲得結果,前提必須加載mod_alias和mod_cgi模塊
一般在第一行寫入 echo “Content-Type:text/html”
ScriptAlias /URL/ "/path/to/somewhere" somewhere下的文件可以被執行
格式一般爲
cat << EOF
Content-Type:text/html
<pre>
The Time is : `date`
</pre>
EOF
14.基於用戶的訪問控制
虛擬用戶:不是系統上的用戶,只是爲了獲取某種特定的資源烈性的一種虛擬用戶
可以基於文件、SQL數據庫、DBM、ldap認證
認證類型(auth)
basic:基本認證,賬號和密碼以明文發送
digest:摘要認證,hash編號以後再發送
認證提供者(authentiation provide):賬號和密碼的存放位置
授權機制(authorization):根據什麼進行授權
案例:基於文件,做基本認證根據用戶和組進行授權
1、編輯配置文件,爲需要認證的目錄配置認證機制
<Directory "/www/htdocs/fin">
options None
AllowOverride AuthConfig 使用認證配置
AuthType Basic 使用基本認證
AuthName "Private Area" 質詢時標題
AuthUserFile /etc/http/conf/.htpasswd 密碼的存放位置
Require vaild-user 可訪問的用戶
</Directory>
2、使用htpsswdm命令使用生成認證庫
htpasswd
-c 創建密碼,創建第一個用戶時使用
htpasswd -c -m /etc/http/conf/.htpasswd tom
-m MD5格式存放
-b 批量模式
-D 刪除用戶
3、基於組認證
<Directory "/www/htdocs/fin">
options None
AllowOverride AuthConfig 使用認證配置
AuthType Basic 使用基本認證
AuthName "Private Area" 質詢時標題
AuthgroupFile /etc/http/conf/.htpasswd 密碼的存放位置
Require group GroupName 可訪問的用戶
</Directory>
先創建用戶,在創建組
組文件:
組名:用戶1 用戶2 用戶3
15.虛擬主機
一個物理服務器提供多個站點;使用虛擬要先取消中心主機
基於不同的IP實現不同的虛擬主機:變化IP
基於不同的port實現不同的虛擬主機:變化port
基於不同的主機名實現不同的虛擬主機:變化ServerName的值
通過請求報文中的HOST來實現不同的虛擬主機的訪問
<VirtualHost IP:port>
SeverName
DocumentRoot ""
<Directory "">
</Directory>
ServerAlias
ServerAdmin
</VirtualHost>
虛擬主機可以單獨配置用戶認證、訪問日誌、錯誤日誌、別名、腳本別名等
16.https協議,監聽在tcp的443端口
X509.3證書格式
證書格式的版本號
證書序列號
證書籤名算法
證書頒發者
有效期
持有者的名稱
持有者的公鑰
CA的ID
持有者的ID
其他擴展信息
基本約束
證書策略
密鑰的使用限制
CA簽名
ssl握手要完成的工作
交換協議版本號
選擇一個雙方都支持的加密方式
對兩端實現身份驗證
密鑰交換
SSL會話基於IP地址進行:不支持在基於主機名的虛擬主機上實現
客戶端驗證服務器端證書時:
日期檢查:證書是否在有效期內
證書頒發者的可信度
證書的簽名檢測:
持有者的身份檢測:
httpd:基於mod_ssl模塊實現對於ssl的支持
步驟:
1)、準備好服務器的私鑰和證書
2)、安裝mod_ssl模塊
yum -y install mod_ssl
3)、配置/etc/httpd/conf.d/ssl.conf
配置基於ssl的虛機主機
ServerName
DocunmentRoot
配置證書和私鑰
SSLCertificatFile 證書文件
SSLCertificatKeyFile 密鑰文件
4)、重啓httpd服務
5)、測試
openssl s_client
-connet:驗證的地址:端口
-CAfile:CA證書的路徑
17.服務器status頁面,
內生的status信息,且此信息可以通過web予以顯示出來
基於目錄的訪問屬性
<Directory [~] "">
</Directory>
基於URL訪問屬性
<Location [~] "">
</Location>
基於單個文件的訪問屬性
<File [~] "">
</File>
也可以使用<LocationMatch "" > </LocationMatch>來實現正則表達式的配置
如果要配置其屬性的URL能映射到牟文建系統路徑,建議使用Directory
處理器:當問及被調用時,Apache內部表現形式,一般每種文件類型都有其隱式處理器,否則需要自己定義
顯示的定義使用的處理器:SetHandler
<Location /URL>
SetHandler server-status
</Location>
其也可以定義訪問控制,包括基於IP的認證和基於用戶的認證
實例:
<Location /server-status>
SetHandler sever-status
AuthType Basic
AuthName "Sever Status"
AuthUserFile "/etc/http/conf/.htpasswd"
Require valid-user
Order deny,allow
Allow from all
</Location>
18、使用mod_deflate模塊壓縮頁面優化傳輸速度,可以寫爲一行,也可以寫多行,默認爲gzip
SetOutputFilter DEFLATE
<IfModule mod_deflate.c>
# Restrict compression to these MIME types
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css
# Level of compression (Highest 9 - Lowest 1)默認爲6
DeflateCompressionLevel 9
# Netscape 4.x has some problems.
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
</IfModule>
18、資源限定
軟限制:可以超出的限制,但僅能超出一定時長
硬限制:絕對不能超出的限制
ulinit:只能修改軟連接
-n [N]:顯示或修改能打開的最大的文件句柄數
-u [N]:顯示或修改能打開的最大進程數
如果要修改硬限制
/etc/security/limits.conf或者配置tc/security/limits.d/*.conf
格式爲
對誰進行限制 類型 要限制的選項 值
測試工具
curl是基於URL語法在命令行方式下工作的文件傳輸工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等協議。curl支持HTTPS認證,並且支持HTTP的POST、PUT等方法, FTP上傳, kerberos認證,HTTP上傳,代理服務器, cookies, 用戶名/密碼認證, 下載文件斷點續傳,上載文件斷點續傳,,http代理服務器管道( proxy tunneling), 甚至它還支持IPv6, socks5代理服務器,,通過http代理服務器上傳文件到FTP服務器等等,功能十分強大。
curl的常用選項:
-A/--user-agent <string> 設置用戶代理髮送給服務器,即告訴服務器瀏覽器爲什麼
-basic 使用HTTP基本驗證
--tcp-nodelay 使用TCP_NODELAY選項
-e/--referer <URL> 來源網址,跳轉過來的網址
--cacert <file> 指定CA證書 (SSL)
--compressed 要求返回是壓縮的形勢,如果文件本身爲一個壓縮文件,則可以下載至本地
-H/--header <line>自定義頭信息傳遞給服務器
-I/--head 只顯示響應報文首部信息
--limit-rate <rate> 設置傳輸速度
-u/--user <user[:password]>設置服務器的用戶和密碼
-0/--http1.0 使用HTTP 1.0
測試工具
ab工具的初步使用
-c 模擬的併發數
-n 模擬的總請求數
一般併發數應該小於等於請求數
http_load webbench seige(只做參考)
http的擴展功能
apachectl
Apache HTTP服務控制工具
ab
Apache HTTP服務器性能測試工具
apxs
Apache 擴展工具
configure
配置源代碼
dbmmanage
爲基本認證創建和更新DBM格式的用戶認證文件
htcacheclean
清理磁盤緩存
htdigest
爲摘要認證創建和更新用戶認證文件。
htdbm
操作 DBM 密碼數據庫。
htpasswd
爲基本認證創建和更新用戶認證文件。
httxt2dbm
爲 RewriteMap 創建 dbm 文件。
logresolve
將 Apache 日誌文件中的 IP 地址解析到主機名稱。
rotatelogs
不關閉 Apache 而切換日誌文件。
suexec
執行外部程序前切換用戶。