天天看點

Apache網頁與安全優化(網頁壓縮、網頁緩存、隐藏版本資訊、網頁圖檔防盜鍊)一:Apache網頁優化二:Apache安全優化

文章目錄

  • 一:Apache網頁優化
    • 1.1:網頁壓縮
      • 1.1.1:gzip介紹
      • 1.1.2:Apache的壓縮子產品
      • 1.1.3:Apache的壓縮試驗
    • 1.2:網頁緩存
      • 1.2.1:網頁緩存概述
      • 1.2.2:配置網頁的緩存時間
      • 1.2.3:配置網頁緩存時間實驗
  • 二:Apache安全優化
    • 2.1: 隐藏版本資訊
      • 2.1.1:配置Apache隐藏版本資訊
      • 2.1.2:Apache隐藏版本資訊實驗
    • 2.2:配置防盜鍊
      • 2.2.1:配置防盜鍊實驗

一:Apache網頁優化

  1. Apache網頁優化概述
  • 在企業中,部署Apache後隻采用預設的配置參數,會引發網站很多問題,換言之預設配置是針對以前較低的伺服器配置的,以前的配置已經不适用當今網際網路時代。
  • 為了适應企業需求,就需要考慮如何提升Apache的性能與穩定性,這就是Apache優化的内容
  1. 優化内容
  • 配置網頁壓縮功能
  • 配置網頁緩存
  • 工作模式的選擇與參數優化
  • 配置隐藏版本号
  • 配置防盜鍊

1.1:網頁壓縮

1.1.1:gzip介紹

  1. 配置Apache的網頁壓縮功能,是使用gzip壓縮算法來對網頁内容進行壓縮後再傳到用戶端浏覽器
  2. 作用
  • 降低了網絡傳輸的位元組數,加快網頁加載的速度
  • 節省流量,改善使用者的浏覽體驗
  • gzip與搜尋引擎的抓取工具有着更好的關系

1.1.2:Apache的壓縮子產品

  1. 壓縮子產品概述
  • Apache 1.x系列沒有内建網頁壓縮技術,使用的是額外的第三方mod gzip子產品來執行壓縮。而Apache 2.x官方在開發的時候,就把網頁壓縮考慮進去,内建了mod deflate這個子產品,用以取代mod-gzip,兩者都是使用的gzip壓縮算法,它們的運作原理是類似的。mod deflate壓縮速度略快而mod gzip的壓縮比略高。一般預設情況下, mod gzip會比mod deflate多出4%~6%的壓縮量。
  • 一般來說mod gzip對伺服器CPU的占用要高一些。mod deflate是專門為確定伺服器的性能而使用的一個壓縮子產品, moddeflate需要較少的資源來壓縮檔案。這意味着在高流量的伺服器,使用mod deflate可能會比mod gzip加載速度更快。
  • 簡而言之,如果網站通路量較小,想要加快網頁的加載速度,就使用mod gzip.雖然會額外耗費一些伺服器資源,但也是值得的。如果網站通路量較大、使用的是共享虛拟主機.且所配置設定系統資源有限,那麼使用mod deflate将會是更好的選擇。
  • 另外,從Apache 2.0.45開始, mod deflate子產品可使用DeflateCompressionLevel指令來設定壓縮級别。該指令的值可為1至(壓縮速度最快,最低的壓縮品質) 9 (最慢的壓縮速度,壓縮率最高)之間的整數,其預設值為6 (壓縮速度和壓縮品質較為平衡的值)這個簡單的變化更是使得mod deflate可以輕松媲美mod-gzip的壓縮。
  1. Apache實作網頁壓縮的功能子產品包括
  • mod_gzip子產品
  • mod_deflate子產品
  1. Apache 1.x
  • 沒有内建網頁壓縮技術,但可使用第三方mod_gzip子產品執行壓縮
  1. Apache 2.x
  • 在開發的時候,内建了mod_deflate這個子產品,取代mod gzip
  1. mod_gzip子產品與mod_deflate子產品
  • 兩者均使用gzip壓縮算法,運作原理類似
  • mod_deflate壓縮速度略快,而mod_gzip的壓縮比略高
  • mod_gzip對伺服器CPU的占用要高一些
  • 高流量的伺服器,使用mod_deflate可能會比mod_gzip 加載速度更快

