HTTPD2.4的安裝與配置詳解


HTTPD2.4的安裝與配置詳解

httpd2.4

  • httpd2.4新特性
    • MPM支持DSO機制
    • 支持event MPM
    • 支持異步讀寫
    • 支持增強版的表達式分析器
    • 支持毫秒級別的keepalive timeout
    • 基於FQDN的虛擬主機不再需要NameVirtualHost指令
    • 支持用戶自定義變量
  • http2.4 新模塊
    • mod_proxy_fcgi:通過代理的方式運行php程序,將對php網頁的請求轉發給代理給后台的程序
    • mod_ratelimit:限制下載速度
    • mod_remoteip:通常情況apache位於前端默認是可以識別真實IP的,但是如果用了CDN等apache位於后端的情況下則只能識別CDN節點服務器的IP而無法識別用戶真實IP,該模板就是用來獲取得到用戶真實IP
  • 默認情況下http2.4配置文件路徑
    • 主配置文件:/etc/httpd/conf/httpd.conf
    • 輔助配置文件:/etc/httpd/conf.d/
    • 模塊文件位置:/usr/lib64/httpd/modules/
    • 模塊配置文件:/etc/httpd/conf.modules.d/
    • 日志文件: /var/log/httpd

httpd2.4在centos6上的源碼安裝

  • 實驗環境
    • httpd2.4 server:Centos6 192.168.10.110
    • client :windows10 192.168.10.1
    • 已關閉防火牆、selinux
  • 所需源碼包下載並上傳至服務端
    Apache download
    image-20191031133837149
    或使用wget下載
wget http://archive.apache.org/dist/apr/apr-1.5.1.tar.gz
wget http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
wget http://archive.apache.org/dist/httpd/httpd-2.4.33.tar.gz
  • 依賴包安裝
    image-20191031133924426
    image-20191031134038809
    image-20191031134122342
    image-20191031140034813
    image-20191031140101015
yum install gcc
yum install gcc-c++
yum install openssl-devel
yum install perl
yum install pcre-devel
  • 源碼安裝依賴包apr與apr-utils(需要1.4及以上版本,centos6默認提供的版本為1.3)
    image-20191031135047657
    image-20191031135100874
    image-20191031135407362
    image-20191031135213460
    image-20191031135242940
    image-20191031135505891
    image-20191031135715311
cd apr-1.5.2
./configure --prefix=/usr/local/apr
make && make install
cd ../apr-util-1.5.3
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install

  • 若之前安裝過httpd的其他版本需要先卸載並刪除目錄
    image-20191031140317908
    image-20191031140411690

  • 源碼安裝httpd 2.4

    • 創建httpd的系統用戶
      image-20191031140758612
    • 解壓
      image-20191031141035998
    • 安裝
      image-20191031141058822
      image-20191031141924951
      image-20191031142015313
 cd httpd-2.4.10
./configure --prefix=/usr/local/apache --sysconf=/etc/httpd2.4 --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
make && make install
  • 生成httpd控制腳本(手動編寫或修改自帶控制腳本)
    image-20191031142652950
    image-20191031142854142
#chkconfig: 35 85 21 #設定默認啟動級別3、5,85為啟動優先級 21為關閉優先級,數字越小,優先級越高
#description:wwww #描述信息 
  • 添加環境變量
    image-20191031143029560
    image-20191031143157535
    image-20191031143231421
export PATH=/usr/local/apache/bin:$PATH
  • 自定義啟動deflate和rewrite模塊並修改servername屬性
    image-20191031143424176
    image-20191031143540405
    image-20191031143621572
    image-20191031143817850

  • 啟動服務並設定開機自啟
    image-20191031143907790
    image-20191031144424744
    也可以使用apachectl命令進行控制

  • 測試
    image-20191031154216881

  • 修改主頁
    image-20191031154335292

  • 重啟服務
    image-20191031154408222

  • 測試
    image-20191031154427343

