Linux之Web服務(2)Httpd服務配置之二
Linux之Web服務(2)Httpd服務配置之二
前言
在上一篇通過一些簡單的案例或說明來介紹了部分關於Httpd2.4中httpd.conf配置檔案中的配置選項及對應的功能。主要是對訪問控制和在處理對指定目錄或檔案進行訪問控制的一些安全問題性的處理。但是一直沒有提到訪問控制的具體講解,本篇列出訪問控制的具體使用選項和功能,以及其它高階配置。
1、Httpd2.4 文件訪問授權具體引數
前提:文件訪問授權選項配置只適合在以下標籤中生效:
<Directory > <FIles> <Location> <LocationMatch>
允許所有地址訪問:Require all granted
拒絕所有地址訪問:Require all denied
注意:要限制制度訪問的主機或IP需要配置RequireAll標籤,並在標籤裡新增控制指令
<RequireAll>
</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 #完整主機名
2、別名路徑:
提示:使用別名要在<ifModule alias_module>標籤中新增對應的別名Alias指令,並在其標籤下巢狀<Directory指令目錄>設定訪問控制,Alias 指定定義的別名才會生效。例項如:
指令格式:Alias /URL/
如:
Alias/myweb/“/web/”#當訪問站點/myweb/目錄時為訪問檔案系統的/web/目錄 Alias/xx“/test/xx”#當訪問站點/xx目錄時,訪問的為檔案系統的/test/xx目錄
注意:如果設定的檔案系統的目錄後面最後添加了/及,比如aa/則Alias的別名指定的URL也要新增斜槓如:my_aa/。
3、httpd-manual 本地幫助文件
在某些情況下配置和部署Apache HTTP Server時,一般會去Apache的官方上去找最權威的配置幫助指南,但是如果連上外網,或者網速很慢的情況下這樣去獲取幫助有些困了。於是Httpd服務也提供了一些外掛中自帶對應版本的Httpd服務本地幫助文件。可以同安裝此幫組文件來在本地瀏覽幫助資訊。
詳細操作如下:
#安裝httpd-maunal
[[email protected]~]#yum-yinstallhttpd-manual
#檢視httpd-maunal主配置檔案
[[email protected]~]#rpm-qlhttpd-manual|grep'/conf\>' /etc/httpd/conf.d/manual.conf
#檢視httpd-manual配置檔案/etc/httpd/conf.d/manual.conf
[[email protected]~]#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"> OptionsIndexes AllowOverrideNone Requireallgranted </Directory>
解析:這裡的配置就是配置了一個決對路徑Directory標籤,並且和一個支援擴充套件正則表示式的一個AliasMatch別名標籤。訪問URLs為 http://站點地址或域名/manual/為檢視文件介面的首頁。
#可以使用瀏覽器來訪問,最好使用圖形介面的瀏覽器
4、檢視當前站點狀態server-status
說明:當配置好了服務之後想要知道當前Web站點服務的一些狀態資訊,可以通過載入並配置server-status模組來在檢視當前web網路狀態。
具體操作:
#檢視當前是否有載入server-status模組
[[email protected]~]#httpd-M|grep'\<status' status_module(shared)
#當然檢視所有(多個用for)預設對應的模組載入配置檔案/etc/httpd/conf.modules.d/下新增status模組
[[email protected]~]#foriin"/etc/httpd/conf.modules.d/*.conf";dogrep'status'$i|cut-d':'-f2;done LoadModulestatus_modulemodules/mod_status.so
解析:如果沒有在伺服器根路徑下沒有在任何檔案中找到對應的配置,或者此模組載入配置被註釋,可以手動新增一個配置即可:
LoadModulestatus_modulemodules/mod_status.so
#然後新增一個status配置,可以在主配置檔案,也可以在/etc/httpd/.conf.d下新增
[[email protected]~]#vim/etc/httpd/conf.d/status.conf <Location/status> SetHandlerserver-status <RequireAll> Requireip10.1.249.223 Requirealldenied </RequireAll> </Location>
#新增完成後,檢查語法
[[email protected]~]#httpd-t SyntaxOK
#然後過載Httpd服務即可
[[email protected]~]#systemctlreloadhttpd.service
#在瀏覽器開啟
[[email protected]~]#linkshttp://10.1.249.223/status
5、Httpd服務日誌配置
錯誤日誌:
ErrorLog“/var/log/httpd/error_log”#錯誤日誌的路徑 LogLevelwarn#錯誤日誌的顯示級別
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
檢視對應的日誌參考:
#可以通過命令檢視目前站點的錯誤日誌和訪問日誌路徑
[[email protected]~]#grep'^[[:space:]]*\(ErrorLog\|CustomLog\)'/etc/httpd/conf/httpd.conf ErrorLog"logs/error_log" CustomLog"logs/access_log"combined
#需要檢視指定檔案下有多少中訪問日誌格式,可以編寫個指令碼或者使用sed來實現。
[[email protected]~]#vim./subline.sh #!/bin/bash # subline(){ path=$1#接收定義有日誌格式模組的配置檔案 start=$2#標籤開頭 end=$3#標籤結尾 whilereadline;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='<IfModulelog_config'#設定為呼叫日誌模組標籤開頭 end_reg='</IfModule>'#設定為呼叫日誌模組標籤結尾 subline"/etc/httpd/conf/httpd.conf""$start_reg""$end_reg"#呼叫函式
說明:上面的函式通過指定一個檔案,然後指定其實行和結尾行,可以進行對類似這種有開始和結束的標籤的配置檔案,進行指定標籤內容配置的限定區間輸出,類似sed的匹配行與行之間的內容功能。
#執行指令碼,會列出/etc/httpd/conf/httpd.conf下的所有日誌格式配置
[[email protected]~]#./subline.sh <IfModulelog_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 <IfModulelogio_module> LogFormat"%h%l%u%t"%r"%>s%b"%{Referer}i""%{User-Agent}i"%I%O"combinedio </IfModule>
解析:因為/etc/httpd/conf/httpd.conf預設只有一個日誌模組格式配置,所以只會查出單個,但是如果有多個,會全部列出。
日誌檢視和處理: ???? 未完,持續......
轉載於:https://blog.51cto.com/mengzhaofu/1860328