1.1.3:Apache的壓縮試驗

  • 将這三個軟體包傳到opt目錄下
[[email protected] ~]# cd /opt
[[email protected] opt]# ll
總用量 8020
-rw-r--r--  1 root root 1071074 8月   4 17:33 apr-1.6.2.tar.gz
-rw-r--r--  1 root root  565507 8月   4 17:33 apr-util-1.6.0.tar.gz
-rw-r--r--  1 root root 6567926 8月   4 17:33 httpd-2.4.29.tar.bz2
drwxr-xr-x. 2 root root       6 3月  26 2015 rh

[[email protected] opt]# tar zxvf apr-1.6.2.tar.gz
[[email protected] opt]# tar zxvf apr-util-1.6.0.tar.gz
[[email protected] opt]# yum -y install bzip2  ## 如果是最小化安裝需要安裝bzip2
[[email protected] opt]# tar jxvf httpd-2.4.29.tar.bz2

[[email protected] opt]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[[email protected] opt]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util 

           
  • 安裝環境編譯HTTP的環境
##################安裝環境##################
[[email protected] opt]# 
yum -y install \
gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl

           
  • 現在安裝壓縮子產品
[[email protected] httpd-2.4.29]# 
./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi \
--enable-cgid \
--enable-deflate ##這是壓縮子產品
-------------------------------------
prefix:指定将 httpd 服務程式安裝到哪個目錄下,如/usr/local/httpd
--enable-so:啟用動态加載子產品支援,使 httpd 具備進一步擴充功能的能力。
--enable-rewrite:啟用網頁位址重寫功能,用于網站優化及目錄遷移維護。
--enable-charset-lite:啟動字元集支援,以便支援使用各種字元集編碼的網
--enable-cgi:啟用 CGI 腳本程式支援,便于擴充網站的應用通路能力。

           
  • 安裝完之後進行編譯
[[email protected] httpd-2.4.29]# make && make install
[[email protected] httpd-2.4.29]# systemctl restart httpd ## 開啟http服務

           
  • 優化執行路徑