Centos7安裝配置httpd

  • 實驗環境

    • httpd2.4 server:Centos7 192.168.10.120
    • client :windows10 192.168.10.1
    • 已關閉防火牆、selinux
  • 安裝httpd,centos7.6默認提供httpd2.4(使用yum安裝,需要確保yum配置正確)

    image-20191031154801182

  • 主配置文件配置

    image-20191031155048976

    image-20191031155012361

  • 添加測試網頁

    image-20191031155247881

  • 啟動服務並設置開機啟動

    image-20191031155347133

  • 測試

    image-20191031155528577

內置status狀態頁面啟用

  • httpd內置的status用於查看當前http服務的狀態,包括啟用的進程數或線程數、響應的進程或線程等,便於分析服務器的進程狀態、負載狀態
  • 啟用方法:在Location中進行定義(可以被定義在指定的虛擬主機中)
  • 修改模塊配置文件,確保info模塊與status被加載並啟用
    image-20191031160122336
    image-20191031160017757
    image-20191031160100469
    image-20191031160201387
  • 修改主配置文件/etc/httpd/conf/httpd.conf添加location設置
    image-20191031162938312
<location /server-status>
    SetHandler server-status
    Require ip 192.168.10.1 #允許訪問的主機
</location>
  • 重啟服務
    image-20191031161656969

  • 測試(網站地址后添加 server-status訪問status頁面,還可以指定刷新時間(秒)?refresh=5 )
    image-20191031163024473

頁面緩存配置

  • 啟用 expires模塊
    image-20191031162425634
    image-20191031162415419
    image-20191031162510717
  • 修改主配置文件
    image-20191031163607398
    image-20191031163556264
  • 重啟服務
    image-20191031163631109
  • 測試
    • 未開啟緩存時頭部信息
      image-20191031164349544
    • 開啟緩存后的響應頭部信息出現緩存相關信息
      image-20191031164229822

防盜鏈配置

  • 盜鏈:是指以未經原始web服務器允許,私自超鏈接到原始web站點的方式和行為,通常會盜取對方web服務器中的圖片、文件、視頻等靜態資源。被盜web服務器會承受額外的帶寬壓力,所以需要對服務器配置防盜鏈
  • 對某種特定的文件實現refer訪問控制,以rewrite模塊的URL重寫功能來實現
  • 查看是否啟用rewrite模塊
    image-20191031185923490
    image-20191031185903409
    image-20191031185955515
  • 修改測試主頁
    image-20191031164827299
  • 將welcome.jpg與error.png存放在網站根目錄下
    image-20191031165942778
  • 在盜鏈的http服務器(192.168.10.122)上創建主頁如下,模擬盜鏈
    image-20191031170114985
  • 重啟盜鏈服務器http服務
    image-20191031170300423
  • 測試盜鏈
    image-20191031170229118
  • 在被盜鏈的主機(192.168.10.120)設置防盜鏈規則
    image-20191031170816834
    image-20191031170831907
<Directory "/var/www/html"> 
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    RewriteEngine On #啟用rewrite
    RewriteCond %{HTTP_REFERER} !^http://192.168.10.120/.*$  #匹配所有非直接訪問本機的請求
    RewriteCond %{HTTP_REFERER} !^http://192.168.10.120/*$
    RewriteRule .*\.(gif|swf|jpg)$ http://192.168.10.120/error.png [R,NC] #對匹配到的請求進行重定向,返回指定頁面或資
</Directory> 
    #返回的資源類型不能與匹配項相同,否則會陷入循環
    #RewriteCond 匹配條件
    #RewriteRule 重寫規則
    #%{HTTP_REFERER} 引導用戶代理到當前頁的前一頁的地址,即用戶瀏覽器直接輸入的訪問地址
    #[NC]指的是不區分大小寫,[R]強制重定向redirect
    #[L]表示如果能匹配本條規則,那么本條規則是最后一條(Last),忽略之后的規則

  • 重啟服務
    image-20191031171837579
  • 再次訪問盜鏈主機,查看防盜鏈效果
    image-20191031185629919
  • 訪問被盜鏈主機查看是否受到影響
    image-20191031172051998

隱藏Apache版本號

  • 為提高服務器安全性有時會選擇將軟件的版本號隱藏
  • 修改主配置文件
    image-20191031190632162
    image-20191031190552737
