基本語法
常量的定義與使用,使用關鍵詞 Define 可以定義常量,使用 ${} 插入常量,如下
語法規則 | 說明 | 示列 |
---|---|---|
Define | 定義常量 | Define SRVROOT “D:/srv/Apache24” |
${} | 使用常量 | ServerRoot “${SRVROOT}” |
/ | 表示路徑時使用 / 而不使用 \ | D:/srv/Apache24 |
基本配置
配置參數 | 配置說明 | 示列 |
---|---|---|
ServerRoot | Apache運行目錄 | ServerRoot “D:/Apache24” |
Listen | 監聽端口 | Listen 80 |
LoadModule | 加載模塊 | LoadModule 模塊名 模塊文件 |
ServerAdmin | 管理員的郵箱,服務器出現問題時,會在頁面中顯示 | ServerAdmin admin@example.com |
ServerName | 服務器解析域名 | ServerName www.example.com |
ServerAlias | 域名別名,配置多域名解析時使用 | ServerName api.example.com |
DocumentRoot | 網站根目錄 | DocumentRoot “${SRVROOT}/htdocs” |
DirectoryIndex | 網站自動執行文件,默認文件 | DirectoryIndex index.php index.html |
ErrorLog | 錯誤日志 | ErrorLog “logs/error.log” |
CustomLog | 設定日志的文件名和格式 | CustomLog “logs/access.log” common |
LogLevel | 錯誤提示等級 | LogLevel warn |
Include | 包含其他的配置文件,支持通配符 * | Include conf/vhosts/*.conf |
Alias | 使客戶端可以訪問到DocumentRoot以外的本地文件 | Alias /myphoto “E:/照片” |
ScriptAlias | 映射一個URL到文件系統并視之為CGI腳本目錄 | ScriptAlias /cgi-bin/ “D:/wamp/bin/Apache2.4.23/cgi-bin” |
DefaultType | 當服務器無法確定一個文檔的內容類型時發送的默認MIME內容類型 | DefaultType text/plain |
AddType | 為特定后綴的文件指定MIME類型,這里的設置將覆蓋mime.types中的設置 | AddType application/x-httpd-php .php .html .htm (前導點可帶可不帶) |
ErrorDocument | 當遇到錯誤的時候服務器將給客戶端什么樣的應答。 語法:ErrorDocument error-code document 其中error-code時服務器返回的錯誤代碼,document是回應的數據,可以是簡單的文本,本地網頁,本地CGI程序,或遠程主機上的網頁 | ErrorDocument 500 “The server made a boo boo.” |
EnableMMAP | httpd在遞送中如果需要讀取一個文件的內容,是否可以使用內存映射 | |
EnableSendfile | 控制httpd是否可以使用操作系統內核的sendfile支持來將文件發送到戶端 | EnableSendfile Off |
容器設置
所有的容器都是成對出現的,和html的標簽一樣
< IfModule >容器
封裝一組指令,并根據指定的模塊是否啟用決定是否進行處理
使用 <IfModule 模塊名> 或 <IfModule !模塊名> 判斷模塊是否載入<IfModule module_name>當模塊module_name加載時執行里面的內容
</IfModule><IfModule !module_name>當模塊module_name沒有加載時執行里面的內容
</IfModule>
< IfDefine >容器
封裝一組指令,只有在啟動時啟動參數測試結果為真時才生效
<IfDefine parameter-name> 或 <IfDefine !parameter-name>
parameter-name是在服務啟動時,通過httpd命令行的 -D parameter 這樣的形式指定的,
例如 httpd -D Proxy使用方式與<IfModule>一致
< Directory > 與 < DirectoryMatch > 容器
封裝一組指令,在指定的目錄以及其子目錄中生效,這個目錄必需時一個完整的目錄
使用通配符 “"、"?" 匹配目錄,也可以使用 “[]” 來確定字符范圍,不過無論是"”、"?" , 還是 “[]” 都不能匹配 “/”
<Directory /srv/apache*/>AllowOverride noneRequire all denied
</Directory>
也可以在表達式前使用"~"表示使用正則表達式
<Directory ~"^/srv/apache[0-9]{2}/">AllowOverride noneRequire all denied
</Directory>
< DirectoryMatch >的使用方式與與< Directory >一致,區別時可以直接接受正則表達式,而無須加上"~"
< Files > 與 < FilesMatch > 容器
與< Directory >容器作用于目錄相對應,< Files >容器只作用于文件,使用方法一致
<Files ~"^\.html">Order Deny,AllowAllow from All
</Files>
< Location >與< LocationMatch >容器
對URL進行訪問控制;使用方法與上述幾個容器一致。
指令設置
Options:控制在特定目錄中將使用哪些服務器特性
參數 | 說明 |
---|---|
Indexes | 若訪問目錄下無index文件,則準許顯示該目錄下的文件列表以供選擇。 |
FollowSymLinks | 準許在目錄中使用符號鏈接到其他目錄。 |
MultiViews | 準許內容協商的“多重視圖”。如果客戶端請求的路徑可能對應多種類型的文件,服務器將根據客戶端請求的具體情況自動選擇一個最匹配客戶端要求的文件。例如只在地址欄輸入index也可以訪問到index.php頁面。 |
Includes | 準許SSI。 |
IncludesNOEXEC | 準許SSI,但不可使用exec和include功能。 |
ExecCGI | 準許在該目錄下使用CGI。 |
All | 表示除了MultiViews之外的所有特性。 |
None | 表示不啟用任何的服務器特性。 |
注意:如果一個目錄被多次設置了options,則最特殊的一個會被完全接受。
AllowOverrid:是否準許文件“.htaccess”中設定的權限覆蓋文件中設定的權限
參數 | 說明 |
---|---|
All | 準許覆蓋 |
None | 不準許覆蓋 |
AuthConfig | 允許使用與認證授權相關的指令。 |
FileInfo | 允許使用控制文檔類型的指令、控制文檔元數據的指令、mod_rewrite中的指令、mod_actions中的Action指令。 |
Indexs | 允許使用控制目錄索引的指令。 |
Limit | 允許使用控制主機訪問的指令。 |
控制訪問狀態
apache2.2 和 apache2.4 的配置方式不一樣,2.2使用order+allow/deny,2.4使用Require語句來配置
apache2.2
Order:控制默認的訪問狀態和allow、deny指令生效的順序
參數 | 說明 |
---|---|
allow | 允許訪問。 |
deny | 拒絕訪問。 |
這兩個參數由最后一個出現的參數決定,如“Order allow,deny”默認拒絕了所有的意思(中間有且只有一個逗號),但最終的判斷結果還要總下面的allow、deny語句中各自所包含的范圍(如果有的話),這兩個語句后面都一定接著“from”,否則Apache會無法啟動。“Order allow,deny”表示先判斷allow語句再判斷deny語句。
# 拒絕所有請求
Order deny,allow
deny from all# 允許所有請求
Order allow,deny
allow from all# 只允許某個特定IP的訪問
Order deny,allow
deny from all
allow xxx.xxx.xxx.xxx
apache2.4
# 拒絕所有請求
Require all denied# 允許所有請求
Require all granted# 只允許某個特定IP的訪問
Require host xxx.xxx.xxx.xxx