目錄html
注意: 多個配置文件之間有衝突的話,排在後面的配置文件生效linux
加載動態模塊配置
/etc/httpd/conf/httpd.confweb
配置指定實現模塊加載格式:
LoadModule
模塊文件路徑可以使用相對路徑:相對於ServerRoot(默認/etc/httpd)
示例:
# 要加載的模塊名 模塊路徑 LoadModule auth_basic_module modules/mod_auth_basic.so
**DocumentRoot 「/path」**
文檔路徑映射:DocumentRoot指向的路徑爲URL路徑的起始位置
示例:apache
DocumentRoot "/app/data「 訪問該路徑: http://HOST:PORT/test/index.html 對應實際linux中的路徑爲 --> /app/data/test/index.html 注意:SELinux和iptables的狀態
DirectoryIndex index.html index.html.varvim
可基於兩種機制指明對哪些資源進行何種訪問控制訪問控制機制有兩種:客戶端來源地址,用戶帳號安全
在Apache2.2版本中,訪問控制是基於客戶端的主機名、IP地址以及客戶端請求中的其餘特徵,使用Order(排序), Allow(容許), Deny(拒絕),Satisfy(知足)指令來實現。bash
在Apache2.4版本中,使用mod_authz_host這個新的模塊,來實現訪問控制,其餘受權檢查也以一樣的方式來完成。舊的訪問控制語句應當被新的受權認證機制所取代,即使Apache已經提供了mod_access_compat這一新模塊來兼容舊語句。服務器
注意,若是修改網站根目錄後,發現沒有權限,優先查看selinux和iptables是否關閉app
配置案例
#該路徑指定咱們要訪問的路徑 <Directory "/data/website"> Order allow,deny #排序,先容許後拒絕 Allow from all #容許全部 </Directory> allow from 192.168.30.6 deny from 192.168.30.0/24 當定義的域衝突的時候,在後面的那個權限生效,因此這裏是拒絕訪問,allow和deny的次序很重要 #這樣最終的結果是:禁止100.100.*.* 容許172.16.*.* <files "*.txt"> order deny,allow deny from 172.16. 100.100 allow from 172.16 </files> <filematch 「.*\.(conf|ini)$"> order allow,deny deny from 172.16.100.100 allow from 172.16 </filematch>
基於IP的訪問控制:
無明確受權的目錄,默認拒絕
控制特定的IP訪問:
控制特定的主機訪問:
HOSTNAME:
<Directory "/data/website"> Require all granted #容許全部 </Directory> #表示不容許訪問目錄下全部conf爲後綴的文件 <Files "*.conf"> Require all denied </Files> <FilesMatch "\.(gif|jpe?g|png)$"> </FileMatch> #URL 寫法,表示限制用戶在網址欄中輸入的url地址權限的控制 好比www.magedu.com/test/ 這個 /test/就屬於url <Location /status> Require all denied </Location> #表示在URL匹配路徑中使用表達式 <LocationMatch "/(extra|special)/data"> ... </LocationMatch> 不能有失敗,至少有一個成功匹配才成功,即失敗優先 <RequireAll> Require all granted Require not ip 172.16.1.1 拒絕特定IP </RequireAll> 多個語句有一個成功,則成功,即成功優先 <RequireAny> Require all denied require ip 172.16.1.1 容許特定IP </RequireAny>
(1) Options:後跟1個或多個以空白字符分隔的選項列表在選項前的+,- 表示增長或刪除指定選項。這種方式就等於直接在Directory中填寫,而且生效。
常見選項:
示例
#表示該路徑不存在主頁時,返回索引列表,而且容許訪問軟鏈接文件指向源文件 <Directory /web/docs> Options +Indexes +FollowSymLinks </Directory> <Directory /web/docs/spec> Options +FollowSymLinks </Directory> <Directory /web/docs/spec> Options +Includes -Indexes </Directory> #該目錄下禁止軟鏈接功能 <Directory "/data/website"> Options -FollowSymLinks Require all granted </Directory>
(2) AllowOverride
與訪問控制相關的哪些指令能夠放在指定目錄下的.htaccess(由AccessFileName指定)文件中,覆蓋以前的配置指令 只對
示例
documentroot "/data/website" <Directory "/data/website/admin"> AllowOverride authconfig </Directory> 那麼他就是讀取 admin 這個目錄下的 .htaccess 文件中的設置,而後根據AllowOverride 來應用 <Directory "/data/website"> AllowOverride options=FollowSymLinks Require all granted </Directory>
日誌類型:
錯誤日誌:
定義日誌格式:LogFormat format strings
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
使用日誌格式:
CustomLog logs/access_log combined
參考幫助:
http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
參數詳解
%h 客戶端IP地址 %l 遠程用戶,啓用mod_ident纔有效,一般爲減號「-」 %u 驗證(basic,digest)遠程用戶,非登陸訪問時,爲一個減號「-」 Httpd 2.2常見配置 %t 服務器收到請求時的時間 %r First line of request,即表示請求報文的首行;記錄了這次請求的「方法」,「URL」以及協議版本 %>s 響應狀態碼 %b 響應報文的大小,單位是字節;不包括響應報文http首部 %{Referer}i 請求報文中首部「referer」的值;即從哪一個頁面中的超連接跳轉至當前頁面的,可是這個參數檢測到的不必定是真實跳轉鏈接,是能夠僞造的。咱們能夠經過分析這個值,來分析用戶是從哪些路徑來訪問咱們的網址的 %{User-Agent}i 請求報文中首部「User-Agent」的值;即發出請求的應用程序
修改日誌文件日期格式
%{%F %T}t
修改完成後,要經過下面的 customlog 來調用 ,最後的參數爲 這個logformat 最後的名字參數
優先設置,建議搭建完服務就確認好字符集,不然後期亂碼麻煩。
AddDefaultCharset UTF-8 中文字符集:GBK, GB2312, GB18030
定義路徑別名, 須要注意一點,定義的目錄路徑,是從linux上相對於根開始的絕對路徑,而不是相對於DocumentRoot的路徑。
格式: Alias /URL/ "/PATH/"
DocumentRoot "/www/htdocs" http://www.magedu.com/download/bash.rpm ==>/www/htdocs/download/bash.rpm Alias /download/ "/rpms/pub/" http://www.magedu.com/download/bash.rpm ==>/rpms/pub/bash.rpm http://www.magedu.com/images/logo.png ==>/www/htdocs/images/logo.png
認證質詢:WWW-Authenticate:響應碼爲401,拒絕客戶端請求,並說明要求客戶端提供帳號和密碼
認證:Authorization:客戶端用戶填入帳號和密碼後再次發送請求報文;認證經過時,則服務器發送響應的資源
安全域:須要用戶認證後方能訪問的路徑;應該經過名稱對其進行標識,以便於告知用戶認證的緣由
用戶的帳號和密碼
定義指定目錄認證方式 ,模式爲 basic:明文,表示若是用戶訪問該路徑,須要輸入正確的帳戶密碼後,才能訪問,不然沒法訪問。
#認證模式 AuthType Basic #登陸時的提示語句 AuthName "String" #指定用戶名密碼文件,使用命令htpasswd來建立該文件 AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" #指定使用該文件中的哪些用戶名是能夠訪問的 每一個用戶用空格隔開,而且不能有多餘的空格!!! Require user username1 username2 ... #建立訪問用戶帳戶 該文件名稱路徑不限,只要配置中指定便可 htpasswd -s /etc/httpd/conf.d/.httpuser user1 user2 user3 定義安全域 <Directory 「/path"> Options None AllowOverride None AuthType Basic AuthName "String「 AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" Require user username1 username2 ... </Directory> 容許帳號文件中的全部用戶登陸訪問: Require valid-user
提供帳號和密碼存儲(文本文件),使用專用命令完成此類文件的建立及用戶管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
-c:自動建立文件,僅應該在文件不存在時使用
-p:明文密碼
-d:CRYPT格式加密,默認
-m:md5格式加密
-s: sha格式加密
-D:刪除指定用戶
#首先建立認證配置文件 <Directory "/path"> AuthType Basic AuthName "visit wang home" AuthUserFile "/etc/httpd/conf.d/.httpuser" AuthGroupFile "/etc/httpd/conf.d/.httpgroup" Require group g1 g2 g3 </Directory > cd /etc/httpd/conf.d #建立認證文件 第一次建立的時候能夠加c 後面都不要加c 不然會覆蓋全部的舊帳戶 htpasswd -c .httpuser httpwang htpasswd .httpuser httpmage htpasswd .httpuser httpzhang vim .httpgroup g1:httpwang,httpmage g2:httpmage g3:httpzhang,httpmage
實現用戶家目錄的http共享
基於模塊mod_userdir.so實現
SELinux: http_enable_homedirs
相關設置:
vim /etc/httpd/conf/httpd.conf <IfModule mod_userdir.c> #UserDir disabled #指定共享目錄的名稱,只要在用戶的家目錄下建立該文件夾,以後這個家目錄賦予apache acl 權限,那麼http就能夠訪問用戶家目錄。每一個用戶的家目錄,均可以進行共享 UserDir public_html </IfModule> 準備目錄 su – wang;mkdir ~/public_html setfacl –m u:apache:x ~wang 訪問 http://localhost/~wang/index.html
當客戶請求的網頁並不存在時,服務器將產生錯誤文檔,缺省狀況下因爲打開了 ServerSignature選項,錯誤文檔的最後一行將包含服務器的名字、Apache的版本等信息
若是不對外顯示這些信息,就能夠將這個參數設置爲Off,生產環境中建議修改成Off!!
設置爲Email,將顯示ServerAdmin 的Email提示
顯示系統中的狀態信息 用於監控服務器狀態,這個頁面必定不要開放給任意用戶訪問,一般只容許運維進行查閱
配置方法
curl 192.168.1.30/status 這樣就能夠顯示服務器當前狀態 <Location /status> SetHandler server-status #設置訪問權限,只容許指定網段能夠訪問 Order allow,deny Allow from 172.16 </Location>