Linux之Web服務(2)Httpd服務配置之二html
前言web
在上一篇經過一些簡單的案例或說明來介紹了部分關於Httpd2.4中httpd.conf配置文件中的配置選項及對應的功能。主要是對訪問控制和在處理對指定目錄或文件進行訪問控制的一些安全問題性的處理。可是一直沒有提到訪問控制的具體講解,本篇列出訪問控制的具體使用選項和功能,以及其它高級配置。正則表達式
一、Httpd2.4 文檔訪問受權具體參數vim
前提:文檔訪問受權選項配置只適合在如下標籤中生效:瀏覽器
<Directory > <FIles> <Location> <LocationMatch>安全
容許全部地址訪問:Require all grantedbash
拒絕全部地址訪問:Require all denied服務器
注意:要限制制度訪問的主機或IP須要配置RequireAll標籤,並在標籤裏添加控制指令網絡
<RequireAll>ide
</RequireAll>
<RequireAll>標籤配置具體訪問範圍限定設置:
基於IP控制:
Require ip ADDRESS #表示容許指定IP地址訪問
Require not ip ADDRESS #表示拒絕指定IP地址訪問
ADDRESS:
ip:#指定主機IP,如10.1.249.223, 10.1.249.223/16等
network: #指定網段IP,支持下面3中寫法:
10.1.0.0/255.255.0.0 #指定掩碼
10.1.0.0/16 #掩碼prefix前綴格式
10.1 #省略寫法,表示10.1.0.0全部子網
基於主機名控制:
Require host HOSTNAME #容許指定主機名的主機
Require not host HOSTNAME #拒絕指定主機名的主機
HOSTNAME:
FQDN #完整域名
DOMAIN.TLD #完整主機名
二、別名路徑:
提示:使用別名要在<ifModule alias_module>標籤中添加對應的別名Alias指令,並在其標籤下嵌套<Directory指令目錄>設置訪問控制,Alias 指定定義的別名纔會生效。實例如:
指令格式:Alias /URL/ 「/PATH/TO/SOME_DIR/」
如:
Alias /myweb/ 「/web/」 #當訪問站點/myweb/目錄時爲訪問文件系統的/web/目錄 Alias /xx 「/test/xx」 #當訪問站點/xx目錄時,訪問的爲文件系統的/test/xx目錄
注意:若是設置的文件系統的目錄後面最後添加了/及,好比aa/則Alias的別名指定的URL也要添加斜槓如:my_aa/。
三、httpd-manual 本地幫助文檔
在某些狀況下配置和部署Apache HTTP Server時,通常會去Apache的官方上去找最權威的配置幫助指南,可是若是連上外網,或者網速很慢的狀況下這樣去獲取幫助有些困了。因而Httpd服務也提供了一些插件中自帶對應版本的Httpd服務本地幫助文檔。能夠同安裝此幫組文檔來在本地瀏覽幫助信息。
詳細操做以下:
#安裝httpd-maunal
[root@root ~]# yum -y install httpd-manual
#查看httpd-maunal主配置文件
[root@root ~]# rpm -ql httpd-manual | grep '/conf\>' /etc/httpd/conf.d/manual.conf
#查看httpd-manual配置文件/etc/httpd/conf.d/manual.conf
[root@root ~]# grep '^[^#]' /etc/httpd/conf.d/manual.conf AliasMatch ^/manual(?:/(?:de|en|fr|ja|ko|ru))?(/.*)?$ "/usr/share/httpd/manual$1" <Directory "/usr/share/httpd/manual"> Options Indexes AllowOverride None Require all granted </Directory>
解析:這裏的配置就是配置了一個決對路徑Directory標籤,而且和一個支持擴展正則表達式的一個AliasMatch別名標籤。訪問URLs爲 http://站點地址或域名/manual/爲查看文檔界面的首頁。
#可使用瀏覽器來訪問,最好使用圖形界面的瀏覽器
四、查看當前站點狀態server-status
說明:當配置好了服務以後想要知道當前Web站點服務的一些狀態信息,能夠經過加載並配置server-status模塊來在查看當前web網絡狀態。
具體操做:
#查看當前是否有加載server-status模塊
[root@root ~]# httpd -M | grep '\<status' status_module (shared)
#固然查看全部(多個用for)默認對應的模塊加載配置文件/etc/httpd/conf.modules.d/下添加status模塊
[root@root ~]# for i in "/etc/httpd/conf.modules.d/*.conf";do grep 'status' $i | cut -d':' -f2; done LoadModule status_module modules/mod_status.so
解析:若是沒有在服務器根路徑下沒有在任何文件中找到對應的配置,或者此模塊加載配置被註釋,能夠手動添加一個配置便可:
LoadModule status_module modules/mod_status.so
#而後添加一個status配置,能夠在主配置文件,也能夠在/etc/httpd/.conf.d下添加
[root@root ~]# vim /etc/httpd/conf.d/status.conf <Location /status> SetHandler server-status <RequireAll> Require ip 10.1.249.223 Require all denied </RequireAll> </Location>
#添加完成後,檢查語法
[root@root ~]# httpd -t Syntax OK
#而後重載Httpd服務便可
[root@root ~]# systemctl reload httpd.service
#在瀏覽器打開
[root@root ~]# links http://10.1.249.223/status
五、Httpd服務日誌配置
錯誤日誌:
ErrorLog 「/var/log/httpd/error_log」 #錯誤日誌的路徑 LogLevel warn #錯誤日誌的顯示級別
LogLevel錯誤日誌級別:
Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
注意:日誌的路徑若是寫於相對路徑,則相對於ServerRoot指定的服務根路徑下,如錯誤日誌設置爲logs/arror_log,則服務根路徑配置爲ServerRoot /etc/httpd/,則日誌將會在/etc/httpd/logs/下生成error_log文件,並保存錯誤日誌。訪問日誌同理。
訪問日誌:
LogFormat 「FORMAT_STRINGS」 LOG_FORMAT_NAME
CoustomLog 「/PATH/TO/LOG_FILE」 LOG_FORMAT_NAME
訪問日誌格式format_strings介紹:
說明提示:
1、定製日誌的格式設計到兩個指令,既LogFormat指令和CustomLog指令,默認httpd.conf文件提供了關於這兩個指令的幾個例子;
2、LogFormat指令格式爲格式指定一個名字(LOG_FORMAT_NAME),之後直接引用這個名字便可。CustomLog 指令設置日誌文件,並指明日誌文件所用的格式及LogFormat指令定製的格式名字(LOG_FORMAT_NAME)。如:
#配置一個定義的格式,名字爲serverlog
LogFormat "%h %l %u %t \"%r\" %>s %b" serverlog
#當須要使用serverlog格式,指定此名稱便可
CustomLog "logs/acess _serverlog" serverlog
具體文檔格式參數介紹:
%h:遠程主機。 %l:遠程登陸名,有效登陸名時,日誌顯示爲 - 符號。 %u:http洗衣額認證時有客戶端輸入的用戶名。 %t:以公共日誌時間格式表示的時間(或稱爲標準英文格式)。 %r:請求的第一行。 %s:狀態碼。對於進行內部重定向請求,這是「原來」請求的狀態;不然用%>s表示「後來」請求的狀態。 %b:CLF格式的已發送字節數量,不包含HTTP頭。當沒有發送數據時,寫入’-’而不是0。 %{VARNAME}i:記錄由VARNAME所表示請求報文首部的值,例如%{Referer}i,則表示記錄請求報文中Referer首部的值。
補充:若是想看更多關於格式變量的信息,能夠根據上面介紹的安裝本地幫助文檔manual來查看具體的配置信息,而後經過瀏覽器訪問本地html文檔便可,如:
http://servername/manual/mod/mod_log_config.html
查看對應的日誌參考:
#能夠經過命令查看目前站點的錯誤日誌和訪問日誌路徑
[root@root ~]# grep '^[[:space:]]*\(ErrorLog\|CustomLog\)' /etc/httpd/conf/httpd.conf ErrorLog "logs/error_log" CustomLog "logs/access_log" combined
#須要查看指定文件下有多少中訪問日誌格式,能夠編寫個腳本或者使用sed來實現。
[root@root ~]# vim ./subline.sh #!/bin/bash # subline() { path=$1 #接收定義有日誌格式模塊的配置文件 start=$2 #標籤開頭 end=$3 #標籤結尾 while read line; do #執行循環對指定的配置文件逐行讀取 #若是此行調用日誌模塊其實標籤,則設置標記變量i=0 if `echo $line | grep "$start" &> /dev/null`; then i=0; fi #若是i被賦值,則執行 if [ -n "$i" ] ;then echo $line | grep '^[^#]' | grep -v '^[[:space:]]$' #輸出非註釋配置 if `echo $line | grep "$end" &> /dev/null`; then #此行爲結尾則i爲空 i=''; fi fi done < $path } start_reg='<IfModule log_config' #設置爲調用日誌模塊標籤開頭 end_reg='</IfModule>' #設置爲調用日誌模塊標籤結尾 subline "/etc/httpd/conf/httpd.conf" "$start_reg" "$end_reg" #調用函數
說明:上面的函數經過指定一個文件,而後指定其實行和結尾行,能夠進行對相似這種有開始和結束的標籤的配置文件,進行指定標籤內容配置的限定區間輸出,相似sed的匹配行與行之間的內容功能。
#執行腳本,會列出/etc/httpd/conf/httpd.conf下的全部日誌格式配置
[root@root ~]# ./subline.sh <IfModule log_config_module> LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined LogFormat "%h %l %u %t "%r" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio </IfModule>
解析:由於/etc/httpd/conf/httpd.conf默認只有一個日誌模塊格式配置,因此只會查出單個,可是若是有多個,會所有列出。
日誌查看和處理: ???? 未完,持續......