Apache配置文件重要指令詳解

寫在前面html


  在運維的工做中很大一部分的時間都在和Web服務器打交道。當前在開源web服務器端的軟件有兩大巨頭,其一爲Apache,二爲Nginx。近年來Nginx的市場佔有率逐年遞增。可是,做爲一個合格的運維工程師,要熟練的掌握這兩種服務端軟件的配置。
web

Apache配置文件詳解正則表達式


httpd配置文件主要有指令和容器兩種組成。容器指令通常只在容器中生效。
vim

ServerRoot指令centos

  ServerRootApache的安裝家目錄,rpm安裝默認爲/etc/httpd瀏覽器

Listen指令服務器

  設置服務器監聽的IP以及端口號,默認監聽服務本機全部ip地址的80端口。網絡

  語法:Listen[ip:]port    #配置文件中能夠屢次使用Listen指令,可是要至少使用一次併發

DocumentRoot指令app

  設置web服務器的資源根目錄,也就是客戶端訪問網站的根路徑。默認爲/var/www/html      

持久連接配置

  持久連接爲鏈接創建以後,每一個資源獲取完成後不會斷開鏈接,而是繼續等待其餘的請求完成。斷開有兩個條件,數量限制和時間限制。

  時間限制:在上一個數據包發送完畢,間隔一個固定時間,若是超過這個時間,鏈接被釋放。

  數量限制:若是連續請求多個資源,資源數量達到某個閾值,鏈接會被釋放,讓後從新創建鏈接。    

KeepAlive  On   #啓用持久連接

KeepAliveTimeout  15 #等待同一客戶端在同一鏈接上的下一個請求的秒數。

KeepAliveRequests  100 #在持久鏈接中容許的最大請求數。設置爲0,容許無限數量。

可使用telnet 協議演示持久連接的效果。

telnet  172.18.11.6  

GET  / http/1.1

host:172.18.11.6   #兩次回車,構建http請求報文,若是是持久鏈接,在獲取頁面後,telnet不斷開 

 

LoadModule指令

  ApacheDSO機制實現,動態的加載卸載模塊,rpm安裝默認啓用該功能,若是編譯安葬須要開啓--enable-somod_so模塊一靜態方式集成在core模塊中。支持的模塊通常存儲在SerRoot/modules目錄下。加載模塊時,只需把模塊前面的註釋取消便可,卸載反之。

  語法:LoadModule模塊(模塊中定義,不可變動) 模塊的路徑名稱(相對ServerRoot的路徑)      

[root@centos6  conf]# httpd -l|grep mod_so #httpd爲當前工做模式,查看當前版本是否支持動態加載/卸載模塊

[root@centos6  conf]# httpd.worker -M  #httpd.woker爲當前的工做模式,查看當前已經加載的模塊  


