博文結構
Apache的Gzip(deflate)功能
Apache的緩存設置
Apache禁止目錄遍歷
Apache隱藏版本目錄
Apache日誌分割
Apache配置防盜鏈css
關於apache源碼包安裝參考apache安裝及工做模式html
開啓 apache 的 Gzip(deflate)功能 gzip 能夠極大的加速網站,有時壓縮比率高到 80%,最少都有 40%以上,仍是至關不錯的。 在 Apache2 以後的版本,模塊名不叫 gzip,而叫 mod_deflate web
LoadModule deflate_module modules/mod_deflate.so //模塊的做用:對傳輸到客戶端的代碼進行gzip壓縮 LoadModule headers_module modules/mod_headers.so /模塊的做用:告訴客戶端的瀏覽器,傳輸的文件使用了gzip壓縮。若是不開啓的話,則沒法正常顯示網頁內容
[root@localhost ~]# cd /usr/src/httpd-2.4.23/modules/filters/ //切換到Apache源碼包mod_deflate所在的目錄下 [root@localhost filters]# /usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c //使用apxs命令進行安裝
-i:表示須要執行安裝操做,以安裝一個或多個動態共享對象到服務器的modules目錄中; -a:表示會自動增長一個 LoadModule 行到 httpd.conf 文件中,以啓用此模塊,或者,若是 此行已經存在,則啓用之; -c:表示須要執行編譯操做。
[root@localhost ~]# yum -y install zlib-develapache
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
[root@localhost /]# apachectl -t
Syntax OK
[root@localhost /]# apachectl restartvim
接下來修改Apache主配置文件,使其開啓gzip壓縮傳輸功能瀏覽器
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf <IfModule mod_deflate.c> DeflateCompressionLevel 9 SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/* SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary </IfModule> DeflateFilterNote Input input_info DeflateFilterNote Output output_info DeflateFilterNote Ratio ratio_info LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate CustomLog logs/deflate_log.log deflate
解釋:緩存
<IfModule mod_deflate.c> DeflateCompressionLevel 9 \\壓縮程度的等級,預設能夠採用 6 這個數值,以維持 耗用處理器效能與網頁壓縮質量的平衡 SetOutputFilter DEFLATE \\設置輸出過濾器,對輸出啓用壓縮,必須的,就像一個 開關同樣,告訴 apache 對傳輸到瀏覽器的內容進行壓縮 AddOutputFilterByType DEFLATE text/* \\設置對文件是文本的內容進行壓縮,例如 text/html text/css text/plain 等. SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary \\設置不對後綴 gif,jpg,jpeg,png 的圖片文件進行壓縮。注:?:表示不會捕獲 ( )裏內容了 </IfModule> DeflateFilterNote Input input_info \\聲明輸入流的 byte 數量 DeflateFilterNote Output output_info \\聲明輸出流的 byte 數量 DeflateFilterNote Ratio ratio_info \\聲明壓縮的百分比 LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate \\聲明日誌格式 CustomLog logs/deflate_log.log deflate //指定日誌的存放路徑
[root@localhost /]# vim /usr/local/http-2.4.23/htdocs/index.html 安全
[root@localhost /]# apachectl -t Syntax OK [root@localhost /]# apachectl restart
[root@localhost ~]# cat /usr/local/http-2.4.23/logs/deflate_log.log "GET / HTTP/1.1" 77/5265 (1%) "GET /favicon.ico HTTP/1.1" -/- (-%) "GET / HTTP/1.1" 77/5265 (1%) "GET / HTTP/1.1" 77/5265 (1%) [root@localhost ~]#
注:圖片是不須要啓用 GZip 壓縮的,從 GZip 檢測結果來看,壓縮後的圖片體積居然大過原 體積!這就解釋了爲何圖片不用啓用 GZip 壓縮的緣由了服務器
這個是很是有用的優化,mod_expires 能夠減小 20-30%左右的重複請求,讓重複的用戶對指定 的頁面請求結果都 CACHE 在本地,根本不向服務器發出請求。但要注意更新快的文件不要 這麼作。 這個模塊控制服務器應答時的 Expires 頭內容和 Cache-Control 頭的 max-age 指令。有效期 (expiration date)能夠設置爲相對於源文件的最後修改時刻或者客戶端的訪問時刻網絡
進入主配置裏面搜索expires把前面#去掉
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
<IfModule mod_expires.c> ExpiresActive On ExpiresByType text/html "access plus 2 minute" ExpiresByType image/jpeg "access plus 1 mouth" ExpiresDefault "now plus 0 minute" </IfModule>
註釋:
<IfModule mod_expires.c> //表示啓用expires模塊 ExpiresActive On //啓用expires功能 ExpiresByType text/html "access plus 2 minute" //設置後綴爲html的文本文件保存時間爲兩分鐘 ExpiresByType image/jpeg "access plus 1 mouth" //設置後綴爲jpeg的圖片信息保存時間爲一個月 ExpiresDefault "now plus 0 minute" //其餘默認沒有被定義的不進行緩存 </IfModule>
其中<base>是下列之一: • access • now (等價於'access ') • modification plus 關鍵字是可選的。<num>必須是整數,<type>是下列之一: • years • months • weeks • days • hours • minutes • seconds
[root@localhost ~]# cd /usr/local/http-2.4.23/htdocs/ [root@localhost htdocs]# mv index.html /index.html.bak [root@localhost htdocs]# mkdir aaa [root@localhost htdocs]# mkdir 123 [root@localhost htdocs]# vim /usr/local/http-2.4.23/conf/httpd.conf [root@localhost htdocs]# apachectl restar [root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf [root@localhost ~]# apachectl restart
報403沒有權限訪問
顯示目錄結構:把主配置文件裏面剛刪除的寫回來
報200訪問成功
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
進入主配置文件把前面#號去掉
[root@localhost /]# vim /usr/local/http-2.4.23/conf/extra/httpd-default.conf
找到 ServerTokens Full ServerSignature On 改爲 ServerTokens Prod ServerSignatureoff 重啓 apache 測試
[root@localhost /]# apachectl restart
[root@localhost /]# curl -I 127.0.0.1
能夠看到apache版本號被隱藏了
#define AP_SERVER_BASEVENDOR "Apache Software Foundation" #服務的供應商名稱 #define AP_SERVER_BASEPROJECT "Apache HTTP Server" #服務的項目名稱 #define AP_SERVER_BASEPRODUCT "Apache" #服務的產品名 #define AP_SERVER_MAJORVERSION_NUMBER 2 #主要版本號 #define AP_SERVER_MINORVERSION_NUMBER 4 #小版本號 #define AP_SERVER_PATCHLEVEL_NUMBER 23 #補丁級別 #define AP_SERVER_DEVBUILD_BOOLEAN 0 #
隨着網站的訪問愈來愈大,WebServer 產生的日誌文件也會愈來愈大,若是不對日誌進行分割,那麼只能一次將大的日誌(如 Apache 的日誌)整個刪除,這樣也丟失了不少對網站比較寶貴的信息,由於這些日誌能夠用來進行訪問分析、網絡安全監察、網絡運行情況監控等,所以管理好這些海量的日誌對網站的意義是很大的。
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
修改Apache的主配置文件,更改內容以下: //找到如下兩行,進行註釋: ErrorLog logs/error_log CustomLog logs/access_log common //而後最好在CustomLog "logs/access_log" common配置的下一行添加以下內容(如下內容不能夠直接複製,請看下面的解釋): ErrorLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/error_%Y-%m-%d.log 86400" CustomLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/access_%Y-%m-%d.log 86400" combined //這裏是要填寫rotatelogs工具的絕對路徑
86400爲輪轉的時間,單位是秒(也就是一天生成一個日誌文件)。
ErrorLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/error_%Y%m%d.log 86400" CustomLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined
[root@localhost /]# ls /usr/local/http-2.4.23/logs/ access_20191221.log access-20191221.log access_log error_20191221.log error-20191221.log error_log httpd.pid [root@localhost /]#
因爲 apache 自帶的日誌輪詢工具 rotatelogs,聽說在進行日誌切割時容易丟日誌,所以咱們一般使用 cronolog 進行日誌輪詢。
[root@localhost /]# tar zxf cronolog-1.6.2.tar.gz [root@localhost /]# cd cronolog-1.6.2/ [root@localhost cronolog-1.6.2]# ./configure && make && make install
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf //編輯Apache的主配置文件 //將方法1中寫入的日誌切割配置項刪除,寫入下面的兩行配置 CustomLog "|/usr/local/sbin/cronolog logs/access-%Y-%m-%d.log" combined ErrorLog "|/usr/local/sbin/cronolog logs/error-%Y-%m-%d.log" //一樣這裏寫的也是cronolog工具的絕對路徑 爲了更好的進行測試,建議將本來的日誌文件進行刪除、移動操做 [root@localhost ~]# rm -rf /usr/local/http-2.4.23/logs/*log [root@localhost ~]# ls /usr/local/http-2.4.23/logs/ httpd.pid [root@localhost ~]# ls /usr/local/http-2.4.23/logs/ access-2019-11-23.log error-2019-11-23.log httpd.pid //測試訪問一下,訪問日誌和錯誤日誌便可產生
[root@localhost /]# ls /usr/local/http-2.4.23/logs/
按天輪詢: CustomLog "|/usr/local/sbin/cronolog logs/access_www_%Y%m%d.log" combined 按小時輪詢: CustomLog "|/usr/local/sbin/cronolog logs /access_www_ %Y%m%d%H.log" combined
注意: 這兩個管道日誌文件程序還有一點不一樣之處是使用 cronolog 時若是日誌是放在某個不存 在的路徑則會自動建立目錄,而使用 rotatelogs 時不能自動建立,這一點要特別注意 !
有時候會忽然發現網站的訪問量愈來愈,千萬不要高興的太早,頗有多是被別人盜鏈了。打個比方說:你本身搭建了一個視頻網站,而後別人將他網站上的視頻的地址重定向到你的服務器上。這樣你的網站訪問量就會愈來愈大,消耗的資源也就愈來愈多!如何避免這種可能的發生,那麼就須要使用防盜鏈。
服務器配置以下:
用 rewrite 實現
下載倆個圖片保存在
[root@localhost htdocs]# ls a.jpg b.jpg [root@localhost htdocs]# mkdir about [root@localhost htdocs]# mv a.jpg b.jpg about [root@localhost about]# mv b.jpg error.png [root@localhost htdocs]# cd about/ [root@localhost about]# ls a.jpg error.png [root@localhost about]# pwd /usr/local/http-2.4.23/htdocs/about
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf LoadModule rewrite_module modules/mod_rewrite.so //找到這一行,默認是註釋的,將#號刪除便可 …………………… <Directory "/usr/local/http-2.4.23/htdocs"> //必須寫在網站的根目錄下 RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://192.168.222.130/.*$ [NC] RewriteRule .*\.(gif|jpg|swf)$ http://192.168.222.130/about/error.png [R,NC,L] </Directory>
輸入本地服務器的IP
RewriteEngine On #啓用 rewrite,要想 rewrite 起做用,必需要寫上 RewriteCond test-string condPattern #寫在 RewriteRule 以前,能夠有一或 N 條,用於測試 rewrite 的匹配條件,具體怎麼寫,後面會詳細說到。 RewriteRule Pattern Substitution #規則 %{HTTP_REFERER}:服務器變量,HTTPReferer 是 header 的一部分,當瀏覽器向 web 服務器發送請求的時候,通常會帶上 Referer,告訴服務器我是從哪一個頁面連接過來的,服務器藉此能夠得到一些信息用於處理。好比從我主頁上連接到一個朋友那裏,他的服務器就可以從 HTTP Referer 中統計出天天有多少用戶點擊我主頁上的連接訪問他的網站。 [ NC]指的是不區分大小寫,[R]強制重定向 redirect 字母 L 表示若是能匹配本條規則,那麼本條規則是最後一條(Last),忽略以後的規則
如圖:
[root@localhost ~]# yum -y install httpd [root@localhost ~]# systemctl start httpd [root@localhost ~]# vim /var/www/html/index.html <a href="http://192.168.222.130/a.jpg">lianjie</a> \\編寫一個超連接,指定服務器的IP
訪問客戶端IP