ServerTokens Prod #返回的頭部信息中版本信息
ServerSignature Off
#ServerTokens Major|Minor|Minimal|ProductOnly|OS|Full
	#Prod[uctOnly] 只顯示服務名-->Server:Apache
	#Major 服務/主版本號  Server:Apache/2
	#Minor 服務/主版本號.次版本號  Server:Apache/2.4
	#Min[imal] 服務/主版本號.次版本號.末版本號  Server:Apache/2.4.6
	#Min[imal] 服務/主版本號.次版本號.末版本號(系統類型)  Server:Apache/2.4.6(CentOS)
	#Full 顯示全部相關信息
#ServerSignature 控制由系統生成的頁面(錯誤信息,mod_proxy ftp directory listing等等)的頁腳中如何顯示信息
#注設置需要聲明在全局配置中
  • 重啟服務
    image-20191031190818969
  • 測試
    • 關閉前響應頭部信息
      image-20191031190859775
    • 關閉后響應頭部信息
      image-20191031190946657

虛擬主機配置

  • httpd2.4的虛擬主機配置文件為: /etc/httpd/conf.d/vhost.conf (缺省下不存在)

  • httpd2.4 的虛擬主機不再需要NameVirtualHost 參數開啟

  • 創建並修改vhost.conf文件
    image-20191031193839147
    image-20191031193821727

    <VirtualHost 192.168.10.120:80> #指定虛擬主機
        ServerAdmin root@web1.lg.com #管理郵箱地址
        DocumentRoot /www/docs/web1 #站點根目錄
        <Directory "/www/docs/web1"> #權限控制
            AllowOverride None #是否允許權限覆蓋
            Options Indexes #使用的選項參數 Indexs若無匹配的主頁則列表顯示站點目錄內容
            Require all granted #允許全部
        </Directory>
        ServerName web1.lg.com #站點域名
        ErrorLog logs/web1-error_log #錯誤日志存放位置及名稱
        CustomLog logs/web1-access_log common #訪問日志存放位置及名稱common為設定的別名
    </VirtualHost>
    
    <VirtualHost 192.168.10.120:80>
        ServerAdmin admin@web2.lg.com
        DocumentRoot /www/docs/web2
        <Directory "/www/docs/web2">
            AllowOverride None
            Options Indexes
            Require all granted
        </Directory>
        ServerName web2.lg.com
        ErrorLog logs/web2-error_log
        CustomLog logs/web2-access_log common
    </VirtualHost>
    
  • 創建指定的站點根目錄,並添加測試主頁
    image-20191031194130390

  • 重啟服務
    image-20191031194153505

  • win客戶機修改hosts(C:\Windows\System32\drivers\etc\hosts),添加主機映射
    image-20191031194441386

  • 域名訪問測試
    image-20191031194513765
    image-20191031194528757

httpd2.4訪問控制

  • 訪問控制Require相關選項放置在<RequireAll> 或<RequireAny>容器中,也可出現在Directory容器中(這時可以不要標簽對),也可以出現在其他標簽中(Directory、Location等或配置文件 .htaccess 中)
  • Require all granted 允許所有的訪問,使用容器<RequireAll>
  • Require all denied 拒絕所有訪問,使用容器<RequireAny>
  • Require ip x.x.x.x 指定IP或網段可以訪問,多個ip或網段使用空格分割(網段省略主機位如 192.168.10)
  • Require not ip x.x.x.x 指定IP或網段不可以訪問,多個ip或網段使用空格分割(網段省略主機位如 192.168.10)
  • Require host HOSTNAME (包括DOMAIN),多個主機名使用空格分割
  • Require not host HOSTNAME (包括DOMAIN),多個主機名使用空格分割
  • Require env env-var [env-var] ... #允許,匹配環境變量中任意一個
  • Require method http-method [http-method] ... #允許 ,特定的HTTP方法
  • Require expr expression #允許,表達式為true
  • Require user userid [ userid ] ... #允許,特定用戶
  • Require group group-name [group-name] ... #允許,特定用戶組
  • Require valid-user # #允許,有效用戶
    image-20191031212718942
    注:匹配順序從上到下,后面的覆蓋前面的規則,要注意<RequireAll> 或<RequireAny>的使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM