Apache 版本: Server version: Apache/2.2.15 html
總計 1000行左右web
英文前帶井號的是註釋,不起做用。 apache
但不少註釋去掉前方的 # 便可生效。安全
#服務器
# This is the main Apache server configuration file. It contains the 這是Apache服務器主要配置文件網絡
# configuration directives that give the server its instructions. 它包含影響服務器運行的配置指令多線程
# See <URL:http://httpd.apache.org/docs/2.2/> for detailed information. 這裏是詳細的信息併發
# In particular, see 尤爲是看app
# <URL:http://httpd.apache.org/docs/2.2/mod/directives.html>ide
# for a discussion of each configuration directive. 每項配置的討論
#
#
# Do NOT simply read the instructions in here without understanding
不要只是簡單的閱讀這些指令信息而不去理解它
# what they do. They're here only as hints or reminders. If you are unsure
# consult the online docs. You have been warned.
#這裏只是作了簡單的提示提醒,若是你沒有參考在線文件,你就會被警告
# The configuration directives are grouped into three basic sections:這些配置指令被分爲下面三個部分
# 1. Directives that control the operation of the Apache server process as a
# whole (the 'global environment').控制整個Apache服務器行爲的部分(即全局環境變量)
# 2. Directives that define the parameters of the 'main' or 'default' server,定義主要和默認服務指令的參數
# which responds to requests that aren't handled by a virtual host.對請求做出響應,並不是由一個虛擬主機處理
# These directives also provide default values for the settings 也爲所有虛擬主機提供默認參數
# of all virtual hosts.
# 3. Settings for virtual hosts, which allow Web requests to be sent to設置虛擬主機,容許web請求發送給不一樣iIP
# different IP addresses or hostnames and have them handled by the或主機名,這些請求的處理經過同一個
# same Apache server process. Apache服務進程。
#
# Configuration and logfile names: If the filenames you specify for many配置和日誌名稱,
# of the server's control files begin with "/" (or "drive:/" for Win32), the 文件名開頭帶/使用絕對路徑,不帶/使用
# server will use that explicit path. If the filenames do *not* begin 相對路徑,相對於服務器根目錄。
# with "/", the value of ServerRoot is prepended -- so "logs/foo.log" 舉例說明,相對路徑文件logs/foo.log 相對
# with ServerRoot set to "/etc/httpd" will be interpreted by the 路徑爲/etc/httpd,則路徑被解釋爲
# server as "/etc/httpd/logs/foo.log". /etc/httpd/logs/foo.log
#
### Section 1: Global Environment 第一部分,全局環境
#
# The directives in this section affect the overall operation of Apache, 這一部分指令會影響整個apache操做
# such as the number of concurrent requests it can handle or where it 例如Apache可以處理的併發請求的數量
# can find its configuration files. 或者配置文件地址
#
#
# Don't give away too much information about all the subcomponents 不要泄露太多信息關於正在運行的組件信息
# we are running. Comment out this line if you don't mind remote sites 註釋掉這一行,若是你不介意遠程站點
# finding out what major optional modules you are running 發現你正在運行的其它模塊
ServerTokens OS 此指令控制了Server回送給客戶端的迴應頭域是否包含
關於服務器OS類型和編譯進的模塊描信息
服務器會發送(好比說):Server: Apache/2.0.41
注意:在使用ServerTokens指令時要先啓用ServerSignature指令
#
# ServerRoot: The top of the directory tree under which the server's ServerRoot服務根目錄這個頂級目錄樹下
# configuration, error, and log files are kept. 是服務器配置、錯誤、日誌 文件
#
# NOTE! If you intend to place this on an NFS (or otherwise network) 注意 若是你打算放置上述在NFS或其它網絡
# mounted filesystem then please read the LockFile documentation 位置文件系統,請必定閱讀 LockFile 文檔
# (available at <URL:http://httpd.apache.org/docs/2.2/mod/mpm_common.html#lockfile>);
# you will save yourself a lot of trouble. 你本身也會解決不少問題
#
# Do NOT add a slash at the end of the directory path. 不要增長斜線 在目錄路徑的結尾
#
ServerRoot "/etc/httpd" ServerRoot 服務器根目錄……
#
# PidFile: The file in which the server should record its process Pid文件: 服務器記錄啓動時進程號的文件
# identification number when it starts. Note the PIDFILE variable in 注意 若是文件位置改變 文件變量必須在……
# /etc/sysconfig/httpd must be set appropriately if this location is 設置好
# changed.
# apache進程的進程號文件存放位置
PidFile run/httpd.pid
#
# Timeout: The number of seconds before receives and sends time out. 接收和發生超時信息的時間(秒)
#
Timeout 60
#
# KeepAlive: Whether or not to allow persistent connections (more than 是否容許保持鏈接(On 則每一個鏈接能夠傳遞多個請求)
# one request per connection). Set to "Off" to deactivate. 設置off爲 無效 停用(則一次鏈接能響應一個請求,而一個請求通常只傳輸一個文件)
# (若一個頁面有多個文件,設置爲On可明顯提升響應速度)
KeepAlive Off
#
# MaxKeepAliveRequests: The maximum number of requests to allow 最大請求數一次鏈接期間容許的最大請求數
# during a persistent connection. Set to 0 to allow an unlimited amount. 設置爲0 則不限制數量
# We recommend you leave this number high, for maximum performance. 咱們推薦你設置較高的數 爲了更好性能
#
MaxKeepAliveRequests 100
#
# KeepAliveTimeout: Number of seconds to wait for the next request from the 同一鏈接 等待下次請求 秒數
# same client on the same connection. 來自同一用戶
# (KeepAlive 的超時時間爲 15 秒種)
KeepAliveTimeout 15
##
## Server-Pool Size Regulation (MPM specific) 服務器-池 大小規則 (針對MPM)
## MPM:Multi-Processing Module 多路處理模塊
這裏MPM有兩種模式 prefork模式 worker模式
提早說明 選擇使用哪一種mpm模塊,須要在安裝apache時指定,例如:
在Apache 2.0中如何指定MPM。
#tar -xvzf httpd-2.0.59.tar.gz
#cd httpd-2.0.59
#./configure --help|grep mpm
--with-mpm=MPM Choose the process model for Apache to use.
MPM={beos|worker|prefork|mpmt_os2|perchild|leader|threadpool}
上述操做用來選擇要使用的進程模型,即哪一種MPM模塊
若是不用「--with-mpm」顯式指定某種MPM,prefork就是Unix平臺上缺省的MPM。它所採用的預派生子進程方式也是Apache 1.3中採用的模式。prefork自己並無使用到線程,2.0版使用它是爲了與1.3版保持兼容性;另外一方面,prefork用單獨的子進程來處理不一樣的請求,進程之間是彼此獨立的,這也使其成爲最穩定的MPM之一。
我以worker模式進行編譯安裝
# ./configure --prefix=/opt/apache --with-mpm=worker --enable-module=so
安裝完成後,可使用 httpd -l 來查看使用的哪一種mpm
[root@localhost ~]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
prefork模式:欲派生,多進程
一個單獨的控制進程(父進程)負責產生子進程,這些子進程用於監聽請求並做出應答。Apache老是試圖保持一些備用的(spare)或者是空閒的子進程用於迎接即將到來的請求。這樣客戶端就不須要在獲得服務前等候子進程的產生。
這個多路處理模塊(MPM)實現了一個非線程型的、預派生的web服務器 。
欲派生模式 prefork是Unix平臺上的默認(缺省)MPM,使用多個子進程,每一個子進程只有一個線程。每一個進程在某個肯定的時間只能維持一個鏈接,效率高,但內存佔用量比較大。
這個多路處理模塊(MPM)實現了一個非線程型的、預派生的web服務器,它的工做方式相似於Apache 1.3。它適合於沒有線程安全庫,須要避免線程兼容性問題的系統。它是要求將每一個請求相互獨立的狀況下最好的MPM,這樣若一個請求出現問題就不會影響到其餘請求。
prefork的工做原理是,控制進程在最初創建「StartServers」個子進程後,爲了知足MinSpareServers設置的須要建立一個進程,等待一秒鐘,繼續建立兩個,再等待一秒鐘,繼續建立四個……如此按指數級增長建立的進程數,最多達到每秒32個,直到知足MinSpareServers設置的值爲止。這就是預派生(prefork)的由來。這種模式能夠沒必要在請求到來時再產生新的進程,從而減少了系統開銷以增長性能。
MaxSpareServers設置了最大的空閒進程數,若是空閒進程數大於這個值,Apache會自動kill掉一些多餘進程。這個值不要設得過大,但若是設的值比MinSpareServers小,Apache會自動把其調整爲MinSpareServers+1。若是站點負載較大,可考慮同時加大MinSpareServers和MaxSpareServers。
MaxRequestsPerChild設置的是每一個子進程可處理的請求數。每一個子進程在處理了「MaxRequestsPerChild」個請求後將自動銷燬。0意味着無限,即子進程永不銷燬。雖然缺省設爲0可使每一個子進程處理更多的請求。
但若是設成非零值也有兩點重要的好處:
◆ 可防止意外的內存泄漏;
◆ 在服務器負載降低的時侯會自動減小子進程數。
所以,可根據服務器的負載來調整這個值。筆者認爲10000左右比較合適。
MaxClients是這些指令中最爲重要的一個,設定的是Apache能夠同時處理的請求,是對Apache性能影響最大的參數。其缺省值150是遠遠不夠的,若是請求總數已達到這個值(可經過 ps -ef|grep http|wc -l 來確認),那麼後面的請求就要排隊,直到某個已處理請求完畢。這就是系統資源還剩下不少而HTTP訪問卻很慢的主要緣由。系統管理員能夠根據硬件配置和負載狀況來動態調整這個值。雖然理論上這個值越大,能夠處理的請求就越多,但Apache默認的限制不能大於256。若是把這個值設爲大於256,那麼Apache將沒法起動。事實上,256對於負載稍重的站點也是不夠的。在Apache 1.3中,這是個硬限制。若是要加大這個值,必須在「configure」前手工修改的源代碼樹下的src/include/httpd.h中查找256,就會發現「#define HARD_SERVER_LIMIT 256」這行。把256改成要增大的值(如4000),而後從新編譯Apache便可。在Apache 2.0中新加入了ServerLimit指令,使得無須重編譯Apache就能夠加大MaxClients。
# prefork MPM 預建立(欲派生) MPM
# StartServers: number of server processes to start 啓動時服務器啓動的進程數
# MinSpareServers: minimum number of server processes which are kept spare 保存備用的最小服務進程數(最小空閒子進程數)
所謂空閒子進程是指沒有正在處理請求的子進程,
若是你將該指令的值設置爲比MinSpareServers
小,Apache將會自動將其修改爲"MinSpareServers
+1
# MaxSpareServers: maximum number of server processes which are kept spare 保存備用的最大服務進程數(最大空閒子進程數)
若是當前有超過MaxSpareServers
數量的空閒子進程,那麼父進程將殺死多餘的子進程
# ServerLimit: maximum value for MaxClients for the lifetime of the server apache子進程最多個數;參見*下方註釋
# MaxClients: maximum number of server processes allowed to start 服務器容許啓動的最大請求併發數(同時響應客戶數)
# MaxRequestsPerChild: maximum number of requests a server process serves * 一個服務子進程容許的最大請求數
<IfModule prefork.c> (到達限制就釋放從新創建)
StartServers 8 apache開始運行時,馬上啓動8個服務器子進程
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256 *MaxClients最大爲256,其若繼續增大則要加上ServerLimit這個參數,生效前提:必須放在其 它指令的前面,對於preforkMPM,只有在你須要將MaxClients設置成高於默認值256的時候才須要使用這個指令。要將此指令的值保持和MaxClients同樣。
MaxClients 256 最大子進程數量,默認爲256。任何超過MaxClients限制的請求都將進入等候隊列,一 旦一個連接被釋放,隊列中的請求將獲得服務。要增大這個值,你必須同時增大ServerLimit
MaxRequestsPerChild 4000 *每一個子進程在其生存期內容許伺服的最大請求數量到達MaxRequestsPerChild的限制後,子進程將會結束。若是 MaxRequestsPerChild爲"0",子進程將永遠不會結束。將MaxRequestsPerChild設置成非零值有兩個好處:
1. 能夠防止(偶然的)內存泄漏無限進行,從而耗盡內存。
2. 給進程一個有限壽命,從而有助於當服務器負載減輕的時候減小活動進程的數量。
</IfModule>
worker模式:欲派生,多線程
此多路處理模塊(MPM)使網絡服務器支持混合的多線程多進程。因爲使用線程來處理請求,因此能夠處理海量請求,而系統資源的開銷小於基於進程的MPM。可是,它也使用了多進程,每一個進程又有多個線程,以得到基於進程的MPM的穩定性。
worker使用多個子進程,每一個子進程有多個線程,每一個線程在某個肯定的時間只能維持一個鏈接,內存佔用量比較小,適合高流量的http服務器。缺點是假如一個線程崩潰,整個進程就會連同其任何線程一塊兒」死掉」,因此要保證一個程式在運行時必須被系統識別爲」每一個線程都是安全的」。
能夠處理海量請求,而系統資源的開銷小於基於進程的MPM。可是它也使用了多進程,每一個進程又有多個線程,以得到基於進程的MPM的穩定性。
worker是2.0 版中全新的支持多線程和多進程混合模型的MPM。因爲使用線程來處理,因此能夠處理相對海量的請求,而系統資源的開銷要小於基於進程的服務器。可是,worker也使用了多進程,每一個進程又生成多個線程,以得到基於進程服務器的穩定性。這種MPM的工做方式將是Apache 2.0的發展趨勢。
# worker MPM worker 模式 MPM
# StartServers: initial number of server processes to start 服務器啓動時創建的初始子進程數 每一個子進程中包含固 定的ThreadsPerChild線程數,各個線程獨立地處理請求
# MaxClients: maximum number of simultaneous client connections 同時鏈接的最大用戶數目 MaxClients設置了全部子進程中的線程總數
# MinSpareThreads: minimum number of worker threads which are kept spare 保有的最小空閒工做線程數
這個MPM將基於整個服務器監視空閒線程數。若是服務器中總的空閒線程數太少,子進程將產生新的空閒線程。
# MaxSpareThreads: maximum number of worker threads which are kept spare 保有的最大空閒工做線程數
這個MPM將基於整個服務器監視空閒線程數。若是服務器中總的空閒線程數太多,子進程將殺死多餘的空閒線程。
Apache老是試圖維持一個備用(spare)或是空閒的服務線程池。這樣,客戶端無須等待新線程或新進程的創建便可獲得處理。初始化時 創建的進程數量由StartServers
指令決定。隨後父進程檢測全部子進程中空閒線程的總數,並新建或結束子進程使空閒線程的總數維 持在MinSpareThreads
和MaxSpareThreads
所指定的範圍內。因爲這個過程是自動調整的,幾乎沒有必要修改這些指令的缺省值。能夠 並行處理的客戶端的最大數量取決於MaxClients
指令。活動子進程的最大數量取決於MaxClients
除以ThreadsPerChild
的值
# ThreadsPerChild: constant number of worker threads in each server process *每一個服務進程中的工做線程常數
# MaxRequestsPerChild: maximum number of requests a server process serves 服務進程中容許的最大請求數目
-
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25 每一個子進程創建的常駐的執行線程數,默認值25子進程在啓動時創建這些線程後就再也不創建新的線程
MaxRequestsPerChild 0 每一個子進程在其生存期內容許伺服的最大請求數量。到達MaxRequestsPerChild的限制後,
</IfModule> 子進程將會結束。若是MaxRequestsPerChild爲"0",子進程將永遠不會結束
MinSpareThreads和MaxSpareThreads的最大缺省值分別是75和250。這兩個參數對Apache的性能影響並不大,能夠按照實際狀況相應調節。
ThreadsPerChild是worker MPM中與性能相關最密切的指令。ThreadsPerChild的最大缺省值是64,若是負載較大,64也是不夠的。這時要顯式使用ThreadLimit指令,它的最大缺省值是20000。上述兩個值位於源碼樹server/mpm/worker/worker.c中的如下兩行:
#define DEFAULT_THREAD_LIMIT 64
#define MAX_THREAD_LIMIT 20000
這兩行對應着ThreadsPerChild和ThreadLimit的限制數。最好在configure以前就把64改爲所但願的值。注意,不要把這兩個值設得過高,超過系統的處理能力,從而因Apache不起動使系統很不穩定。
Worker模式下所能同時處理的請求總數是由子進程總數乘以ThreadsPerChild值決定的,應該大於等於MaxClients。若是負載很大,現有的子進程數不能知足時,控制進程會派生新的子進程。默認最大的子進程總數是16,加大時也須要顯式聲明ServerLimit(最大值是20000)。這兩個值位於源碼樹server/mpm/worker/worker.c中的如下兩行:
#define DEFAULT_SERVER_LIMIT 16
#define MAX_SERVER_LIMIT 20000
須要注意的是,若是顯式聲明瞭ServerLimit,那麼它乘以ThreadsPerChild的值必須大於等於MaxClients,並且MaxClients必須是ThreadsPerChild的整數倍,不然Apache將會自動調節到一個相應值(多是個非指望值)
#
# Listen: Allows you to bind Apache to specific IP addresses and/or 容許你綁定特定的IP地址或者端口 以取代默認值
# ports, in addition to the default. See also the <VirtualHost> 能夠參考……指令
# directive.
#
# Change this to Listen on specific IP addresses as shown below to 用特定的IP改變監聽端口 以下所示 防止Apache綁定0.0.0.0 IP
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen 12.34.56.78:80 例如:綁定監聽IP 爲12.34.56.78 端口 80
Listen 80 監聽端口:80
DSO: 動態共享對象支持 它是現代Unix派生出來的操做系統都存在着的一種動態鏈接機制。
它提供了一種在運行時將特殊格式的代碼,在程序運行須要時,將須要的部分從外存調入內存執行的方法
#
# Dynamic Shared Object (DSO) Support 動態共享對象支持
#
# To be able to use the functionality of a module which was built as a DSO you 爲了可以使用那些以DSO模式編譯的模塊中的函數,
# have to place corresponding `LoadModule' lines at this location so the 你必須有相應的「LoadModule」行 所以,在這裏包含了
# directives contained in it are actually available _before_ they are used. 這些指令,以便能在使用它以前激活
# Statically compiled modules (those listed by `httpd -l') do not need 那些靜態編譯的模塊不須要在這裏列出
# to be loaded here. (使用httpd -l 命令能夠列出這些模塊)
#
# Example: 好比
# LoadModule foo_module modules/mod_foo.so
#
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule info_module modules/mod_info.so
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 actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
#
# The following modules are not loaded by default: 如下模塊默認不加載
#
#LoadModule asis_module modules/mod_asis.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
#LoadModule cgid_module modules/mod_cgid.so
#LoadModule dbd_module modules/mod_dbd.so
#LoadModule dumpio_module modules/mod_dumpio.so
#LoadModule filter_module modules/mod_filter.so
#LoadModule ident_module modules/mod_ident.so
#LoadModule log_forensic_module modules/mod_log_forensic.so
#LoadModule unique_id_module modules/mod_unique_id.so
#
#
# Load config files from the config directory "/etc/httpd/conf.d". 配置文件的加載路徑是……
# Incude /usr/local/apache2/conf/ssl.conf
# Include /usr/local/apache2/conf/vhosts/*.conf 這個指令容許在服務器配置文件中加入其它配置文件
Include conf.d/*.conf 包括這些配置文件(將/etc/httpd/conf.d中的全部.conf結尾文件包含進來)
此處爲Apache的一個安全隱患,可能會暴露過多的信息給訪問者,開啓此狀態,訪問者能夠在特殊網頁看到Apache
配置信息,此處單獨寫附文1
#
# ExtendedStatus controls whether Apache will generate "full" status 擴展狀態控制 server-status 處理程序被調用時
# information (ExtendedStatus On) or just basic information (ExtendedStatus ExtendedStatus 爲 On時 只生成擴展信息
# Off) when the "server-status" handler is called. The default is Off. ExtendedStatus 爲 Off時 生成基本信息
# 默認爲off
#ExtendedStatus On (這裏的設置要配合後面指令段<Location/server-status>)
#
# If you wish httpd to run as a different user or group, you must run 若是你但願httpd進程運行在不一樣的用戶和組之間
# httpd as root initially and it will switch. 你第一次運行httpd時必須使用root身份,它才能轉換
#
# User/Group: The name (or #number) of the user/group to run httpd as. 以用戶/組的名字或者編號去運行httpd
# . On SCO (ODT 3) use "User nouser" and "Group nogroup". 在SCO ODT開放式桌面系統中用User nouser 和 Group nogroup
# . On HPUX you may not be able to use shared memory as nobody, and the 在惠普9000系列服務器的OS中,用nobody你可能不能
# suggested workaround is to create a user www and use that user. 使用共享內存。 建議爲工做區域創建一個用戶 www
# NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET) 注意一些內核拒絕設置組標識
# when the value of (unsigned)Group is above 60000;++ 當組變量超過60000
# don't use Group #-1 on these systems! 在系統中不要使用組-1
#
User apache 運行httpd的用戶和組
Group apache