####優化執行路徑####
ln -s /usr/local/httpd/conf/httpd.conf /etc/
ln -s /usr/local/httpd/bin/* /usr/local/bin/
httpd -v      ###檢視下HTTP版本
Server version: Apache/2.4.29 (Unix)
Server built:   Aug 31 2020 02:01:04

           
  • 建立[service].service 配置檔案添加系統給服務。在/lib/systemd/system/目錄下,建立一個以.service 結尾的單元(unit)配置檔案,用于控制由 systemd 管理或監控的httpd 服務
###建立[service].service 配置檔案添加系統給服務####
在/lib/systemd/system/目錄下,建立一個以.service 結尾的單元(unit)配置檔案,
用于控制由 systemd 管理或監控的 httpd 服務
[[email protected] ~]# cd /lib/systemd/system/
[[email protected] system]# vim httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart= /usr/local/bin/apachectl $OPTIONS
ExecrReload= /bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target

           
  • 編譯安裝後, mod deflate子產品需要在httpd.conf檔案啟用才能生效。
[[email protected] httpd-2.4.29]# vi /usr/local/httpd/conf/httpd.conf  ##添加如下代碼
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript image/png image/jpg
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
</IfModule>
第一行代表對什麼樣的内容啟用gzip壓縮,
第二行代表壓縮級别
第三行代表啟用deflate 子產品對本站點的輸出進行 gzip 壓縮。
==>> wq 儲存

           
  • 現在做測試頁
## 把xshell或者别的軟體把本地圖檔放進 /usr/local/httpd/htdocs 裡
[[email protected] httpd-2.4.29]# vi /usr/local/httpd/htdocs/index.html
<html>
<head>
<title>--壓縮測試頁--</title>
</head>
<body>
<h1>這是壓縮頁的内容(女神鎮樓)</h1>
<img src=b.jpg / >   ## b.jpg 是圖檔的名稱
</body>
</html>

           
  • 注意中文亂碼問題解決方法如下
vi /etc/httpd.conf 
AddDefaultCharset utf-8 
service httpd restart
           
  • 驗證明驗
Apache網頁與安全優化(網頁壓縮、網頁緩存、隐藏版本資訊、網頁圖檔防盜鍊)一:Apache網頁優化二:Apache安全優化

1.2:網頁緩存

1.2.1:網頁緩存概述

  • 網頁緩存是将一部分經常不會改變和變動很少的頁面緩存,下次浏覽器再次通路這些

    頁面時,不需要再次去下載下傳這些頁面,進而提高了使用者的通路速度。

  • Apache的mod expires子產品會自動生成頁面頭部資訊中的Expres标簽和Cache-Control

    标簽,用戶端浏覽器根據标簽決定下次通路是在本地機器的緩存中擷取頁面,不需要向伺服器再次送出請求,進而降低用戶端的通路頻率和次數,達到減少不必要的流量和增加通路速度的目的。

1.2.2:配置網頁的緩存時間

  1. 通過mod_expire子產品配置Apache,使網頁能在用戶端浏覽器緩存一段時間聞,以避免重複請求
  2. 啟用mod_expire子產品後,會自動生成頁面頭部資訊中的Expires标簽和Cache-Control标簽,進而降低用戶端的通路頻率和次數,達到減少不必要的流量和增加通路速度的目的
  3. 檢視是否安裝了mod_expire子產品
  • /usr/local/apache/bin/apachectl -t-D DUMP_MODULES
  • 如果輸出中沒有expires_module (static),則說明編譯時沒有安裝mod_expires
  1. 如果沒有安裝,需要重新編譯安裝
  • ./configure --enable-expires
  • make && make install
  1. 修改httpd.conf配置檔案
  • 啟用mod_expires子產品,并設定http協定下任意格式的文檔均60秒後過期
<lfModule mod_expires.c>
	ExpiresActive On
	ExpiresDefault "access plus 60 seconds"
</lfModule>

           
  • 重新開機httpd服務
  • 重新開機Apache服務,再用浏覽器通路測試網站
  • 浏覽器中選擇“檢視元素”可以看到有“Expires"項表示緩存生效

1.2.3:配置網頁緩存時間實驗

  • 先關閉 HTTP 服務
  • 安裝緩存時間子產品
[[email protected] opt]# cd /opt/httpd-2.4.29/
./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi \
--enable-cgid \
--enable-deflate \
--enable-expires

           
  • 編譯
[[email protected] httpd-2.4.29]# make && make install
[[email protected] httpd-2.4.29]# vi /usr/local/httpd/conf/httpd.conf 
LoadModule expires_module modules/mod_expires.so ## 前面的#号去掉,然後在下面插入
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
</IfModule>
==>> wq 儲存

           
  • 檢測httpd.conf 文法并啟動服務
[[email protected] httpd-2.4.29]# httpd -t
Syntax OK
[[email protected] httpd-2.4.29]# systemctl restart httpd ##開啟http服務

           

二:Apache安全優化

  • 安全優化概述:

    Apache的預設配置除了性能可以優化外,還需要對安全性進行相應的配置。預設配置能保證伺服器正常提供服務,但Apache作為一個軟體,必然也會存在一些漏洞,盡可能的降低潛在的風險,是管理者必須掌握的内容。

2.1: 隐藏版本資訊

2.1.1:配置Apache隐藏版本資訊

  • 隐藏版本資訊概述
    • Apache的版本資訊,透露了一定的漏洞資訊,進而給網站帶來安全隐患
    • 生産環境中要配置Apache隐藏版本資訊
    • 将主配置檔案httpd.conf以下行注釋去掉
  • #Include conf/extra/httpd-default.conf
    • 修改httpd-default.conf檔案
  • ServerTokens Full修改為ServerTokens Prod
    • 重新開機httpd服務,通路驗證

2.1.2:Apache隐藏版本資訊實驗

  • 修改httpd.conf 配置檔案
[[email protected] httpd-2.4.29]# vi /usr/local/httpd/conf/httpd.conf  
Include conf/extra/httpd-default.conf  ## 去掉前面的 # 号

           
  • 修改httpd-default.conf檔案
## 修改httpd.conf 配置檔案,使httpd-default.conf 檔案生效,它裡面包含了是否傳回版
本資訊的内容。
[[email protected] httpd-2.4.29]# vi /usr/local/httpd/conf/extra/httpd-default.conf 
ServerTokens Full ==>> 改成  ServerTokens Prod

           

2.2:配置防盜鍊

  • 一般來說,我們浏覽一個完整的頁面并不是一次性全部傳送到用戶端的。如果所請求的頁面帶有圖檔或其他資訊,那麼第一個Http請求傳送的是這個頁面的文本,然後通過用戶端的浏覽器對這段文本進行解釋執行,如果發現其中還有圖檔,那麼用戶端的浏覽器會再次發送一條Http請求,當這個請求被處理後這個圖檔檔案才會被傳送到用戶端,最後浏覽器會将圖檔安放到頁面的正确位置,就這樣一個完整的頁面要經過多次發送Http請求才能夠被完整的顯示
  • 基于這樣的機制,就會産生盜鍊問題:如果一個網站中沒有其頁面中所說圖檔資訊,那麼它完全可以連結到其他網站的圖檔資訊上。這樣,沒有任何資源的網站利用了别的網站的資源來展示給浏覽者,提高了自己的通路量,而大部分浏覽者又不會很容易地發現。一些不良網站為了不增加成本而擴充自己站點内容,經常盜用其他網站的連結。一方面損害了原網站的合法利益,另一方面又加重了伺服器的負擔。
  • http标準協定中有專門的Referer字段記錄,它的作用如下:
    • 可以追溯上一個入站位址是什麼
    • 對于資源檔案,可以跟蹤到包含顯示它的網頁位址是什麼,是以所有防盜鍊方法都

      是基于這個Referer字段。

2.2.1:配置防盜鍊實驗

  • 再開一台虛拟機,配置好httpd服務
[[email protected] opt]# vi /usr/local/httpd/htdocs/index.html
進入後,把裡面的内容删除,添加新的内容
<html>
<head>
<title>--壓縮測試頁--</title>
</head>
<body>
<h1>這是壓縮頁的内容(女神防盜)</h1>
<img src=http://20.0.0.6/b.jpg / >   ## b.jpg 是圖檔的名稱
</body>
</html>
==>> wq 儲存

           
  • 做主機映射
[[email protected] htdocs]# vi /etc/host   ## 做映射
20.0.0.6       www.51xit.top  ##這裡是添加的  20.0.0.26 是正版網站的IP
==>> wq 儲存

           
  • ping 測試一下,檢視是否可以連通
[[email protected] htdocs]# ping www.51xit.top      ## ping 測試一下
PING www.51xit.com (20.0.0.6) 56(84) bytes of data.
64 bytes from www.51xit.top (20.0.0.6): icmp_seq=1 ttl=64 time=0.918 ms
           
[[email protected] httpd-2.4.29]# vi /usr/local/httpd/conf/httpd.conf 
ServerName www.51xit.top:80  ### 把#号去掉,并改成自己的域名
AddDefaultCharset utf-8      ###  加在上面代碼下面就行,解決中文亂碼!
==>> wq 儲存
[[email protected] htdocs]# systemctl restart httpd
測試一下,打開盜圖網站

           
  • 在防盜伺服器做防盜鍊
安裝mod_rewrite子產品
[[email protected] ~]# systemctl stop httpd  ##先停掉http服務
[[email protected] ~]# vi /etc/httpd.conf 
LoadModule rewrite_module modules/mod_rewrite.so  ### 把#号去掉
######搜尋htdocs,然後在目錄最後添加下面這段代碼#######
RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^http://20.0.0.6/*
    RewriteCond %{HTTP_REFERER} !^http://51xit.top/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://51xit.top$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.51xit.top/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.51xit.top$ [NC]
    RewriteRule .*\.(gif|jpg|swf|png)$ https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=202451072,4165552475&fm=26&gp=0.jpg [R,NC] ## 這裡是圖檔連結
[[email protected] ~]# systemctl restart httpd  ## 最後重新開機 http服務

           
Apache網頁與安全優化(網頁壓縮、網頁緩存、隐藏版本資訊、網頁圖檔防盜鍊)一:Apache網頁優化二:Apache安全優化

繼續閱讀