http-2.2
阿新 • • 發佈:2018-02-23
登錄 數據庫 quest sha warn apache 啟用 密碼 裝載
HTTP-2.2
httpd 配置文件的組成: grep "Section" /etc/httpd/conf/httpd.conf ### Section 1: Global Environment ### Section 2: ‘Main‘ server configuration ### Section 3: Virtual Hosts 配置格式: directive value directive:不區分字符大小寫 value:為路徑時,是否區分大小寫,取決於文件系統 httpd2.2程序環境 rpm -ql httpd /etc/httpd /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/logs /etc/httpd/modules /etc/httpd/run /etc/logrotate.d/httpd /etc/rc.d/init.d/htcacheclean /etc/rc.d/init.d/httpd /etc/sysconfig/htcacheclean /etc/sysconfig/httpd /usr/lib64/httpd /usr/lib64/httpd/modules /usr/sbin/apachectl /usr/sbin/htcacheclean /usr/sbin/httpd /usr/sbin/httpd.event /usr/sbin/httpd.worker /usr/sbin/httxt2dbm /usr/sbin/rotatelogs /usr/sbin/suexec /usr/share/doc/ /usr/share/man/man8/ /var/cache/mod_proxy /var/lib/dav /var/log/httpd /var/run/httpd /var/www /var/www/cgi-bin /var/www/error /var/www/html /var/www/icons 服務腳本:/etc/rc.d/init.d/httpd 配置文件: /etc/sysconfig/httpd /etc/httpd/conf/httpd.conf 服務控制和啟動: chkconfig httpd on|off service {start|stop|restart|status|configtest|reload} httpd 站點網頁文檔根目錄: /var/www/html 模塊文件路徑 : /etc/httpd/modules /usr/lib64/httpd/modules 主程序文件: /usr/sbin/httpd /usr/sbin/httpd.worker /usr/sbin/httpd.event 主進程文件 : /etc/httpd/run/httpd.pid 日誌文件目錄: /var/log/httpd access_log: 訪問日誌 error_log :錯誤日誌 幫助文檔包: httpd-manual 3)http協議 http 協議 http/0.9, http/1.0, http/1.1, http/2.0 stateless 無狀態,服務器無法持續追蹤訪問者來源 解決http 協議無狀態方法 cookie 客戶端存放 session 服務端存放 http 事務:一次訪問的過程 請求:request 響應:response 協議查看或分析的工具: tcpdump wireshark tshark 1》顯示服務器版本信息 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 建議使用 ServerTokens Prod 2》修改監聽的IP 和Port Listen [IP:]PORT 省略IP表示為0.0.0.0 Listen 指令至少一個,可重復出現多次 Listen 80 Listen 8080 修改監聽socket ,重啟服務進程方可生效 3》持久連接 Persistent Connection:連接建立,每個資源獲取完成後不會斷開連接,而是繼續等待其它的請求完成,默認關閉持久連接。 斷開條件:數量限制為100 時間限制:以秒為單位,httpd-2.4支持毫秒級 副作用:對並發訪問量較大的服務器,持久連接功能會使有些請求得不到響應 折衷:使用較短的持久連接時間 設置: KeepAlive On|Off KeepAliveTimeout 15 MaxKeepAliveRequests 100 測試:telnet WEB_SERVER_IP PORT GET /URL HTTP/1.1 Host: WEB_SERVER_IP 4》MPM(multi-processing module)多路處理模塊。 prefork, worker, event(試驗階段) httpd-2.2不支持同時編譯多個模塊,所以只能編譯時選定一個。 rpm 安裝的包提供三個二進制程序文件,分別用於實現對不同MPM機制的支持。 1。確認方法: ps aux | grep httpd 默認為/usr/sbin/httpd, 即prefork 2。查看靜態編譯的模塊 httpd -l 3。查看靜態編譯及動態裝載的模塊 httpd –M 4。動態模塊加載時,不需重啟即生效。 5。動態模塊路徑 /usr/lib64/httpd/modules/ 6。更換使用的httpd程序: vim /etc/sysconfig/httpd HTTPD=/usr/sbin/httpd.worker 重啟服務生效 pstree -p|grep httpd 查看進程和線程 7。Httpd 2.4與之不同 以動態模塊方式提供 配置文件:/etc/httpd/conf.modules.d/00-mpm.conf httpd –M |grep mpm 重啟服務生效 pstree -p|grep httpd 查看進程和線程 8。prefork的默認配置 <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 最多進程數, 最大20000 MaxClients 256 最大並發 MaxRequestsPerChild 4000 子進程最多能處理的請求數量,在處理MaxRequestsPerChild個請求之後, 子進程將會被父進程終止,這時候子進程占用的內存就會釋放( 為0時永遠不釋放) </IfModule> 9。worker的默認配置 <IfModule worker.c> StartServers 4 MaxClients 300 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 無限制 </IfModule> 5》DSO:Dynamic Shared Object 加載動態模塊配置 vim /etc/httpd/conf/httpd.conf 配置指定實現模塊加載格式: LoadModule <mod_name> <mod_path> 模塊文件路徑可使用相對路徑,相對於ServerRoot,默認/etc/httpd 示例: LoadModule auth_basic_module modules/mod_auth_basic.so 6》定義‘Main‘ server 的文檔頁面路徑 DocumentRoot “/path” 文檔路徑映射: DocumentRoot 指向的路徑為URL 路徑的起始位置 示例: DocumentRoot "/app/data“ http://HOST:PORT/test/index.html --> /app/data/test/index.html 註意:SELinux 和iptables 7》定義站點主頁面 DirectoryIndex index.html index.html.var 8》站點訪問控制常見機制 可基於兩種機制指明對哪些資源進行何種訪問控制。 訪問控制機制有兩種,分別是客戶端來源地址,用戶賬號 文件系統路徑: <Directory “/path"> ... </Directory> <File “/path/file”> ... </File> <FileMatch "PATTERN"> ... </FileMatch> URL 路徑: <Location ""> ... </Location> <LocationMatch ""> ... </LocationMatch> 示例: <FilesMatch "\.(gif|jpe?g|png)$"> <Files “?at.*”> 通配符 <Location /status> <LocationMatch "/(extra|special)/data"> 9》<Directory> 中“基於源地址”實現訪問控制 (1) Options: 後跟1個或多個以空白字符分隔的選項列表,在選項前的+ ,- 表示增加或刪除指定選項。 常見選項: Indexes:指明的URL路徑下不存在與定義的主頁面資源相符的資源文件時,返回索引列表給用戶。 FollowSymLinks:允許訪問符號鏈接文件所指向的源文件 None:全部禁用 All:全部允許 示例: <Directory /web/docs> Options Indexes FollowSymLinks </Directory> <Directory /web/docs/spec> Options FollowSymLinks </Directory> <Directory /web/docs> Options Indexes FollowSymLinks </Directory> <Directory /web/docs/spec> Options +Includes -Indexes </Directory> (2) AllowOverride: 與訪問控制相關的哪些指令可以放在指定目錄下的.htaccess (由AccessFileName 指定)文件中,覆蓋之前的配置指令,但只對<directory> 語句有效。 AllowOverride All:所有指令都有效 AllowOverride None:.htaccess 文件無效 AllowOverride AuthConfig Indexes:除了AuthConfig和Indexes的其他指令都無法覆蓋 (3) order和allow 、deny order:定義生效次序,寫在後面的表示默認法則生效。 Order allow,deny Order deny,allow Allow from Deny from allow.denv deny.allow only allow yes yes only deny no no both no yes none no yes 來源地址: IP 網絡: 172.16 172.16.0.0 172.16.0.0/16 172.16.0.0/255.255.0.0 (4)示例: <files "*.txt"> order deny,allow deny from 172.16. 100.100 allow from 172.16 </files> <files "*.txt"> order allow,deny deny from 172.16.100.100 allow from 172.16 </files> 10》日誌設定 1。日誌類型: 訪問日誌 錯誤日誌 2。錯誤日誌: ErrorLog logs/error_log LogLevel warn loglevel 可選值: debug, info, notice,warn,error,crit,alert,emerg 3。訪問日誌: 定義日誌格式: 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 )遠程用戶, 非登錄訪問時,為一個減號“-” %t 服務器收到請求時的時間 %r 即表示請求報文的首行,記錄了此次請求的“方法”,"URL"以及協議版本 %>s 響應狀態碼 %b 響應報文的大小,單位是字節,不包括響應報文http 首部 %{Referer}i 請求報文中首部“referer”的值;即從哪個頁面中的超鏈接跳轉至當前頁面的 %{User-Agent}i 請求報文中首部“User-Agent”的值,即發出請求的應用程序 11》設定默認字符集 AddDefaultCharset UTF-8 中文字符集:GBK, GB2312, GB18030:wq 12》定義路徑別名 格式:Alias /URL/ "/PATH/" DocumentRoot "/www/htdocs" http://www.m.com/download/bash.rpm ==>/www/htdocs/download/bash.rpm Alias /download/ "/rpms/pub/" http://www.m.com/rpms/pub/bash.rpm ==>/www/htdocs/download/bash.rpm 13》基於用戶的訪問控制 1。認證質詢:響應碼為401,拒絕客戶端請求,並說明要求客戶端提供賬號和密碼 2。認證:客戶端用戶填入賬號和密碼後再次發送請求報文,認證通過時,則服務器發送響應的資源 3。認證方式兩種: basic:明文 digest:消息摘要認證, 兼容性差 4。安全域:需要用戶認證後方能訪問的路徑,應該通過名稱對其進行標識,以便於告知用戶認證的原因。 5。用戶的賬號和密碼 虛擬賬號:僅用於訪問某服務時用到的認證標識 存儲:文本文件,SQL 數據庫,ldap 目錄存儲,nis等 6。basic 認證配置示例: (1)定義安全域 <Directory “/path"> Options None AllowOverride None AuthType Basic AuthName "Warning!“:隨意寫 AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" Require user username1 username2 ... </Directory> Require valid-user:所有位於AuthUserFile文件中定義的用戶都允許登錄訪問。 Require user user1 user2...:僅允許user1,user2等出現AuthUserFile文件中定義的特定幾個用戶登錄,這些用戶為虛擬用戶,即非系統用戶。 (2) 提供賬號和密碼存儲(文本文件) 使用專用命令完成此類文件的創建及用戶管理 htpasswd [options] /PATH/HTTPD_PASSWD_FILE username -c :自動創建文件,僅應該在文件不存在時使用 -m :md5 格式加密 -s: sha 格式加密 -D :刪除指定用戶 7。基於組賬號進行認證 (1)定義安全域 <Directory “/path"> AuthType Basic AuthName "String“ AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" AuthGroupFile "/PATH/HTTPD_GROUP_FILE" Require group grpname1 grpname2 ... </Directory> (2)創建用戶賬號和組賬號文件; 組文件:每一行定義一個組 GRP_NAME: username1 username2 ... 示例: <Directory "/www/htdocs/admin"> Options None AllowOverride None AuthType Basic AuthName "Administator private" AuthUserFile "/etc/httpd/conf.d/.htpasswd" AuthGroupFile "/etc/httpd/conf.d/.htgroup" Require group webadmins </Directory> vim /etc/httpd/conf.d/.htgroup webadmins:wang mage (3)遠程客戶端和用戶驗證的控制 Satisfy ALL|Any ALL 客戶機IP和用戶驗證都需要通過才可以 Any 客戶機IP和用戶驗證, 有一個滿足即可 示例: Require valid-user Order allow,deny Allow from 192.168.1 Satisfy Any 14》虛擬主機 1。站點標識:socket IP 相同,但端口不同 IP 不同,但端口均為默認端口 2。FQDN 不同; 請求報文中首部 Host: www.m.com 3。有三種實現方案: 基於ip :為每個虛擬主機準備至少一個ip 地址 基於port :為每個虛擬主機使用至少一個獨立的port 基於FQDN :為每個虛擬主機使用至少一個FQDN 4。註意: 一般虛擬機不要與main主機混用,因此要使用虛擬主機,一般先禁用main主機。 禁用方法:註釋中心主機的DocumentRoot。 這是因為其在後面,配置文件中默認是後面的配置會覆蓋前面。 使用servername時要註意dns問題。 5。虛擬主機的配置方法: <VirtualHost IP:PORT> ServerName FQDN DocumentRoot “/path" </VirtualHost> 建議:上述配置存放在獨立的配置文件中 6。其它可用指令: ServerAlias:虛擬主機的別名,可多次使用 ErrorLog:錯誤日誌 CustomLog:訪問日誌 <Directory “/path"> </Directory> Alias 7。基於IP 的虛擬主機示例: <VirtualHost 172.16.100.6:80> DocumentRoot "/htdocs1" </VirtualHost> <VirtualHost 172.16.100.7:80> DocumentRoot "htdocs2" </VirtualHost> <VirtualHost 172.16.100.8:80> DocumentRoot "htdocs3" </VirtualHost> 註意: 當你使用httpd -t進行檢查時會出現報錯,而報的錯誤是servername沒有,這個不用在意,因為沒有寫。 本機要配上所有ip地址並能夠用於通信。 8。基於端口的虛擬主機:可和基於IP的虛擬主機混和使用 listen 808 listen 8080 <VirtualHost 172.16.100.6:80> ServerName www.a.com DocumentRoot "htdocs1" </VirtualHost> <VirtualHost 172.16.100.6:808> ServerName www.b.net DocumentRoot "htdocs2" </VirtualHost> <VirtualHost 172.16.100.6:8080> ServerName www.c.org DocumentRoot "htdocs3" </VirtualHost> 註意: httpd要監聽這裏指明的所有端口。 使用servername時要註意DNS。 要不就不使用虛擬機的dns,自己配置好dns。 要不就使用虛擬機的dns,並在/etc/hosts中配好。 9。基於FQDN的虛擬主機: NameVirtualHost *:80,httpd2.4 不需要此指令 <VirtualHost *:80> ServerName www.a.com DocumentRoot "htdocs1" </VirtualHost> <VirtualHost *:80> ServerName www.b.net DocumentRoot "htdocs2" </VirtualHost> <VirtualHost *:80> ServerName www.c.org DocumentRoot "htdocs3" </VirtualHost> 註意:同樣是註意dns。 15》status頁面 LoadModule status_module modules/mod_status.so <Location /server-status> SetHandler server-status Order allow,deny Allow from 172.16 </Location> ExtendedStatus On 顯示擴展信息
http-2.2