Cnetos 6.10 YUM安裝httpd 2.2.x
# yum install -y httpdjavascript
程序環境 主配置文件: /etc/httpd/conf/httpd.conf #主配置文件 /etc/httpd/conf.d/*.conf #補充配置文件
服務腳本: /etc/rc.d/init.d/httpd 配置文件:/etc/sysconfig/httpd
主程序文件: /usr/sbin/httpd /usr/sbin/httpd.event 對於這種模型切換,2.2版本的切換隻能從新編譯 /usr/sbin/httpd.worker
日誌文件目錄: /var/log/httpd access_log: 訪問日誌 error_log:錯誤日誌(啓動、中止、運行)
站點文檔目錄: /var/www/html
模塊文件路徑: /usr/lib64/httpd/modules 配置文件的組成: [root@localhost ~]# grep "Section" /etc/httpd/conf/httpd.conf ### Section 1: Global Environment ### Section 2: 'Main' server configuration ### Section 3: Virtual Hosts 配置格式:directive value directive: 不區分字符大小寫; value: 爲路徑時,取決於文件系統;
[root@localhost ~]# grep -Ev "^#|^[ ]+#|^$" /etc/httpd/conf/httpd.conf ServerTokens OS ServerRoot "/etc/httpd" #httpd程序目錄 PidFile run/httpd.pid #pid文件路徑 Timeout 60 KeepAlive Off #長鏈接開啓或關閉On|Off MaxKeepAliveRequests 100 #長鏈接最大請求數 KeepAliveTimeout 15 #長鏈接超時時間配置 <IfModule prefork.c> #prefork模式配置 StartServers 8 #服務啓動時的子進程數量 MinSpareServers 5 #最小空閒進程數 MaxSpareServers 20 #最大空閒進程數 ServerLimit 256 #服務器生命週期內爲MaxClient所容許的最大進程數,一般相等MaxClients MaxClients 256 #最大併發請求數 MaxRequestsPerChild 4000 #單個進程響應的最大請求數 </IfModule> <IfModule worker.c> #work模式配置 StartServers 4 #服務器啓動時的進程數 MaxClients 300 #最大併發請求數 MinSpareThreads 25 #最小空閒線程數 MaxSpareThreads 75 #最大空閒線程數 ThreadsPerChild 25 #每一個進程能啓動的線程數 MaxRequestsPerChild 0 #每一個線程能響應的最大請求數,0表示不作限制 </IfModule> Listen 80 #監聽端口,格式:Listen [IP:]PORT,省略ip表示監聽本機全部IP; Listen可重複出現屢次; LoadModule auth_basic_module modules/mod_auth_basic.so #模塊導入 LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule authn_file_module modules/mod_authn_file.so LoadModule authn_alias_module modules/mod_authn_alias.so LoadModule authn_anon_module modules/mod_authn_anon.so LoadModule authn_dbm_module modules/mod_authn_dbm.so LoadModule authn_default_module modules/mod_authn_default.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule authz_owner_module modules/mod_authz_owner.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so LoadModule authz_dbm_module modules/mod_authz_dbm.so LoadModule authz_default_module modules/mod_authz_default.so LoadModule ldap_module modules/mod_ldap.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule include_module modules/mod_include.so LoadModule log_config_module modules/mod_log_config.so LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so LoadModule ext_filter_module modules/mod_ext_filter.so LoadModule mime_magic_module modules/mod_mime_magic.so LoadModule expires_module modules/mod_expires.so LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so LoadModule usertrack_module modules/mod_usertrack.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule mime_module modules/mod_mime.so LoadModule dav_module modules/mod_dav.so LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule info_module modules/mod_info.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule dir_module modules/mod_dir.so LoadModule actions_module modules/mod_actions.so LoadModule speling_module modules/mod_speling.so LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so LoadModule substitute_module modules/mod_substitute.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule cache_module modules/mod_cache.so LoadModule suexec_module modules/mod_suexec.so LoadModule disk_cache_module modules/mod_disk_cache.so LoadModule cgi_module modules/mod_cgi.so LoadModule version_module modules/mod_version.so Include conf.d/*.conf #包含擴展配置文件 User apache #進程運行用戶配置 Group apache ServerAdmin root@localhost #管理員郵箱配置 ServerName localhost:80 #域名配置 UseCanonicalName Off DocumentRoot "/var/www/html" #網站根目錄配置 <Directory /> #網站根訪問權限配置 Options FollowSymLinks #容許跟蹤符號連接 AllowOverride None #一般利用Apache的rewrite模塊對URL進行重寫,rewrite規則會寫在 .htaccess 文件裏。但要使 apache 可以正常的讀取.htaccess 文件的內容,就必須對.htaccess 所在目錄進行配置。從安全性考慮,根目錄的AllowOverride屬性通常都配置成不容許任何Override </Directory> <Directory "/var/www/html"> #默認站點目錄訪問權限配置 Options Indexes FollowSymLinks #容許索引和跟蹤符號連接 AllowOverride None Order allow,deny #訪問規則,allow,deny,哪一個在前先匹配哪一個,這裏的allow對應下面Allow from all規則 Allow from all </Directory> <IfModule mod_userdir.c> UserDir disabled </IfModule> DirectoryIndex index.html index.html.var #網站默認頁面配置 AccessFileName .htaccess #訪問入口文件名 <Files ~ "^\.ht"> #正則匹配以.ht結尾的文件訪問權限配置 Order allow,deny Deny from all Satisfy All -->詳解:http://www.fwolf.com/blog/post/341 </Files> TypesConfig /etc/mime.types #類型配置路徑指定 DefaultType text/plain #默認類型 <IfModule mod_mime_magic.c> MIMEMagicFile conf/magic </IfModule> HostnameLookups Off ErrorLog logs/error_log #錯誤日誌配置 LogLevel warn #錯誤日誌級別 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined #日誌格式配置 LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent CustomLog logs/access_log combined #訪問日誌配置 ServerSignature On Alias /icons/ "/var/www/icons/" <Directory "/var/www/icons"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> <IfModule mod_dav_fs.c> DAVLockDB /var/lib/dav/lockdb </IfModule> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" <Directory "/var/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8 AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip AddIconByType (TXT,/icons/text.gif) text/* AddIconByType (IMG,/icons/image2.gif) image/* AddIconByType (SND,/icons/sound2.gif) audio/* AddIconByType (VID,/icons/movie.gif) video/* AddIcon /icons/binary.gif .bin .exe AddIcon /icons/binhex.gif .hqx AddIcon /icons/tar.gif .tar AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip AddIcon /icons/a.gif .ps .ai .eps AddIcon /icons/layout.gif .html .shtml .htm .pdf AddIcon /icons/text.gif .txt AddIcon /icons/c.gif .c AddIcon /icons/p.gif .pl .py AddIcon /icons/f.gif .for AddIcon /icons/dvi.gif .dvi AddIcon /icons/uuencoded.gif .uu AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl AddIcon /icons/tex.gif .tex AddIcon /icons/bomb.gif /core AddIcon /icons/back.gif .. AddIcon /icons/hand.right.gif README AddIcon /icons/folder.gif ^^DIRECTORY^^ AddIcon /icons/blank.gif ^^BLANKICON^^ DefaultIcon /icons/unknown.gif ReadmeName README.html HeaderName HEADER.html IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t AddLanguage ca .ca AddLanguage cs .cz .cs AddLanguage da .dk AddLanguage de .de AddLanguage el .el AddLanguage en .en AddLanguage eo .eo AddLanguage es .es AddLanguage et .et AddLanguage fr .fr AddLanguage he .he AddLanguage hr .hr AddLanguage it .it AddLanguage ja .ja AddLanguage ko .ko AddLanguage ltz .ltz AddLanguage nl .nl AddLanguage nn .nn AddLanguage no .no AddLanguage pl .po AddLanguage pt .pt AddLanguage pt-BR .pt-br AddLanguage ru .ru AddLanguage sv .sv AddLanguage zh-CN .zh-cn AddLanguage zh-TW .zh-tw LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW ForceLanguagePriority Prefer Fallback AddDefaultCharset UTF-8 AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl AddHandler type-map var AddType text/html .shtml AddOutputFilter INCLUDES .shtml Alias /error/ "/var/www/error/" <IfModule mod_negotiation.c> <IfModule mod_include.c> <Directory "/var/www/error"> AllowOverride None Options IncludesNoExec AddOutputFilter Includes html AddHandler type-map var Order allow,deny Allow from all LanguagePriority en es de fr ForceLanguagePriority Prefer Fallback </Directory> </IfModule> </IfModule> BrowserMatch "Mozilla/2" nokeepalive BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 BrowserMatch "RealPlayer 4\.0" force-response-1.0 BrowserMatch "Java/1\.0" force-response-1.0 BrowserMatch "JDK/1\.0" force-response-1.0 BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully BrowserMatch "MS FrontPage" redirect-carefully BrowserMatch "^WebDrive" redirect-carefully BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully BrowserMatch "^gnome-vfs/1.0" redirect-carefully BrowserMatch "^XML Spy" redirect-carefully BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf Listen 80 格式:Listen [IP:]PORT 省略ip表示監聽本機全部IP; Listen可重複出現屢次,表示監聽多個端口
每一個web頁面都由多個資源組成,每一個資源都由一個url進行訪問。這也就意味着打開頁面就須要對服務器請求屢次。這樣每次訪問都須要通過三次握手,這樣很是耗費資源,爲了解決這問題,引入了長鏈接。可是若是請求一直鏈接,而用戶再也不獲取資源時,會致使鏈接一直佔用資源,這須要進行對長鏈接進行限制。php
Persistent Connection:鏈接創建,每一個資源獲取完成後不會斷開鏈接,而是繼續等待其它的請求完成;那麼長鏈接又是如何配置斷開的呢?有2種方式:css
鏈接數量限制:100,表示最多100個鏈接
鏈接時間限制:可配置,好比60s,不建議設置太長,尤爲是併發較大的環境中html
持久鏈接反作用:對併發訪問量較大的服務器,持久鏈接功能會使用有些請求得不到響應;java
持久鏈接折衷方案:使用較短的持久鏈接時間;好比5s。httpd-2.4 支持毫秒級持久時間;linux
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf KeepAlive On #開啓|關閉長鏈接 MaxKeepAliveRequests 100 #最大長鏈接請求數配置 KeepAliveTimeout 15 #長鏈接超時時間配置 測試長、短鏈接: [root@localhost apache]# yum install -y telnet [root@localhost extra]# telnet 192.168.56.13 80 Trying 192.168.56.13... Connected to 192.168.56.13. Escape character is '^]'. GET / HTTP/1.1 Host: 192.168.56.11 HTTP/1.1 200 OK Date: Wed, 11 Jul 2018 08:29:49 GMT Server: Apache/2.2.31 (Unix) Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT ETag: "2059de5-2c-3e9564c23b600" Accept-Ranges: bytes Content-Length: 44 Content-Type: text/html <html><body><h1>It works!</h1></body></html>Connection closed by foreign host. #短鏈接會請求完畢會直接斷開(Connection closed),配置好長鏈接和超時,能夠在第一次請求完畢後再次請求,在超過超時時間內自動斷開。 [root@localhost extra]# vim httpd.conf 解除註釋: Include conf/extra/httpd-default.conf [root@localhost extra]# telnet 192.168.56.13 80 Trying 192.168.56.13... Connected to 192.168.56.13. Escape character is '^]'. GET / HTTP/1.1 Host: 192.168.56.13 HTTP/1.1 200 OK Date: Wed, 11 Jul 2018 08:38:17 GMT Server: Apache/2.2.31 (Unix) Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT ETag: "2059de5-2c-3e9564c23b600" Accept-Ranges: bytes Content-Length: 44 Content-Type: text/html <html><body><h1>It works!</h1></body></html> 此處不會提示Connection closed,而是等待再次請求,然後超過超時時間,自動斷開
Multipath Process Module:多道處理模塊,主要有三種prefork, worker, eventweb
httpd-2.2不支持同時編譯多個模塊,因此只能編譯時選定一個;rpm安裝的包提供三個二進制程序文件,分別用於實現對不一樣MPM機制的支持;確認方法:正則表達式
[root@localhost ~]# ps axu |grep httpd root 1444 0.0 0.3 175456 4028 ? Ss Jul11 0:11 /usr/sbin/httpd apache 6014 0.0 0.3 175588 3184 ? S 09:37 0:00 /usr/sbin/httpd apache 6015 0.0 0.3 175588 3184 ? S 09:37 0:00 /usr/sbin/httpd apache 6016 0.0 0.3 175588 3184 ? S 09:37 0:00 /usr/sbin/httpd apache 6017 0.0 0.3 175588 3192 ? S 09:37 0:00 /usr/sbin/httpd apache 6018 0.0 0.3 175588 3128 ? S 09:37 0:00 /usr/sbin/httpd apache 6019 0.0 0.3 175588 3116 ? S 09:37 0:00 /usr/sbin/httpd apache 6020 0.0 0.3 175588 3180 ? S 09:37 0:00 /usr/sbin/httpd apache 6021 0.0 0.3 175588 3184 ? S 09:37 0:00 /usr/sbin/httpd apache 6028 0.0 0.2 175588 2860 ? S 09:38 0:00 /usr/sbin/httpd root 6070 0.0 0.0 103320 880 pts/0 S+ 09:49 0:00 grep httpd 默認爲/usr/sbin/httpd, 其使用prefork模型,若是是work會顯示httpd.work 或httpd.event
查看模塊列表:數據庫
[root@localhost apache]# httpd -l #查看靜態編譯的模塊 Compiled in modules: core.c mod_authn_file.c mod_authn_default.c mod_authz_host.c mod_authz_groupfile.c mod_authz_user.c mod_authz_default.c mod_auth_basic.c mod_include.c mod_filter.c mod_deflate.c mod_log_config.c mod_env.c mod_expires.c mod_setenvif.c mod_version.c prefork.c http_core.c mod_mime.c mod_status.c mod_autoindex.c mod_asis.c mod_cgi.c mod_negotiation.c mod_dir.c mod_actions.c mod_userdir.c mod_alias.c mod_rewrite.c mod_so.c [root@localhost apache]# httpd -M 查看靜態編譯及動態裝載的模塊 Loaded Modules: core_module (static) authn_file_module (static) authn_default_module (static) authz_host_module (static) authz_groupfile_module (static) authz_user_module (static) authz_default_module (static) auth_basic_module (static) include_module (static) filter_module (static) deflate_module (static) log_config_module (static) env_module (static) expires_module (static) setenvif_module (static) version_module (static) mpm_prefork_module (static) http_module (static) mime_module (static) status_module (static) autoindex_module (static) asis_module (static) cgi_module (static) negotiation_module (static) dir_module (static) actions_module (static) userdir_module (static) alias_module (static) rewrite_module (static) so_module (static) Syntax OK
解析prefork、work模式的配置apache
[root@localhost apache]# vim conf/httpd.conf 去除註釋符號"#",將mpm模式配置包含進來 Include conf/extra/httpd-mpm.conf [root@localhost extra]# vim httpd-mpm.conf prefork的配置: <IfModule prefork.c> StartServers 8 #服務啓動時的子進程數量 MinSpareServers 5 #最小空閒進程數 MaxSpareServers 20 #最大空閒進程數 ServerLimit 256 #服務器生命週期內爲MaxClient所容許的最大進程數,一般相等MaxClients MaxClients 256 #最大併發請求數 MaxRequestsPerChild 4000 #單個進程響應的最大請求數 </IfModule> worker的配置: <IfModule worker.c> StartServers 4 #服務器啓動時的進程數 MaxClients 300 #最大併發請求數 MinSpareThreads 25 #最小空閒線程數 MaxSpareThreads 75 #最大空閒線程數 ThreadsPerChild 25 #每一個進程能啓動的線程數 MaxRequestsPerChild 0 #每一個線程能響應的最大請求數,0表示不作限制 </IfModule>
PV: Page View 有效計算的頁面訪問量,每個頁面連接都是一個請求
UV: User View 用戶量
獨立IP量;
300 * 86400 = 2592 0000 架設頁面有50個資源,大概就有40W+PV,從早到晚全負荷工做
每個PV須要多少帶寬,假設一個資源須要200k,1個請求20k
一個主站頁面有100個請求,服務器最大併發300個,滿負荷計算PV
300 * 86400 = 2592 0000 /100 = 25w+ 的PV
格式:LoadModule <mod_name> <mod_path> 模塊路徑可以使用相對地址,相對於ServerRoot("/etc/httpd")指向的路徑而言;
[root@localhost ~]# grep LoadModule /etc/httpd/conf/httpd.conf
# have to place corresponding `LoadModule' lines at this location so the
# LoadModule foo_module modules/mod_foo.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
......
[root@localhost conf]# vim httpd.conf DocumentRoot "/var/www/html"
文檔路徑映射:DocumentRoot指向的路徑爲URL路徑的起始位置;
舉例: DocumentRoot "/var/www/html" test/index.html --> http://HOST:PORT/test/index.html
可基於兩種類型的路徑指明對哪些資源進行訪問控制
文件系統路徑:
<Directory ""> </Direcotry> <File ""> </File> <FileMatch ""> </FileMatch> 正則表達式模式匹配
URL路徑:
<Location ""> </Location> ...
訪問控制機制:
基於來源地址;對ip地址訪問控制
基於帳號;
(1) Options 訪問選項:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews None, All Indexes: 索引;容許索引會把網站全部的文件列出來,很危險。當咱們訪問網站並未給明指定資源時,會直接返回主頁面(index.html),如http://www.123.com/。可是若是沒有指明主頁面,啓用該索引就會把網站全部的頁面將會以列表形式所有展現出來。經常使用於下載站點,
要禁止,去掉或在前面加上減號「-」: -Indexes
FollowSymlinks:容許跟蹤符號連接文件;假設網站下有一個軟連接,可使用該選項進行配置是否容許訪問軟連接。要禁止以上的選項,能夠直接使用Options None [root@localhost ~]# mv /etc/httpd/conf.d/welcome.conf{,.bak} [root@localhost ~]# mkdir /www/htdocs -pv [root@localhost ~]# vim /etc/httpd/conf/httpd.conf 修改爲 DocumentRoot "/www/htdocs" <Directory "/www/htdocs">
[root@localhost ~]# service httpd reload
[root@localhost ~]# ll /www/htdocs/
total 8
-rw-r--r-- 1 root root 779 Jul 13 10:02 fstab.html
-rw-r--r-- 1 root root 45 Jul 13 09:44 test.html
[root@localhost ~]# ln -sv /etc/issue /www/htdocs/
`/www/htdocs/issue' -> `/etc/issue'
[root@localhost ~]# ll /www/htdocs/
total 8
-rw-r--r-- 1 root root 779 Jul 13 10:02 fstab.html
lrwxrwxrwx 1 root root 10 Jul 13 10:24 issue -> /etc/issue
-rw-r--r-- 1 root root 45 Jul 13 09:44 test.html
當在網站根目錄下沒有默認的index.html主頁面時,開啓了Indexes會以列表形式展現全部的代碼連接,而issue文件做爲軟連接,由於設置了FollowSymlinks,因此也能夠訪問到issue文件,以下圖:
(2) 基於來源地址的訪問控制機制 使用allow和deny的規則 例如: Order deny,allow deny from all allow from 127.0.0.1 判斷依據以下: ①看Order後面的,哪一個在前,哪一個在後 ②若是deny在前,那麼就要先看deny from這句,而後看allow這句 ③規則是一條一條的匹配,無論是deny在前仍是allow在前,都會生效。如案列中,先是deny了全部,而後又allow了127.0.0.1,因此127.0.0.1是經過的。 再舉幾個例子: Order allow,deny deny from all allow from 127.0.0.1 這個就會deny全部,127.0.0.1也會被deny。由於順序是先allow而後deny,雖然一開始allow了127.0.0.1,但後面有deny掉了。 Order allow,deny deny from all 上面的規則代表,所有都不能通 Order deny,allow deny from all 上面規則表示,所有都不能通行 Order deny,allow 只有順序,沒有規則,表示,所有均可以通行(默認的),由於allow在最後了 Order allow,deny 這個表示所有都不能通行(默認的),由於deny在最後了 (1)對某個目錄作限制,至容許本公司ip訪問,固然這個目錄能夠是網站的根目錄,也就是整個站點都須要作限制了 <Directory /data/www> Order deny,allow deny from all allow from 127.0.0.1 </Directory> 說明:只容許127.0.0.1訪問,其餘ip所有拒絕掉 (2)針對請求的uri去限制,前面安裝的discuz論壇,訪問後臺是admin.php,那麼咱們就能夠針對這個admin.php作限制。 <filesmatch "(.*)admin(.*)> Order deny ,allow Deny from all Allow from 127.0.0.1 </filesmatch> 說明:這裏用到了filesmatch語法,表示匹配的意思。
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index.html.var
默認的主頁面能夠有不少,如index.php 、index.htm等
①日誌的格式設定
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf 錯誤日誌: ErrorLog logs/error_log #日誌路徑 LogLevel warn #日誌級別 日誌級別:debug, info, notice, warn, error, crit, alert, emerg 訪問日誌: CustomLog logs/access_log combined #combined爲日誌格式名 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined %h:客戶端IP地址; %l: Remote logname (from identd, if supplied). -表示爲空; %u: Remote user, (from auth; may be bogus if return status (%s) is 401); %t:Time the request was received (standard english format),服務器收到請求的時間; %r:First line of request,請求報文的道行信息(method url version); %>s: 響應狀態碼; %b: 響應報文的大小,單位是字節,不包括響應報文首部; %{Referer}i:請求報文當中"referer"首部的值;當前資源的訪問入口,即從哪一個頁面中的超連接跳轉而來; %{User-Agent}i:請求報文當中"User-Agent"首部的值;即發出請求用到的應用程序; 詳情:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
②日誌切割
這裏的日誌指的是訪問日誌,咱們每訪問一次網站,那麼就會記錄若干條日誌。固然前提是已經配置了日誌,日誌若是不去管理,時間長了就會愈來愈大。那麼如何避免產生這麼大的日誌文件呢?Apache有相關的配置,是日誌按照咱們的需求進行歸檔,好比天天一個新日誌,或者每小時更新一個日誌。
[root@localhost ~]# vim /etc/httpd/conf.d/vhosts.conf #配置虛擬主機配置文件vhosts.conf <VirtualHost *:80> ServerName www.abc.org DocumentRoot "/vhosts/www/htdocs" ErrorLog "|usr/sbin/retatelogs -l /etc/httpd/logs/www.abc.org_error_%Y%m%d_log 86400" #配置錯誤日誌按天切割 CustomLog "|/usr/sbin/rotatelogs -l /etc/httpd/logs/www.abc.org_access_%Y%m%d_log 86400" combined #配置訪問日誌按天切割 </VirtualHost> [root@localhost ~]# apachectl -t Syntax OK [root@localhost ~]# service httpd reload Reloading httpd: [root@localhost ~]# curl www.abc.org welcome to www.abc.org
[root@localhost ~]# ll /etc/httpd/logs/www.abc.org_* -rw-r--r-- 1 root root 368 Jul 15 09:23 /etc/httpd/logs/www.abc.org_access_20180715_log -rw-r--r-- 1 root root 148 Jul 15 09:22 /etc/httpd/logs/www.abc.org_error_20180715log
解析說明:ErrorLog是錯誤日誌,CustomLog是訪問日誌。最前面的管道符意識是把產生的日誌交給rotatelogs這個工具,而這個工具就是Apache自帶的切割日誌的工具。-l的做用是校準時區爲UTC,也就是北京時間。最後面的86400,單位爲秒,因此正好是一天,那麼日誌會天天切割一次,後面的combined爲日誌格式。
③apache不記錄指定類型的日誌
若是一個站點的訪問量過大,那麼訪問日誌就會有不少,但有一些訪問日誌咱們實際上是能夠忽略的,好比網站的一些圖片,還有js,css等靜態對象。而這些文件的訪問每每是巨量的,並且即便記錄這些日誌也沒什麼用,那麼如何忽略掉這些訪問的日誌呢?
相關配置爲:
[root@localhost logs]# !vim vim /etc/httpd/conf.d/vhosts.conf <VirtualHost *:80> ServerName www.abc.org DocumentRoot "/vhosts/www/htdocs" SetEnvIf Request_URI ".*\.gif$" image-request SetEnvIf Request_URI ".*\.jpg$" image-request SetEnvIf Request_URI ".*\.png$" image-request SetEnvIf Request_URI ".*\.bmp$" image-request SetEnvIf Request_URI ".*\.swf$" image-request SetEnvIf Request_URI ".*\.js$" image-request SetEnvIf Request_URI ".*\.css$" image-request ErrorLog "|/usr/sbin/rotatelogs -l /etc/httpd/logs/www.abc.org_error_%Y%m%d_log 86400" CustomLog "|/usr/sbin/rotatelogs -l /etc/httpd/logs/www.abc.org_access_%Y%m%d_log 86400" combined env=!image -request </VirtualHost> [root@localhost logs]# apachectl -t Syntax OK [root@localhost logs]# service httpd reload Reloading httpd:
解析說明:在原來日誌配置的基礎上,增長了一些image-request的定義,好比把gif、jpg、bmp、swf、js、css等結尾的所有標記爲image-request,而後再配置日誌的時候加一個標記env!=image-request,這裏有個歎號,表示取反,這樣就能夠把那些忽略了。
這裏的靜態文件指的是圖片、js、css等文件,用戶訪問一個站點,其實大多數元素都是圖片、js、css等,這些靜態文件實際上是會被客戶端的瀏覽器緩存到本地電腦上的,目的就是爲了下次再請求時再也不去服務器上下載,這樣就加快了速度,提升了用戶體驗,可是這些靜態文件不能一直緩存,它總有一些時效性。
[root@localhost logs]# vim /etc/httpd/conf.d/vhosts.conf [root@localhost logs]# apachectl -t Syntax OK [root@localhost logs]# service httpd reload Reloading httpd: [root@localhost logs]# <VirtualHost *:80> ServerName www.abc.org DocumentRoot "/vhosts/www/htdocs" <IfModule mod_expires.c> ExpiresActive on ExpiresByType image/gif "access plus 1 days" ExpiresByType image/jpeg "access plus 24 hours" ExpiresByType image/png "access plus 24 hours" ExpiresByType text/css "now plus 2 hours" ExpiresByType application/x-javascript "now plus 2 hours" ExpiresByType application/javascript "now plus 2 hours" ExpiresByType application/x-shockwave-flash "now plus 2 hours" ExpiresDefault "now plus 0 min" </IfModule> SetEnvIf Request_URI ".*\.gif$" image-request SetEnvIf Request_URI ".*\.jpg$" image-request SetEnvIf Request_URI ".*\.png$" image-request SetEnvIf Request_URI ".*\.bmp$" image-request SetEnvIf Request_URI ".*\.swf$" image-request SetEnvIf Request_URI ".*\.js$" image-request SetEnvIf Request_URI ".*\.css$" image-request ErrorLog "|/usr/sbin/rotatelogs -l /etc/httpd/logs/www.abc.org_error_%Y%m%d_log 86400" CustomLog "|/usr/sbin/rotatelogs -l /etc/httpd/logs/www.abc.org_access_%Y%m%d_log 86400" combined env=!image-request </VirtualHost>
說明:這裏的時間單位能夠是days、hours、min,要想使用這些模塊,必要要查看是否支持,查看命令爲:# /usr/local/apache2/bin/apachectl -M
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf DocumentRoot "/www/htdocs" 假設訪問連接:http://www.192.168.56.13.com/download/bash-4.4.2-3.el6.x86_64.rpm --> 資源路徑爲:/www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm 那麼若是將訪問的路徑配置一個別名,將會實現一個跳轉頁面 語法格式:Alias /URL/ "/PATH/TO/SOMEDIR/" 舉例: [root@localhost htdocs]# pwd /www/htdocs [root@localhost htdocs]# tree . ├── bbs │ └── index.html ├── forum └── index.html [root@localhost htdocs]# curl http://192.168.56.13/bbs/index.html #沒有配置別名時訪問 Page At /bbs/index.html [root@localhost ~]# vim /etc/httpd/conf/httpd.conf Alias /bbs/ "/www/htdocs/forum/" #配置bbs目錄的別名 [root@localhost htdocs]# curl http://192.168.56.13/bbs/index.html #配置別名時訪問 Page at /www/htdocs/forum
當訪問網站頁面時,會對用戶的身份進行驗證。這請求須要經歷一下階段:
(1)認證質詢:
WWW-Authenticate:響應碼爲401,拒絕客戶端請求,並說明要求客戶提供帳號和密碼;
(2)認證:
Authorization:客戶端用戶填入帳號和密碼後再次發送請求報文;認證經過,則服務器發送響應的資源;
客戶端所用到的帳號密碼經過http發送,因爲http是明文傳輸,存在安全隱患,由此引伸認證類型:
①basic:明文,解決安全隱患,能夠放在https進行傳輸
②digest:消息摘要,經過md5加密,較老的瀏覽器不支持
目前來講都是以表單認證的形式
安全域:須要用戶認證後方能訪問的路徑;針對某一目錄的認證
應該經過名稱對其進行標識,並用於告知用戶認證的緣由;
那麼認證的用戶的帳號和密碼存儲於何處?
虛擬帳號:僅用於訪問某服務時用到的認證標識;和系統帳號無關
虛擬帳號的存儲方式:文本文件、SQL數據庫、ldap、nis等等
basic認證方式三步曲:
(1) 定義安全域
<Directory ""> Options None AllowOverride None AuthType Basic #認證方式 AuthName "STRING" #認證名稱 AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE" #認證用戶相關文件 Require user username1 username2 ... #指定用戶 #Require valid-user #若是容許帳號文件中的全部用戶登陸訪問,則選用該選項 </Directory>
(2) 提供帳號和密碼存儲(文本文件)
使用htpasswd命令進行管理 語法格式:htpasswd [options] passwordfile username -c: 自動建立passwordfile,所以,僅應該在添加第一個用戶時使用; -m: md5加密用戶密碼; -s: sha1加密用戶密碼; -D: 刪除指定用戶
(3) 實現基於組進行認證
<Directory ""> Options None AllowOverride None AuthType Basic AuthName "STRING" AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE" AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE" Require group GROUP1 GROUP2 ... </Directory> 須要提供:用戶帳號文件和組文件; 組文件須要手動建立:每一行定義一個組 格式:GRP_NAME:user1 user2 user3 ...
舉個例子:
[root@localhost admin]# vim /etc/httpd/conf/httpd.conf #修改配置文件,對/www/htdocs/admin目錄進行認證訪問 增長 <Directory "/www/htdocs/admin"> Options None AllowOverride None AuthType Basic #認證類型爲Basic AuthName "Administator private" #認證提示 AuthUserFile "/etc/httpd/conf.d/.htpasswd" #用戶密碼文件路徑 Require valid-user #設置所有用戶有效 </Directory> [root@localhost admin]# apachectl -t #測試配置文件語法 Syntax OK [root@localhost admin]# service httpd reload #從新加載httpd Reloading httpd: [root@localhost admin]# htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom #建立第一個用戶tom New password: 123456 Re-type new password: 123456 Adding password for user tom [root@localhost admin]# htpasswd -m /etc/httpd/conf.d/.htpasswd jack #建立第二個用戶jack New password: 123456 Re-type new password: 123456 Adding password for user jack [root@localhost admin]# tail /etc/httpd/conf.d/.htpasswd #查看用戶密碼文件,都是以加密格式存放密碼 tom:$apr1$4GLjLGoJ$E523FFHh3hp84gU1y1X431 jack:$apr1$gER/EINJ$G.AZHOt7D49tZkGsirVwp1 [root@localhost admin]# apachectl -t Syntax OK [root@localhost admin]# service httpd reload Reloading httpd:
訪問:http://192.168.56.13/admin/index.html,提示須要輸入用戶密碼登錄:tom 123456
修改配置僅限tom用戶訪問
[root@localhost admin]# !vim vim /etc/httpd/conf/httpd.conf <Directory "/www/htdocs/admin"> Options None AllowOverride None AuthType Basic AuthName "Administator private" AuthUserFile "/etc/httpd/conf.d/.htpasswd" #Require valid-user Require user tom #配置僅限tom用戶訪問 </Directory> [root@localhost admin]# apachectl -t Syntax OK [root@localhost admin]# service httpd reload Reloading httpd:
實現基於組進行認證
root@localhost admin]# htpasswd -m /etc/httpd/conf.d/.htpasswd kim #增長認證用戶kim New password: 123456 Re-type new password: 123456 Adding password for user kim [root@localhost admin]# vim /etc/httpd/conf.d/.htgroup #手動建立組文件,將用戶jack和kim歸併到webadmin組 webadmin: jack kim [root@localhost admin]# vim /etc/httpd/conf/httpd.conf #修改配置文件,僅限組內用戶訪問 <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 valid-user #Require user tom Require group webadmin #僅限webadmin組內用戶訪問 </Directory> [root@localhost admin]# apachectl -t Syntax OK [root@localhost admin]# service httpd reload Reloading httpd:
有三種實現方案:
基於ip:
爲每一個虛擬主機準備至少一個ip地址;
基於port:
爲每一個虛擬主機準備至少一個專用port;實踐中不多使用;
基於hostname:
爲每一個虛擬主機準備至少一個專用hostname;
可混合使用上述三種方式中任意方式;
注意:通常虛擬主機莫與中心主機混用,因此,要使用虛擬主機,先禁用中心主機;
禁用中心主機:註釋DocumentRoot
每一個虛擬主機都有專用配置:
<VirtualHost "IP:PORT"> SeverName DocumentRoot "" </VirtualHost> ServerAlias: 虛擬主機的別名; ErrorLog:錯誤日誌 CustomLog:訪問日誌 <Directory ""> 封裝目錄進行訪問控制 </Directory>
①配置基於IP虛擬主機
(1)配置站點目錄和主頁文件
[root@localhost admin]# mkdir -pv /vhosts/{www,bbs,blog}/htdocs #建立網站目錄 mkdir: created directory `/vhosts' mkdir: created directory `/vhosts/www' mkdir: created directory `/vhosts/www/htdocs' mkdir: created directory `/vhosts/bbs' mkdir: created directory `/vhosts/bbs/htdocs' mkdir: created directory `/vhosts/blog' mkdir: created directory `/vhosts/blog/htdocs' [root@localhost admin]# echo "welcome to www.abc.org" > /vhosts/www/htdocs/index.html #建立www的主頁index.html [root@localhost admin]# echo "welcome to bbs.abc.org" > /vhosts/bbs/htdocs/index.html #建立bbs的主頁index.html [root@localhost admin]# echo "welcome to blog.abc.org" > /vhosts/blog/htdocs/index.html #建立blog的主頁index.html
(2)爲eth0:0配置臨時新ip:192.168.56.130 [root@localhost admin]# ifconfig eth0:0 192.168.56.130/24 up #配置虛擬網卡 [root@localhost admin]# ifconfig eth0:0 eth0:0 Link encap:Ethernet HWaddr 00:0C:29:83:73:08 inet addr:192.168.56.130 Bcast:192.168.56.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
(3)修改主配置文件httpd.conf [root@localhost admin]# vim /etc/httpd/conf/httpd.conf <VirtualHost 192.168.56.13:80> ServerName www.abc.org DocumentRoot "/vhosts/www/htdocs" </VirtualHost> <VirtualHost 192.168.56.130:80> ServerName bbs.abc.org DocumentRoot "/vhosts/bbs/htdocs" </VirtualHost>
(4)檢查語法,平滑重啓Apache [root@localhost admin]# apachectl -t Syntax OK [root@localhost admin]# service httpd reload Reloading httpd:
(5)配置hosts解析,測試訪問 [root@localhost admin]# vim /etc/hosts
配置hosts解析:
192.168.56.13 www.abc.org bbs.abc.org blog.abc.org
[root@localhost admin]# curl 192.168.56.13 welcome to www.abc.org [root@localhost admin]# curl 192.168.56.130 welcome to bbs.abc.org
②基於端口虛擬主機
(1)修改主配置文件httpd,配置監聽端口以及多端口虛擬主機
[root@localhost admin]# vim /etc/httpd/conf/httpd.conf Listen 80 Listen 8080 Listen 8081 <VirtualHost *:80> #配置www.abc.org監聽80端口 ServerName www.abc.org DocumentRoot "/vhosts/www/htdocs" </VirtualHost> <VirtualHost *:8080> #配置bbs.abc.org監聽8080端口 ServerName bbs.abc.org DocumentRoot "/vhosts/bbs/htdocs" </VirtualHost> <VirtualHost *:8081> #配置blog.abc.org監聽8081端口 ServerName blog.abc.org DocumentRoot "/vhosts/blog/htdocs" </VirtualHost>
(2)檢查配置文件語法,平滑重啓Apache [root@localhost admin]# apachectl -t Syntax OK [root@localhost admin]# service httpd reload Reloading httpd:
(3)測試訪問 [root@localhost admin]# curl www.abc.org welcome to www.abc.org [root@localhost admin]# curl bbs.abc.org:8080 welcome to bbs.abc.org [root@localhost admin]# curl bbs.abc.org:8081 welcome to blog.abc.org
③基於域名的虛擬主機
(1)修改主配置文件httpd.conf
[root@localhost admin]# vim /etc/httpd/conf/httpd.conf NameVirtualHost *:80 #打開註釋 <VirtualHost *:80> #配置www.abc.org域名 ServerName www.abc.org DocumentRoot "/vhosts/www/htdocs" </VirtualHost> <VirtualHost *:80> #配置bbs.abc.org域名 ServerName bbs.abc.org DocumentRoot "/vhosts/bbs/htdocs" </VirtualHost> <VirtualHost *:80> #配置blog.abc.org域名 ServerName blog.abc.org DocumentRoot "/vhosts/blog/htdocs" </VirtualHost>
(2)修改Host本地解析 [root@localhost admin]# vim /etc/hosts 192.168.56.13 www.abc.org bbs.abc.org blog.abc.org
(3)檢測語法,平滑重啓Apache [root@localhost admin]# apachectl -t Syntax OK [root@localhost admin]# service httpd reload Reloading httpd:
(4)測試訪問 [root@localhost admin]# curl www.abc.org welcome to www.abc.org [root@localhost admin]# curl bbs.abc.org welcome to bbs.abc.org [root@localhost admin]# curl blog.abc.org welcome to blog.abc.org
修改主配置文件,找到server-status的註釋行,打開註釋。修改Allow from .example.com 爲Allow from all
該配置能夠在主配置中配置,全局生效;也能夠在虛擬主機內配置,局部生效,通常這種狀態信息頁,可使用前面的Auth認證的方式進行打開,更爲安全。
[root@localhost admin]# vim /etc/httpd/conf/httpd.conf <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from all </Location> [root@localhost admin]# apachectl -t Syntax OK [root@localhost admin]# service httpd reload Reloading httpd:
訪問頁面http://www.abc.org/server-status
狀態頁面解析:
Current Time: Saturday, 14-Jul-2018 06:51:47 EDT #當前時間 Restart Time: Saturday, 14-Jul-2018 06:50:17 EDT #重啓時間 Parent Server Generation: 30 Server uptime: 1 minute 30 seconds #服務更新時間 1 requests currently being processed, 7 idle workers W_______........................................................ ................................................................ ................................................................ ................................................................ Scoreboard Key: "_" Waiting for Connection(正在等待鏈接), "S" Starting up(正在啓動), "R" Reading Request(正在接收用戶請求), "W" Sending Reply(正在發送響應), "K" Keepalive (read)(保持鏈接), "D" DNS Lookup(DNS查詢), "C" Closing connection(正在關閉鏈接), "L" Logging(正在記錄日誌), "G" Gracefully finishing(優雅終止), "I" Idle cleanup of worker(空閒清理work進程), "." Open slot with no current process(打開槽位等待進程) PID Key: (從左至右的pid狀態展現) 9143 in state: W , 9144 in state: _ , 9145 in state: _ 9146 in state: _ , 9147 in state: _ , 9148 in state: _ 9149 in state: _ , 9150 in state: _ ,
若是還須要獲取更加詳細的信息,能夠修改配置文件中的擴展狀態開關: ExtendedStatus On
,開啓後,能夠看到下圖的狀態信息:
在windows下修改C:\windows\system32\drivers\etc\hosts或Linux的/etc/hosts下,增長一個www.222.com指向192.168.56.13保存後退出,在瀏覽器訪問依舊能夠實現訪問,這樣就顯得很不安全。此時咱們須要修改虛擬主機配置文件。
[root@localhost admin]# vim /etc/hosts 192.168.56.13 www.abc.org bbs.abc.org blog.abc.org www.222.com [root@localhost admin]# curl www.222.com welcome to www.abc.org
此時,配置虛擬主機配置文件,第一個爲默認虛擬主機,指向一個隨意的域名和空目錄,便可達到禁止隨意解析
[root@localhost conf.d]# vim /etc/httpd/conf/httpd.conf #在主配置文件中可使用Include包含擴展配置文件,這裏啓用這種方式,能夠更方便地管理虛擬主機 Include conf.d/*.conf
[root@localhost conf.d]# vim vhosts.conf #編輯虛擬主機配置文件,添加默認虛擬主機 <VirtualHost *:80> ServerName 12332.com #任意域名 DocumentRoot "/tmp/123" #根目錄爲空 <Directory /tmp/123> #對網站根目錄進行全新配置,拒絕全部訪問 Order allow,deny Deny from all </Directory> </VirtualHost>
<VirtualHost *:80> ServerName www.abc.org DocumentRoot "/vhosts/www/htdocs" </VirtualHost> <VirtualHost *:80> ServerName bbs.abc.org DocumentRoot "/vhosts/bbs/htdocs" </VirtualHost> <VirtualHost *:80> ServerName blog.abc.org DocumentRoot "/vhosts/blog/htdocs" </VirtualHost> [root@localhost conf.d]# mkdir /tmp/123 [root@localhost conf.d]# apachectl -t Syntax OK [root@localhost conf.d]# service httpd reload Reloading httpd: [root@localhost conf.d]# curl www.222.com #訪問返回了403狀態碼 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access / on this server.</p> <hr> <address>Apache/2.2.15 (CentOS) Server at www.222.com Port 80</address> </body></html>
一個站點不免會有多個域名,而多個域名總的有一個主次之分,好比阿銘linux的網站能夠用兩個域名進行訪問:www.abc.org 和www.123.com,可是無論用哪一個域名進行訪問,最終都會跳到www.abc.org上來。那麼這個行爲就叫作域名跳轉,這裏的301只是一個狀態碼,跳轉除了301外還有302。下面如何配置域名跳轉呢?假設配置如何讓www.123.com跳轉到www.abc.org
(1)修改虛擬主機配置文件vhosts.conf,在虛擬主機內配置跳轉模塊規則
[root@localhost conf.d]# vim vhosts.conf 須要註釋原來的默認虛擬主機,不然實驗會報錯 #<VirtualHost *:80> # ServerName 12332.com # DocumentRoot "/tmp/123" # <Directory /tmp/123> # Order allow,deny # Deny from all # </Directory> #</VirtualHost> <VirtualHost *:80> ServerName www.abc.org DocumentRoot "/vhosts/www/htdocs" <IfModule mod_rewrite.c> #使用rewrite模塊 Options +FollowSymLinks RewriteEngine on #開始重寫模塊 RewriteCond %{HTTP_HOST} ^www.123.com$ #判斷條件:域名是不是www.123.com RewriteRule ^(.*)$ http://www.abc.org/$1 [R=301,L] #跳轉規則,上面條件成立,則跳轉到www.abc.org </IfModule> </VirtualHost> <VirtualHost *:80> ServerName bbs.abc.org DocumentRoot "/vhosts/bbs/htdocs" </VirtualHost> <VirtualHost *:80> ServerName blog.abc.org DocumentRoot "/vhosts/blog/htdocs" </VirtualHost>
(2)配置hosts解析 [root@localhost conf.d]# vim /etc/hosts 192.168.56.13 www.abc.org bbs.abc.org blog.abc.org www.123.com
(3)檢查語法,平滑重啓Apache [root@localhost admin]# apachectl -t Syntax OK [root@localhost admin]# service httpd reload Reloading httpd:
(4)測試頁面是否跳轉 [root@localhost conf.d]# curl www.123.com -I HTTP/1.1 301 Moved Permanently #提示301跳轉頁面 Date: Sat, 14 Jul 2018 11:46:33 GMT Server: Apache/2.2.15 (CentOS) Location: http://www.abc.org// Content-Type: text/html; charset=iso-8859-1
若是有多個域名,可使用一下配置:
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^www.123.com [OR] RewriteCond %{HTTP_HOST} ^www.456.com RewriteRule ^/(.*)$ http://www.abc.org/$1 [R=301,L] </IfModule> 或者 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} !^www.abc.org$ RewriteRule ^/(.*)$ http://www.abc.org/$1 [R=301,L] </IfModule>
適用場景:
(1) 節約帶寬,額外消耗CPU;同時,可能有些較老瀏覽器不支持;
(2) 壓縮適於壓縮的資源,例如文件文件;
(1)編輯主配置文件httpd.conf導入delfalte模塊並在末尾添加: LoadModule deflate_module modules/mod_deflate.so #######deflate####### SetOutputFilter DEFLATE # mod_deflate configuration # Restrict compression to these MIME types AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/css # Level of compression (Highest 9 - Lowest 1) DeflateCompressionLevel 9 # Netscape 4.x has some problems. BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
(2)檢測配置文件語法,並重載
[root@localhost htdocs]# apachectl -t Syntax OK [root@localhost htdocs]# service httpd reload Reloading httpd:
(3)頁面測試 [root@localhost ~]# curl --compressed www.abc.org/test.html -I #沒有啓用deflate模塊壓縮時,文本大小長度爲282080 HTTP/1.1 200 OK Date: Sun, 15 Jul 2018 14:10:02 GMT Server: Apache/2.2.15 (CentOS) Last-Modified: Sun, 15 Jul 2018 14:09:28 GMT ETag: "f4f-44de0-5710a42d25bb8" Accept-Ranges: bytes Content-Length: 282080 Cache-Control: max-age=0 Expires: Sun, 15 Jul 2018 14:10:02 GMT Content-Type: text/html; charset=UTF-8 [root@localhost ~]# curl --compressed www.abc.org/test.html -I #啓用deflate模塊壓縮後,文本大小長度爲23797 HTTP/1.1 200 OK Date: Sun, 15 Jul 2018 14:10:27 GMT Server: Apache/2.2.15 (CentOS) Last-Modified: Sun, 15 Jul 2018 14:09:28 GMT ETag: "f4f-44de0-5710a42d25bb8" Accept-Ranges: bytes Cache-Control: max-age=0 Expires: Sun, 15 Jul 2018 14:10:27 GMT Vary: Accept-Encoding Content-Encoding: gzip #結果看到啓用了gzip壓縮 Content-Length: 23797 #壓縮後的大小 Content-Type: text/html; charset=UTF-8