1. 程式人生 > >httpd2.4配置文件詳解

httpd2.4配置文件詳解

httpd2.4 配置文件詳解

1,默認安裝目錄,配置文件相對路徑都基於此目錄
ServerRoot "/usr/local/apache"

2,監聽套接字:
Listen [IP:]port
    
此指令可以出現多次:用於監聽多個不同的套接字:
Listen 80
Listen 192.168.1.101:8080
需要重載:usr/local/apache/bin/apachectl -k graceful

3,配置使用keep alive(保持連接)(並發訪問量較大的服務器,建議關閉或者較短的持久連接時間)
KeepAlive {On/Off}
KeepAliveTimeout 15
MaxKeepAliveRequests 100
測試:
# telnet 192.168.9.168 80
Trying 192.168.9.168...
Connected to 192.168.9.168.
Escape character is ‘^]‘.
GET / HTTP/1.1
Host:192.168.9.168


4,DSO模塊加載方式  讓服務重載配置文件可生效
# httpd -M
LoadModule module_name /path/to/module
如果使用相對路徑,則相對於ServerRoot所定義的位置而言;
例如: LoadModule php5_module /usr/lib64/httpd/modules/php5.so

5,apache進程運行的屬主和屬組
User www
Group www

6,網站管理員郵件地址
ServerAdmin [email protected]
/* */ 7,主機名 ServerName localhost 8,配置站點頁面根目錄 DocumentRoot "/var/www/html" 9, 站點訪問控制 (1)基於文件系統路徑 <Directory "/path/to/somewhere"> </Directory> <File "/path/to/somewhere"> </File> <FileMatch "repx"> </FileMatch> (2)基於URL路徑: <Location [~] ""> </Location > 訪問控制機制: 基於來源地址訪問控制 <Directory "/path/to/somewhere"> Options AllowOverride <Directory> Options: Indexes:缺少默認頁面時,允許將目錄中所有文件以列表形式返回給用戶,一般關閉 FollowSymLinks:允許訪問鏈接文件所指向的原始文件,一般關閉 None:所有都不啟用; ExecCGI:允許使用mod_cgi模塊執行目錄中的腳本; Includes:允許使用mod_include模塊實現服務器端包含(SSI) MultiViews:允許使用mod_negotination實現內容協商 SymLinksifOwnerMatch:在鏈接文件屬主屬組與原始文件的屬主屬組相同時,允許跟隨符號鏈接所指向的原始文件 <Directory "/var/www/html"> Options None AllowOverride None Order allow,deny Allow from all </Directory> 10,定義默認主頁面 DirectoryIndex index.php index.html home.html 自左向右匹配 11,配置日誌文件 ErrorLog "logs/error_log" LogLevel warn <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "logs/access_log" combined </IfModule> 默認: /var/log/httpd/ access.log:訪問日誌 ,其需要記錄日誌格式需自己定義 error.log:錯誤日誌 LogLevel :debug,info,notice,warn,error,crit,alert,emerg (默認為warn) 定義訪問日誌: CustomLog "/path/to/access_log_file" LogFormat_Name LogFormat LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent %h:Remote host客戶端地址 %l:Remote logname遠程登錄名 %u: Remote user認證時遠程用戶名 %t:Time the request was received接收到請求的時間 \"%r\":First line of request請求報文的起始行 %>s:Status狀態碼 %b:Size of response in bytes, excluding HTTP headers響應報文的長度,單位為字節 \"%{Referer}i\":上一級訪問地址 \"%{User-Agent}i\"":用戶瀏覽器的類型 http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#logformat 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 12,路徑別名 Alias /icons/ "/var/www/icons/" 13,指定默認字符集編碼 AddDefaultCharset UTF-8 14,AddType:在給定的文件擴展名與特定的內容類型之間建立映射關系。 語法:AddType MIME-type extension [extension] ... AddType application/x-compress .Z AddType application/x-gzip .gz .tgz 15,ErrorDocument:批示當遇到錯誤的時候服務器將給客戶端什麽樣的應答。 語法:ErrorDocument error-code document error-code  服務器返回的錯誤代碼 document  可以由一個斜杠(/)開頭來指示一個本地URL(相對於DocumentRoot),或是提供一個能被客戶端解釋的完整的URL。此外還能提供一個可以被瀏覽器顯示的消息。比如: #ErrorDocument 500 "The server made a boo boo." #ErrorDocument 404 /missing.html #ErrorDocument 404 "/cgi-bin/missing_handler.pl" #ErrorDocument 402 http://www.example.com/subscription_info.html 15,EnableSendfile:控制httpd是否可以使用操作系統內核的sendfile支持來將文件發送到客戶端。 默認情況下,當處理一個請求並不需要訪問文件內部的數據時(比如發送一個靜態的文件內容),如果操作系統支持,Apache將使用sendfile將文件內容直接發送到客戶端而並不讀 取文件。 這個sendfile機制避免了分開的讀和寫操作以及緩沖區分配,但是在一些平臺或者一些文件系統上,最好禁止這個特性來避免一些問題: 有些平臺可能會有編譯系統檢測不到的有缺陷的sendfile支持,特別是將在其他平臺上使用交叉編譯得到的二進制文件運行於當前對sendfile支持有缺陷的平臺時; 在Linux上啟用IPv6時,使用sendfile將會觸發某些網卡上的TCP校驗和卸載bug; 當Linux運行在Itanium處理器上的時候,sendfile可能無法處理大於2GB的文件; 對於一個通過網絡掛載了NFS文件系統的DocumentRoot (比如:NFS或SMB),內核可能無法可靠的通過自己的緩沖區服務於網絡文件。 如果出現以上情況,你應當禁用sendfile : EnableSendfile Off 針對NFS或SMB,可以單獨在<directory>段中指定禁用: <Directory "/path-to-nfs-files"> EnableSendfile Off </Directory> 16,include:在服務器配置文件中包含其它配置文件。, 語法:Include file-path|directory-path #Include conf/extra/httpd-mpm.conf 17,12, 基於用戶的訪問控制 虛擬用戶 文件:/etc/httpd/conf/.htpasswd SQL數據庫: dbm: ldap: 認證類型: basic:基本認證,賬號和密碼明文發送; digest:摘要認證,hash編碼之後發送; 認證提供者(authentication provider) 賬號和密碼的存放位置 authn 授權機制(authorization):根據什麽進行授權 案例:基於文件,做基本認證,根據用戶和組進行授權 (1)編輯配置文件,為需要認證的目錄配置認證機制 <Directory "/var/www/html/authtest"> Options None AllowOverride None AuthType Basic AuthName "Private Area" AuthUserFile "/etc/httpd/conf/.htpasswd" Require valid-user # Requite user tom </Directory> (2)使用htpasswd命令生成認證庫 htpasswd -c 創建文件,創建第一個用戶時使用 -m 密碼基於MD5編碼存儲 -D 刪除用戶 -s 密碼基於sha1編碼存儲 # htpasswd -c -m /etc/httpd/conf/.htpasswd tom New password: Re-type new password: Adding password for user tom (3)基於組進行認證 <Directory "/var/www/html/authtest"> Options None AllowOverride None AuthType Basic AuthName "Private Area" AuthUserFile "/etc/httpd/conf/.htpasswd" AuthGroupFile "/etc/httpd/conf/.htgroup" Require group GroupName </Directory> 手動創建組文件: 組名:用戶1 用戶2 用戶3 18,MPM配置 # httpd -l # vim /etc/sysconfig/httpd 更換啟動模式 <IfModule prefork.c> StartServers 10 默認啟動的工作進程數 MinSpareServers 20 最小空閑進程數 MaxSpareServers 50 最大空閑進程數 ServerLimit 2000 最大活動進程數 MaxClients 1000 並發請求的最大數 MaxRequestsPerChild 7000 每個子進程在生命周期內所能夠服務的最多的請求個數 </IfModule> <IfModule worker.c> ServerLimit 50 ThreadLimit 200 StartServers 5 默認啟動子進程的個數 MaxClients 5000 並發請求的最大數 MinSpareThreads 100 最小空閑線程數 MaxSpareThreads 500 最大空閑線程數 ThreadsPerChild 100 每個子進程可生成的線程數 MaxRequestsPerChild 7000 每個子進程在生命周期內所能夠服務的最多的請求個數 </IfModule> 19,虛擬主機 一個物理服務器提供多個站點;使用虛擬主機先取消中心主機 Web:Socket(IP,Port) 基於不同的IP實現不同的虛擬主機 基於不同的port實現不同的虛擬主機 基於不同的FQDN實現不同的虛擬主機 2.2需要啟動NameVirtualHost *:80 (1)關閉中心主機 #DocumentRoot "/var/www/html" (2)配置虛擬主機 <virtualhost IP:Port> ServerName DocumentRoot "" <Directory ""> Options </Directory> ServerAlias ServerAdmin ErrorLog logs/dummy-host.example.com-error_log CustomLog logs/dummy-host.example.com-access_log common </virtualhost> 19,服務器status頁面 內生的status信息,且此信息可以通過web予以顯示 處理器:當文件被調用時,Apache內部表現形式:一般每種文件類型都有其隱式處理器;否則需要自己定義 顯式的定義使用的處理器:SetHandler <Location /URL> setHeandler server-status </Location> 示例: <Location /server-status> SetHandler sever-status AuthType Basic AuthName "Sever Status" AuthUserFile "/etc/http/conf/.htpasswd" Require valid-user Order deny,allow Deny from all Allow from 192.168.9.168 </Location> 20,apache開啟緩存功能 apache 默認也能自帶部分緩存,設置Cache-Control http頭(必須啟用rewirte模塊才會生效) # vim httpd.conf #啟用expires_module模塊 LoadModule expires_module modules/mod_expires.so # 啟用有效期控制 ExpiresActive On # GIF有效期為1個月 ExpiresByType image/gif A2592000 # HTML文檔的有效期是最後修改時刻後的一星期 ExpiresByType text/html M604800 #以下的含義類似 ExpiresByType text/css “now plus 2 month” ExpiresByType text/js “now plus 2 day” ExpiresByType image/jpeg “access plus 2 month” ExpiresByType image/bmp “access plus 2 month” ExpiresByType image/x-icon “access plus 2 month” ExpiresByType image/png “access plus 2 month” # vim .htaccess 放到網站根目錄 <FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|css|js|ttf|TTF)$"> Header set Cache-Control "max-age=21600" </FilesMatch> <FilesMatch ".(html|htm|shtml)$"> Header set Cache-Control "max-age=3600" </FilesMatch> 21、使用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> 22,禁止訪問tar bz2 svn結尾的文件 <Files ~ "\.tar|\.bz2|\.svn|\*.gz"> Require all denied </Files> <DirectoryMatch .*\.svn/.*> Require all denied </DirectoryMatch> 23,,擴展功能 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 執行外部程序前切換用戶。 23,模塊解釋 設置動態加載的DSO模塊 #如果需要提供基於文本文件的認證,加載此模塊,否則註釋掉 LoadModule authn_file_module modules/mod_authn_file.so #如果需要提供基於DBM文件的認證,加載此模塊,否則註釋掉 #LoadModule authn_dbm_module modules/mod_authn_dbm.so #如果需要提供匿名用戶認證,加載此模塊,否則註釋掉 #LoadModule authn_anon_module modules/mod_authn_anon.so #如果需要提供基於SQL數據庫的認證,加載此模塊,否則註釋掉 #LoadModule authn_dbd_module modules/mod_authn_dbd.so #如果需要在未正確配置認證模塊的情況下簡單拒絕一切認證信息,加載此模塊,否則註釋掉 LoadModule authn_default_module modules/mod_authn_default.so #此模塊提供基於主機名、IP地址、請求特征的訪問控制,Allow、Deny指令需要,推薦加載。 LoadModule authz_host_module modules/mod_authz_host.so #如果需要使用純文本文件為組提供授權支持,加載此模塊,否則註釋掉 #LoadModule authz_groupfile_module modules/mod_authz_groupfile.so #如果需要提供基於每個用戶的授權支持,加載此模塊,否則註釋掉 LoadModule authz_user_module modules/mod_authz_user.so #如果需要使用DBM文件為組提供授權支持,加載此模塊,否則註釋掉 #LoadModule authz_dbm_module modules/mod_authz_dbm.so #如果需要基於文件的所有者進行授權,加載此模塊,否則註釋掉 #LoadModule authz_owner_module modules/mod_authz_owner.so #如果需要在未正確配置授權支持模塊的情況下簡單拒絕一切授權請求,加載此模塊,否則註釋掉 LoadModule authz_default_module modules/mod_authz_default.so #如果需要提供基本的HTTP認證,加載此模塊,否則註釋掉,此模塊至少需要同時加載一個認證支持模塊和一個授權支持模塊 LoadModule auth_basic_module modules/mod_auth_basic.so #如果需要提供HTTP MD5摘要認證,加載此模塊,否則註釋掉,此模塊至少需要同時加載一個認證支持模塊和一個授權支持模塊 #LoadModule auth_digest_module modules/mod_auth_digest.so #此模塊提供文件描述符緩存支持,從而提高Apache性能,推薦加載,但請小心使用 LoadModule file_cache_module modules/mod_file_cache.so #此模塊提供基於URI鍵的內容動態緩存(內存或磁盤),從而提高Apache性能,必須與mod_disk_cache/mod_mem_cache同時使用,推薦加載 LoadModule cache_module modules/mod_cache.so #此模塊為mod_cache提供基於磁盤的緩存管理,推薦加載 LoadModule disk_cache_module modules/mod_disk_cache.so #此模塊為mod_cache提供基於內存的緩存管理,推薦加載 LoadModule mem_cache_module modules/mod_mem_cache.so #如果需要管理SQL數據庫連接,為需要數據庫功能的模塊提供支持,加載此模塊,否則註釋掉(推薦) #LoadModule dbd_module modules/mod_dbd.so #此模塊將所有I/O操作轉儲到錯誤日誌中,會導致在日誌中寫入及其海量的數據,只建議在發現問題並進行調試的時候使用 #LoadModule dumpio_module modules/mod_dumpio.so #如果需要使用外部程序作為過濾器,加載此模塊(不推薦),否則註釋掉 #LoadModule ext_filter_module modules/mod_ext_filter.so #如果需要實現服務端包含文檔(SSI)處理,加載此模塊(不推薦),否則註釋掉 #LoadModule include_module modules/mod_include.so #如果需要根據上下文實際情況對輸出過濾器進行動態配置,加載此模塊,否則註釋掉 LoadModule filter_module modules/mod_filter.so #如果需要服務器在將輸出內容發送到客戶端以前進行壓縮以節約帶寬,加載此模塊(推薦),否則註釋掉 LoadModule deflate_module modules/mod_deflate.so ##如果需要記錄日誌和定制日誌文件格式,加載此模塊(推薦),否則註釋掉 LoadModule log_config_module modules/mod_log_config.so #如果需要對每個請求的輸入/輸出字節數以及HTTP頭進行日誌記錄,加載此模塊,否則註釋掉 #LoadModule logio_module modules/mod_logio.so #如果允許Apache修改或清除傳送到CGI腳本和SSI頁面的環境變量,加載此模塊,否則註釋掉 LoadModule env_module modules/mod_env.so #如果允許通過配置文件控制HTTP的"Expires:"和"Cache-Control:"頭內容,加載此模塊(推薦),否則註釋掉 LoadModule expires_module modules/mod_expires.so #如果允許通過配置文件控制任意的HTTP請求和應答頭信息,加載此模塊,否則註釋掉 LoadModule headers_module modules/mod_headers.so #如果需要實現RFC1413規定的ident查找,加載此模塊(不推薦),否則註釋掉 #LoadModule ident_module modules/mod_ident.so #如果需要根據客戶端請求頭字段設置環境變量,加載此模塊,否則註釋掉 LoadModule setenvif_module modules/mod_setenvif.so #此模塊是mod_proxy的擴展,提供Apache JServ Protocol支持,只在必要時加載 #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so #此模塊是mod_proxy的擴展,提供負載均衡支持,只在必要時加載 #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #如果需要根據文件擴展名決定應答的行為(處理器/過濾器)和內容(MIME類型/語言/字符集/編碼),加載此模塊,否則註釋掉 LoadModule mime_module modules/mod_mime.so #如果允許Apache提供DAV協議支持,加載此模塊,否則註釋掉 #LoadModule dav_module modules/mod_dav.so #此模塊生成描述服務器狀態的Web頁面,只建議在追蹤服務器性能和問題時加載 #LoadModule status_module modules/mod_status.so #如果需要自動對目錄中的內容生成列表(類似於"ls"或"dir"命令),加載此模塊(會帶來安全問題,不推薦),否則註釋掉 #LoadModule autoindex_module modules/mod_autoindex.so #如果需要服務器發送自己包含HTTP頭內容的文件,加載此模塊,否則註釋掉 #LoadModule asis_module modules/mod_asis.so #如果需要生成Apache配置情況的Web頁面,加載此模塊(會帶來安全問題,不推薦),否則註釋掉 #LoadModule info_module modules/mod_info.so #如果需要在非線程型MPM(prefork)上提供對CGI腳本執行的支持,加載此模塊,否則註釋掉 #LoadModule cgi_module modules/mod_cgi.so #此模塊在線程型MPM(worker)上用一個外部CGI守護進程執行CGI腳本,如果正在多線程模式下使用CGI程序,推薦替換mod_cgi加載,否則註釋掉 #LoadModule cgid_module modules/mod_cgid.so #此模塊為mod_dav訪問服務器上的文件系統提供支持,如果加載mod_dav,則也應加載此模塊,否則註釋掉 #LoadModule dav_fs_module modules/mod_dav_fs.so #如果需要提供大批量虛擬主機的動態配置支持,加載此模塊,否則註釋掉 #LoadModule vhost_alias_module modules/mod_vhost_alias.so #如果需要提供內容協商支持(從幾個有效文檔中選擇一個最匹配客戶端要求的文檔),加載此模塊(推薦),否則註釋掉 LoadModule negotiation_module modules/mod_negotiation.so #如果需要指定目錄索引文件以及為目錄提供"尾斜杠"重定向,加載此模塊(推薦),否則註釋掉 LoadModule dir_module modules/mod_dir.so #如果需要處理服務器端圖像映射,加載此模塊,否則註釋掉 #LoadModule imagemap_module modules/mod_imagemap.so #如果需要針對特定的媒體類型或請求方法執行CGI腳本,加載此模塊,否則註釋掉 #LoadModule actions_module modules/mod_actions.so #如果希望服務器自動糾正URL中的拼寫錯誤,加載此模塊(推薦),否則註釋掉 LoadModule speling_module modules/mod_speling.so #如果允許在URL中通過"/~username"形式從用戶自己的主目錄中提供頁面,加載此模塊,否則註釋掉 #LoadModule userdir_module modules/mod_userdir.so #此模塊提供從文件系統的不同部分到文檔樹的映射和URL重定向,推薦加載 LoadModule alias_module modules/mod_alias.so #如果需要基於一定規則實時重寫URL請求,加載此模塊(推薦),否則註釋掉 LoadModule rewrite_module modules/mod_rewrite.so

httpd2.4配置文件詳解