Include指令

  在配置文件中有Include conf.d/*.conf 指令,系統默認加載在ServerRoot/conf.d 目錄下全部.conf結尾的配置文件。

IfModule容器

  該容器中的指令只有在對應的模塊被加載時纔會被處理。該指令語法<IfModule [!]模塊>指令<IfModule >

  <IfModuleprefork.c>爲例:  

      

<IfModule  prefork.c>  #只有在使用prefork模塊時纔會生效

StartServers       8   #服務啓動時啓動的服務進程數,除了出進程以外,開啓8個子進程來服務

MinSpareServers    5   #最小空閒進程數

MaxSpareServers   20   #最大空閒進程數   (假若有200個客戶端同時請求,又潮水般退去,這時空閒的200個進程不會所有被存在,而是釋放至最大空閒進程數)

ServerLimit      256   #服務器進程數量最大值

MaxClients       256   #最大併發鏈接數

MaxRequestsPerChild  4000 #一個服務器進程最多可以響應所少次請求。一個進程處理完請求後不會被釋放,而是加入空閒進程隊列,一個進程最多可以被重複使用4000次,而後系統會殺掉這個進程。

</IfModule>

 

<IfModule  worker.c>  #使用worker.c工做模式下生效

StartServers         4     #服務啓動時啓動的服務進程數,又受

MaxClients         300   #最大併發鏈接數

MinSpareThreads     25     #最小空閒線程數,當所有線程都被用於處理請求時,系統會再次建立最小個線程等待用戶請求

MaxSpareThreads     75    #最大空閒線程數,

ThreadsPerChild     25   #一個進程能夠建立的線程數

MaxRequestsPerChild  0   #一個進程最多可以響應請求的最大次數,0表示無上限

</IfModule>

 

ServerTokens指令

  顯示服務器版本信息

ServerTokens  Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

ServerTokens  Prod[uctOnly]  Server: Apache

ServerTokens  Major: Server: Apache/2

ServerTokens  Minor: Server: Apache/2.0

ServerTokens  Min[imal]: Server: Apache/2.0.41

ServerTokens  OS: Server: Apache/2.0.41 (Unix)

ServerTokens  Full (or not specified): Server: Apache/2.0.41

(Unix)  PHP/4.2.2 MyMod/1.2

This  setting applies to the entire server and cannot be

enabled  or disabled on a virtualhost-by-virtualhost basis.

After  version 2.0.44, this directive also controls the

information  presented by the ServerSignature directive.

建議使用:ServerTokens  Prod

 

ServerName指令

  設置本機的主機名稱以及端口,通常在URL的重定向或者虛擬主機中用到。

      

Options指令

  該指令爲特定目錄設置的選項,語法格式:Options [+|-]選項  [[+|-] 選項]。選項有如下幾種             

None:不啓用任何功能

All:開啓除MultiViews以外的全部功能

ExecCGI:容許執行該目錄下的全部CGI腳本

FollowSymlinks:容許指定目錄下的文件連接到目錄外的文件或者目錄

Indexes:若是URL對應的目錄下沒有DirectoryIndex指定的首頁文件,則顯示該目錄下的文件索引

 

Order指令   

  控制默認訪問狀態以及allowdeny的次序。

  Orderallowdeny 先檢查容許,再檢查拒絕,有衝突時拒絕優先

  Orderdeny,allow  先檢查拒絕,在檢查容許,有衝突時容許優先

             

Order  deny,allow

Deny  from all 拒絕全部訪問

   

Order  deny,allow

deny  172.18

allow  172.18.11.6

拒絕除172.18.11.6以外全部172.18網段的主機訪問

支持的網絡形式:

    172.18

    172.18.0.0

    172.18.0.0/16

    172.18.0.0/255.255.0.0  

AllowOverride指令

  設置與訪問控制相關的哪些指令能夠放在指定目錄下的.htaccess(AccessFileName指定)文件中,覆蓋以前的配置指令,該指令只能使用在<Directory>容器中

AllowOverride  All 全部指令都有效

AllowOverride  None .htaccess文件無效

AllowOverride  AuthConfig Indexes 除了AuthConfig Indexes的其餘指令都沒法覆蓋。

Directory容器

  這個指令也是一種容器類型,做用於特定的文件系統目錄,子目錄以及目錄下的內容,語法格式:<Directory dir_path>指令</Directory>。路徑支持使用正則表達式的寫法<Directory ~ "正則">指令</Directory>。通常用於對某些目錄及文件的訪問控制。    

Files容器

  <Directory>相似,做用於文件,也可以使用正則表達式,語法<Files [~] "文件名"></Files>

Lacation容器

  定義的指令僅對特定的URL有效,語法<LacationURL>指令</Lacation>,支持正則表達式,使用~號。

ErrorLog指令

  錯誤訪問日誌路徑,默認爲ServerRoot/logs/error_log

LogLevel指令

  日誌級別: debug,info, notice, warn, error, crit,alert, emerg

LogFormat指令

  定義的日誌格式,可使用Apache預先設置的格式字符。語法:LogFormat日誌格式 別名

  Apache經常使用的預約義的格式字符串:

%h : 客戶端IP地址

%l : Remote loganme -表示爲空

%u :Remote user -表好爲空

%t :服務收到請求的時間

%r :請求報文首行信息(請求方法,URL 協議版本)

%>s :響應狀態碼         

%b : 響應報文的大小,單位是字節,不報闊響應報文首部

%{Referer}i: 請求報文當中"referer"首部的值,當前資源的訪問入口,即從那個頁面中的超連接跳轉而來

本身敲地址來的,是不會記錄的,可查看從哪兒跳轉過來的,可放置倒鏈(爲他人作嫁衣)

%{User-Agent}i:請求報文當中"User-Agent"首部的值;即發出請求用到的應用程序;瀏覽器類型


CustomLog指令

  設置客戶端的訪問日誌以及使用何種格式的日誌來記錄。默認路徑爲ServerRoot/logs/access_log ,語法:CustomLog 文件名。

VirtualHost容器

  該容器的設置能夠實現Apache的虛擬主機功能,虛擬主機就是在一臺服務器上同時運行多個web業務。Apache支持基於ip,端口以及域名的主機類型。可是基於ip的虛擬主機類型須要有獨立的ip地址,在這個ip地址稀缺的年代,該種方式無疑不會在互聯網上大規模實現。基於端口的實現方式,因爲其使用方法的不便利也不會在互聯網使用。基於ip和端口方式的虛擬主機只在局域網中使用。基於域名的虛擬主機才真正的受你們所歡迎。服務器處理基於域名的虛擬主機請求時根據http的頭部信息來實現網站的分離解析,用戶可以使用不一樣的域名訪問位於同一ip地址的服務器資源。下面爲基於域名的虛擬主機配置文件:

[root@www conf.d]# vim /etc/httpd/conf.d/httpd-vhosts.conf

NameVirtualHost *:80    #必須開啓基於域名的虛擬主機

<Virtualhost *:80>   web虛擬主機

ServerName www.zachary.top

DocumentRoot /var/www/html/web  #3臺虛擬主機使用不一樣的資源主目錄,便於管理

ErrorLog "logs/www.zachary.top-error_log"  日誌文件獨立存放便於管理和分析

CustomLog "logs/www.zachary.top-access_log" common

</Virtualhost>


<Virtualhost *:80>   #若使用基於ip的虛擬主機,能夠把*改成指定ip,基於端口的實現,更改80爲不一樣的端口

ServerName bbs.zachary.top

DocumentRoot /var/www/html/bbs

ErrorLog "logs/bbs.zachary.top-error_log"

CustomLog "logs/bbs.zachary.top-access_log" common

</Virtualhost>


<Virtualhost *:80>

ServerName blog.zachary.top

DocumentRoot /var/www/html/blog

ErrorLog "logs/blog.zachary.top-error_log"

CustomLog "logs/blog.zachary.top-access_log" common

</Virtualhost>   

基於域名的虛擬主機實現,在互聯網須要dns解析的支持,如果本地測試可使用修改host文件的方式或者搭建一個本地的DNS服務器來實現。基於ip和端口的虛擬主機實現,在VirtualHost後面的*修改成指定ip或者端口就可實現

相關文章
相關標籤/搜索