apache 2.2 配置參數詳解
yum -y install httpd
服務腳本:/etc/rc.d/init.d/httpd
腳本配置文件:/etc/sysconfig/httpd
運行目錄:/etc/httpd
配置文件:
主配置文件:/etc/httpd/conf/httpd.conf
擴展配置:/etc/httpd/conf.d/*.conf
Socket:80/tcp,443/tcp
文檔根目錄:/var/www/html
CGI:/var/www/cgi-bin/
日誌滾動:
日誌切割
時間、空間
Docroot:文檔根目錄
配置文件:
/etc/httpd/conf/httpd.conf
配置參數 值
配置指令不區分字符大小寫
值有可能區分大小寫
有些指令可以重復出現多次
配置文件格式
全局配置
主機配置:用於僅提供一個站點時
虛擬主機配置:用於提供多個站點時
配置文件語法測試
serviice httpd configtest
httpd -t
絕大多數配置修改後,可以用過service httpd reload 來生效,如果修改了監聽的地址或端口,必須重啟服務才能生效
1.監聽套接字
Listen [IP:]port
此指令可以出現多次,用於指定監聽多個不同的套接字
Listen 80
Listen 172.16.100.7:8080
2.配置使用Keepalive
KeepAlive {On|Off}
KeepAliveTimeout 2 超時時間
MaxKeepAliveRequests 50 最大連接
3.MPM
多道處理模塊
httpd -l 查看編譯進內核的模塊
想使用不同的機制,修改配置文件即可 /etc/syconfig/httpd文件
<IfModule preforck.c>判斷模塊是否存在
StartServers 8 默認啟動的工作進程數
MinSpareServers 5 最少空閑進程數
MaxSpareServers 20 最大空閑進程數
ServerLimit 256 最大活動進程數
MaxClients 256 最大並發連接數,最多允許發起的連接請求的個數
MaxRequestsPerChild 4000 每個子進程在生命周期內最大允許服務的最多請求個數
</IfModule>
<IfModule worker.c>
StartServers 4 啟動的子進程的個數
MaxClients 300 最大並發連接數,最多允許發起的連接請求的個數
MinSpareThreads 25 最少空閑線程數
MaxSpareThreads 75 最大空閑線程數
ThreadsPerChild 25 每個子進程生成的線程數
MaxRequestsPerChild 0 每個子進程在聲明周期內最大允許服務的最多請求個數
</IfModule>
4、DSO模塊的加載方式
LoadModule module_name /path/to/module
如果使用相對路徑,則對於ServerRoot所定義的位置而言
LoadMoudule php5_module /usr/lib64/httpd/modules/php.so
讓服務重載配置文件方能生效
httpd -m 列出與加載到所有DSO模塊與非DOS模塊
取消 註釋掉即可
5、配置站點根目錄
DocumentRoot /path/to/somewhere
6、頁面訪問屬性
<Direcotry "/path/to/somewhere">
Options 選項
Indexes:缺少指定的默認頁面時,允許將目錄中的所有文件已列表形式返回給用戶:危險:慎用
FollowsymLinks:允許跟隨符號鏈接所指向的原始文件
None:所有都不啟用
All:所有的都啟用
ExecCGI:允許使用mod_cgi模塊執行CGI腳本
Includes:允許使用mod_include模塊實現服務器端包含(SSI)
IncludesNOEXEC:允許包含但不允許執行腳本
MultiViews:允許使用mod_negotiation實現內容協商
SymLinksIfOwnerMatch:在鏈接文件屬主屬組與原始文件的屬主屬組相同時,允許跟隨符號連接所指向的原始文件
AllowOverride
</Direcotry>
可以使用正則表達式,使用~
7.基於主機的訪問控制
<Direcotry "/path/to/somewhere">
Options
AllowOverride
None 不禁用下面
order 次序,寫在後面的為默認
allow,deny: 沒有允許的都拒絕
deny,allow:沒有拒絕的都允許
Allow from
Deny from
</Direcotry>
如果都匹配或都不匹配時以默認為準
否則則以匹配到的為準
Allow from
Deny from
IP,Network Address
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
基於用戶做訪問控制
8.定義默認主頁面
DirectoryIndex 依次查找
9.用戶目錄
如果期望讓每個用戶都可以創建個人站點:http://Server_IP/~Username/
userdir disablied:禁止
userdir public_html:
public_html是用戶家目錄下的目錄名稱,所有位於此目錄中的文件均可通過前述的訪問路徑進行訪問
用戶的家目錄得賦予進行httpd進程的用戶擁有執行權限
setfacl -m u:apache:x ~Username
10、配置日誌功能
/var/log/http/
access.log:訪問日誌,其需要記錄的內容需要自定義
error.log
訪問日誌:
CustomLog "/path/to/log_file" LogFormat
LogFormat定義日誌格式
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
%h:客戶端地址
%l:遠程的登錄名,通常為-
%u:認證時的遠程用戶名,通常為-
%t:接收到的請求時的時間,為標準英文格式時間+時區
\" :轉義,顯示""
%r:請求報文的起始行
%>s:響應狀態碼,
%b:以字節響應報文的長度,不包含http報文
%{Header_Name}i:記錄指定請求報文首部的內容(value)
%u:請求的URL
詳情請參考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
錯誤日誌:
ErrorLog
11、路徑別名
Alias /alias/ "/path/to/somewhere"
意味著訪問http://Server_IP/alias時,其頁面文件來自於/path/to/somewhere中
12、指定默認的字符集
AddDefaultCharset
13.腳本路徑別名(CGI接口)
URL-->FileSystem Directory
CGI:Common Gateway Interface(通用網關接口)使WEB可以跟一個應用程序進行通信,從通信環境中獲得結果。
CGI是不安全的
在第一行寫入
echo “Content-Type:text/html:
mod_alias,mod_cgi
ScriptAlias /URL/ "/path/to/somewhere" somewhere下的文件可以被執行
也可以在目錄中實現
格式一般為
cat << EOF
Content-Type:text/html
<pre>
The time is : `date`.
</pre>
EOF
14.基於用戶的訪問控制
虛擬用戶:不是系統用戶,只是為了獲取某種資源類型的一種虛擬的用戶
文件/etc/httpd/conf/.htpasswd
SQL數據庫
dbm:
ldap:輕量級目錄訪問協議
認證類型(auth):
basic:基本認證,賬號和密碼明文發送
digest:摘要認證,hash編碼之後發送
認證提供者(authentication provider):賬號和密碼的存放位置
authn
授權機制(authorization):根據什麽進行授權
案例:基於文件,做基本認證根據用戶和組進行授權
1、編輯配置文件,為需要認證的目錄配置認證機制
<Directory "/www/htdocs/fin">A
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>
將全局中的DocumentRoot""註釋掉
虛擬主機的單獨配置
用戶認證
訪問日誌
錯誤日誌
別名
腳本別名
基於IP認證機制,基於用戶認證
http協議認證、表單認證
16.https協議
x509.3證書格式
證書格式的版本號
證書序列號
證書簽名算法
證書頒發者
有效期
持有者的名稱
持有者的公鑰
CA的ID
持有者的ID
其他擴展信息
基本約束
證書策略
密鑰的使用限制
CA簽名
ssl握手要完成的工作
交換協議版本號
選擇一個雙方都支持的加密方式
對兩端實現身份驗證
密鑰交換
http:文本協議 80/tcp
https:二進制格式的協議 443/tcp
SSL會話基於IP地址進行:不支持在基於主機名的虛擬主機上實現
客戶端驗證服務器端證書時:
日期檢查:證書是否在有效期內
證書頒發者的可信度
證書的簽名檢測:
持有者的身份檢測
httpd:基於mod_ssl模塊實現對ssl的支持
可以在/etc/pki/tls/certs
openssl s_client
-connet:驗證的地址:端口
-CAfile:CA證書的路徑
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證書的路徑
URL Rewrite:URL重寫
17、服務器status頁面
內生的status信息,且此信息可以通過web予以顯示
基於URL訪問屬性
<Location [~] "">
</Location >
基於單個文件的訪問屬性
<File [~] "">
</File>
也可以使用<LocationMatch "">
</LocationMatch>來實現正則表達式的配置
如果要配置其屬性的URL能映射到某具體文件系統路徑,建議使用<Directory>
處理器:當文件被調用時,Apache內部表現形式:一般每種文件類型都有其隱式處理器;否則需要自己定義
顯式的定義使用的處理器:SetHandler
<Location /URL>
setHeandler 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、ab工具的初步使用
-c 模擬的並發數
-n 模擬的總請求數
一般並發數應該小於等於請求數
http_load webbench seige(只做參考)
tcp_copy
19、使用mod_deflate模塊壓縮頁面優化傳輸速度,可以寫為一行,也可以寫多行,默認為gzip
SetOutputFilter DEFLATE
# mod_deflate configuration
<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>
擴展功能
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
執行外部程序前切換用戶。
20.資源限定
軟限制:可以超出的限制,但僅能超出一定時長
硬限制:絕對不能超出的限制
ulimit:只能修改軟限制
-n [N]:顯示或限制能打開的最大的文件句柄數,
-u [N]:所能夠打開的最大進程數
如果修改硬限制
/etc/security/limits.conf,擴展配置etc/security/limits.d/*.conf
對誰進行限定 類型 要限定的選項 值
apache 2.2 配置參數詳解