標籤:速度 root 地址 資訊 攻擊 上傳檔案 ott anon 也會
server標識相關指令:
ServerName
ServerAdmin
ServerSignature
ServerTokens
UseCanonicalName
UseCanonicalPhysicalPort
ServerAdmin和ServerTokens指令控制有關server的哪些資訊將出如今server產生的文檔中(如錯誤訊息)。ServerTokens指令設定serverHTTP回應標頭欄位的值。
ServerName、UseCanonicalName、 UseCanonicalPhysicalPort指令用來決定如何構建自引用URL,譬如。某client對一個檔案夾發出請求,但沒有包括檔案夾名最後的斜線"/",Apache將重新導向client到包括"/"的全名。以使client能夠正確解析文檔中的相對參照。
ServerName指令
文法:ServerName [scheme://] FQDN [:port]
這個指令用來設定server用於辨識自己的主機名稱和port號。主要用於建立重新導向URL。
比如,你的webserver的主機名稱為example.bob.com,但你的webserver同一時候在DNSserver中擁有一個DNS別名www.bob.com。而你希望webserver更顯著一點,你能夠在http.conf中使用ServerName指令來實現:
ServerName www.bob.com:80
當沒有指定ServerName時,server會嘗試對IP地址進行反向查詢來判斷主機名稱。假設在ServerName中沒有指定port號,server會監聽全部port。為了加強可靠性和可預測性,應該使用ServerName顯示的指定一個主機名稱和port號。
假設使用的是基於網域名稱的虛擬機器主機,在<VirtualHost>段中的ServerName將是為了匹配這個虛擬機器主機,在“Host:”要求標頭中必須寫主機名稱。
ServerAdmin指令
文法:ServerAdmin email-address|URL
這個指令用來設定server返回給client的錯誤資訊中包括的管理員郵件地址。便於使用者在收到錯誤資訊後能及時與管理員取得聯絡。
ServerAdmin [email protected]
ServerSignature指令
文法:ServerSignature . | Off | Email
預設:ServerSignature Off
這個指令用來配置server端產生文檔的頁尾(錯誤資訊、mod_proxy的FTP資料夾清單、mod_info的輸出)。使用該指令來啟用這個頁尾主要在於處於一個代理server鏈中的時候,使用者基本無法辨識出到底是鏈中的哪個server真正產生了返回的錯誤資訊。
http.conf中該指令預設是Off的,這樣就沒有錯誤行;使用On會簡單的添加一行關於server版本號碼和正在提供服務的ServerName。
比如。我使用ServerSignature .後,在沒有開啟web頁面時出現以下的資訊:
Apache/2.2.11 (Unix) PHP/5.2.8 Server at 192.168.120.240 Port 80
對於2.0.44以後的版本號碼,顯示具體的server版本號碼號將由ServerTokens指令控制。
ServerTokens指令
文法:ServerTokens Major | Minor | Min[imal] | Prod[uctOnly] | OS | Full
預設:ServerTokens Full
這個指令用來控制server回應給client的“Server:”應答頭是否包括關於server作業系統類型和編譯進的模組描寫敘述資訊。
注意:在使用ServerTokens指令時要先啟用ServerSignature指令。
ServerTokens Prod[uctOnly]:server會發送(比方):Apache
Apache Server at 192.168.120.240 Port 80
ServerTokens Major:server會發送(比方):Apache/2
Apache/2 Server at 192.168.120.240 Port 80
ServerTokens Minor:server會發送(比方):Apache/2.2
Apache/2.2 Server at 192.168.120.240 Port 80
ServerTokens Min[imal]:server會發送(比方):Apache/2.2.11
Apache/2.2.11 Server at 192.168.120.240 Port 80
ServerTokens OS:server會發送(比方):Apache/2.2.11(Unix)
Apache/2.2.11 (Unix) Server at 192.168.120.240 Port 80
ServerTokens Full:server會發送(比方):Apache/2.2.11(Unix)PHP/5.2.8
Apache/2.2.11 (Unix) PHP/5.2.8 Server at 192.168.120.240 Port 80
UseCanonicalName指令
文法:UseCanonicalName On | Off | DNS
預設:UseCanonicalName Off
這個指令用來構造Apache的自引用URL(一個指回同樣server的URL)。
UseCanonicalName .:會將ServerName設定的網域名稱用於全部的自引用URL、SERVER_NAME、CGI中的SERVER_PORT。
比方:假設你的webserver有自己的網域名稱,並且在DNS中有相應的NS記錄。並且httpd.conf將ServerName設定了網域名稱,那麼你在瀏覽器中輸入http://192.168.120.240/bbs,它會自己主動將這個IP地址變成其相應的網域名稱。比方http://www.bob.com/bbs/ 。
此時,假設其它client的電腦不能正確的解析webserver的這個網域名稱,那麼在訪問這個webserver時將會出現故障。由於webserver會自己主動將IP地址轉變成網域名稱。
UseCanonicalName Off:假設client提供了主機名稱和port,Apache將會使用client提供的這些資訊來構建自引用URL。這些值與用於實現基於網域名稱的虛擬機器主機的值相同,而且對於相同的client可用。CGI變數SERVER_NAME和SERVER_PORT也會由client提供的值來構建。
UseCanonicalName DNS:本設定用於為大量基於IP的虛擬機器主機支援那些不提供“Host:“頭的瀏覽器使用。使用這個選項時,Apache將對client連入的server的IP地址進行DNS反向解析。以構建自引用URL。
UseCanonicalPhysicalPort指令
文法:UseCanonicalPhysicalPort . | Off
預設:UseCanonicalPhysicalPort Off
這個指令用來配置server怎樣確定自己的port。
UseCanonicalPhysicalPort .:Apache有可能在構造server的規範port時為了符合UseCanonicalName指令而使用實際的物理port號。
UseCanonicalPhysicalPort Off:Apache不會使用實際的物理port號。而是依賴全部已經配置的資訊來構造一個合法的port號。
注意:
決定使用物理port號的次序例如以下:
UseCanonicalName .
Servername指定的port號
物理port號
預設port號
UseCanonicalName Off | DNS
“Host:”要求標頭提供的port號
物理port號
Servername指定的port號
預設port號
在UseCanonicalPhysicalPort Off的情況下。物理port號將會從上述順序中剔除。
Apacheserver全域配置之檔案定位配置篇
檔案定位相關指令:
CoreDumpDirectory
DocumentRoot
ErrorLog
LockFile
PidFile
ScoreBoardFile
ServerRoot
這些指令控制Apache正常工作所需的各種檔案的定位。假設路徑名不以斜線“/”開頭,那麼就覺得該檔案是相對於ServerRoot的相對路徑。
CoreDumpDirectory指令
文法:CoreDumpDirectory directory-path
這個指令用來控制Apache使用的核心轉儲檔案夾,該轉儲檔案夾預設位於“ServerRoot”下。由於這個檔案夾通常對於執行server的使用者是不可寫的。核心轉儲一般也不會寫入內容。假設你在調試中須要核心轉儲,那麼你能夠用這個指令來指定另外一個檔案夾。
DocumentRoot指令
文法:DocumentRoot directory-path
這個指令用來設定httpd提供服務的檔案夾。
在沒有使用類似Alias這種指令的情況下。server會將請求中的URL附加到DocumentRoot後面以構成指向文檔的路徑。
比如:
DocumentRoot “/usr/local/httpd/htdocs”
那麼在訪問http://192.168.120.240/bbs/index.html時,實際上就是訪問/usr/loca/httpd/htdocs/bbs/index.html。
假設directory-path不是絕對路徑。則就會被假定為相對於ServerRoot的路徑。
比如:
ServerRoot “/usr/local/httpd/”
DocumentRoot “htdocs”
那麼在訪問http://192.168.120.240/bbs/index.html時,實際上還是會被定位到/usr/loca/httpd/htdocs/bbs/index.html。
ErrorLog指令
文法:ErrorLog file-path | syslog[:facility]
預設:ErrorLog “logs/error_log”
這個指令用來設定當server遇到錯誤時記錄錯誤記錄檔的檔案。假設file-path不是以/開頭的絕對路徑,那麼將會被覺得是一個相對於ServerRoot的相對路徑。
LockFile指令
文法:LockFile filename
這個指令設定當AcceptMutex指令的值是fcntl或flock的時候,Apache使用的鎖檔案的位置。
一般保持預設值。改變預設值的主要原因是logs檔案夾位於一個NFS檔案系統上。由於鎖檔案必須位於本地磁碟上。主server進程的PID會自己主動加入到檔案名稱後面。
注意:不要將該鎖檔案放在不論什麼人都有寫入權限的檔案夾中。由於別人能夠通過建立一個與server企圖建立的鎖檔案同名的檔案,來阻止server啟動。
PidFile指令
文法:PidFile filename
預設:PidFile “logs/httpd.pid”
這個指令用來設定server記錄父進程(監控進程)PID的檔案。
假設指定的不是絕對路徑,那麼將會被覺得是一個相對於ServerRoot的相對路徑。
ScoreBoardFile指令
文法:ScoreBoardFile file-path
這個指令用來設定儲存子進程協調資料的檔案。Apache使用記分板(scoreboard)在父進程和子進程之間進行通訊。
一些體系機構要求有一個檔案來協助通訊。
假設未指定這個檔案。Apache會首先嘗試在匿名共用記憶體中建立完整的記分板。假設失敗。將繼續嘗試使用基於檔案的共用儲存空間在磁碟上建立這個檔案。若利用這個指令指定這個檔案的位置,則Apache將總是在磁碟上建立這個檔案。
將ScoreBoardFile放置在RAM DISK中對訪問速度有非常大協助。
可是要注意放置的位置以及許可權。
ServerRoot指令
文法:ServerRoot directory-path
這個指令用來設定Apacheserver所在的檔案夾。
一般包括conf/、logs/等子檔案夾。
其它設定檔的相對路徑一般都是基於此檔案夾的。
比如:
ServerRoot “/usr/local/httpd/”
Apacheserver全域配置之資源限制配置篇
資源限制相關指令:
LimitRequestBody
LimitRequestFields
LimitRequestFieldsize
LimitRequestLine
RLimitCPU
RLimitMEM
RLimitNPROC
ThreadStackSize
LimitRequest*系列指令用來限制Apache在讀取client請求的過程中使用的資源數量。通過限制這些值,能夠減輕某些拒絕服務(DOS)攻擊。
RLimit*系列指令用來限制Apache子進程所派生的進程使用的資源數量。
通常。這些指令用來控制CGI指令碼和SSI exec命令所使用的資源。
ThreadStackSize指令在某些平台上用來控制堆棧大小。
LimitRequestBody指令
文法:LimitRequestBody bytes
預設值:LimitRequestBody 0
這個指令用來設定client發送的HTTP請求的最大位元組數。LimitRequestBody指令能夠作用於整個server、特定檔案夾、特定檔案、特定位置。
假設client的請求超出了LimitRequestBody設定的值,那麼server會回應一個錯誤資訊給client。而不會去處理這個請求。
Bytes在0(不限制)到2147483647(2GB)之間。
比方:你同意client將檔案上傳到某個位置,而且希望將上傳檔案的限制大小為500K,
LimitRequestBody 512000
LimitRequestFields指令
文法:LimitRequestFields number
預設:LimitRequestFields 100
這個指令用來設定client向server請求中HTTP要求標頭域的數量。一般一個client要求標頭域的數量非常少大於20。可是client的不同這個數字也將有非常大的差異。
這個常常取決於使用者配置他們的瀏覽器延伸以支援更具體的內容協商。可選的HTTP擴充常常使用要求標頭域來實現。
number是一個0(不限制)到32767之間的整數。預設值為編譯時間的常量DEFAULT_LIMIT_REQUEST_FIELDS(公布值為100)。
LimitRequestFieldsize指令
文法:LimitRequestFieldsize bytes
預設:LimitRequestFieldsize 8190
這個指令用來設定client發送的HTTP要求標頭的最大位元組數。一般來說。server須要此值夠大。以適應普通客戶的的不論什麼請求的頭域大小。頭域的大小一般與瀏覽器支援的內容協議有密切關係。
普通情況下,不要更改這個值,使用預設就可以。
LimitRequestLine指令
文法:LimitRequestLine bytes
預設:LimitRequestLine 8190
這個指令用來設定client發送的HTTP請求行的最大位元組數。
請求行包含HTTP方法、URL、協議版本號碼等。
因此LimitRequestLine指令可以限制URL的長度,server會須要這個值足夠大以裝載它全部的資源名,包含可能在GET請求中所傳遞的查詢部分的全部資訊。
普通情況下,不要更改這個值。使用預設就可以。
RLimitCPU指令
文法:RLimitCPU seconds | max [seconds|max]
預設:沒有定義,使用作業系統預設值
這個指令用來設定Apache子進程派生的進程佔用CPU的最大秒數。
這裡能夠設定一個或者兩個參數。
第一個參數設定全部進程的軟資源限制,第二個參數設定最大資源限制。兩個參數均可設定為一個數值或者是“max”(表示設定為作業系統同意的最大值)。要增大此資源限制最大值須要以root執行server或是在初始化啟動語句中進行設定。
這個指令僅僅作用於Apache子進程所派生的進程,而不是Apache子進程本身。
這個範圍包含CGI指令碼和SSI運行命令,不包含全部從Apache父進程派生出的進程。比方管道日誌。
CPU資源限制表示每進程佔用的秒數。
RLimitMEM指令
文法:RLimitMEM bytes | max [bytes|max]
預設:沒有定義,使用作業系統預設值
這個指令用來設定Apache子進程派生的進程佔用記憶體的最大位元組數。
這裡能夠設定一個或者兩個參數。第一個參數設定全部進程的軟資源限制,第二個參數設定最大資源限制。
兩個參數均可設定為一個數值或者是“max”(表示設定為作業系統同意的最大值)。
要增大此資源限制最大值須要以root執行server或是在初始化啟動語句中進行設定。
這個指令僅僅作用於Apache子進程所派生的進程,而不是Apache子進程本身。
這個範圍包含CGI指令碼和SSI運行命令。不包含全部從Apache父進程派生出的進程。比方管道日誌。
記憶體資源限制表示為每進程佔用的位元組數。
RLimitNPROC指令
文法:RLimitNPROC number | max [number|max]
預設:沒有定義,使用作業系統預設值
這個指令用來設定Apache子進程派生的進程數目。
這裡能夠設定一個或者兩個參數。
第一個參數設定全部進程的軟資源限制。第二個參數設定最大資源限制。
兩個參數均可設定為一個數值或者是“max”(表示設定為作業系統同意的最大值)。要增大此資源限制最大值須要以root執行server或是在初始化啟動語句中進行設定。
這個指令僅僅作用於Apache子進程所派生的進程。而不是Apache子進程本身。這個範圍包含CGI指令碼和SSI運行命令,不包含全部從Apache父進程派生出的進程。比方管道日誌。
進程限制控制了每一個使用者的進程數。
ThreadStackSize指令
文法:ThreadStackSize size
預設:NetWare上為65536,其它平台上等於作業系統預設值
這個指令用來設定處理client串連(包含調用模組以協助處理)的線程同意使用的最大棧尺寸(位元組)。
大多數情況下。作業系統預設的棧尺寸非常合理。可是在某些情況下。須要調整這個值:
在預設棧尺寸較小的平台上(比方HP-UX)。Apache可能會在使用一些須要較大棧尺寸的第三方模組時崩潰。
這種問題能夠通過將ThreadStackSize設定為一個較大的值來解決。這種調整應當只在第三方模組提供者明白要求的情況下才須要,或者是您通過診斷確定是因為棧空間太小而導致崩潰。
在某些平台上。假設預設的棧空間大於server執行所需空間,那麼將ThreadStackSize值減少到小於作業系統預設值能夠讓每一個進程中同意產生的最大線程數量添加。
這樣的類型的調整應該僅在測試環境中使用。而且對全部server進程進行充分的測試。由於處理某些罕見的請求須要較大的棧空間。一個非常小的server配置變化就有可能使得當前的ThreadStackSize設定變得不合適。
apacheserver全域配置具體解釋