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

或使用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
- 依賴包安裝





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)







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的其他版本需要先卸載並刪除目錄


-
源碼安裝httpd 2.4
- 創建httpd的系統用戶

- 解壓

- 安裝



- 創建httpd的系統用戶
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控制腳本(手動編寫或修改自帶控制腳本)


#chkconfig: 35 85 21 #設定默認啟動級別3、5,85為啟動優先級 21為關閉優先級,數字越小,優先級越高
#description:wwww #描述信息
- 添加環境變量



export PATH=/usr/local/apache/bin:$PATH
-
自定義啟動deflate和rewrite模塊並修改servername屬性




-
啟動服務並設定開機自啟


也可以使用apachectl命令進行控制 -
測試

-
修改主頁

-
重啟服務

-
測試

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

-
主配置文件配置


-
添加測試網頁

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

-
測試

內置status狀態頁面啟用
- httpd內置的status用於查看當前http服務的狀態,包括啟用的進程數或線程數、響應的進程或線程等,便於分析服務器的進程狀態、負載狀態
- 啟用方法:在Location中進行定義(可以被定義在指定的虛擬主機中)
- 修改模塊配置文件,確保info模塊與status被加載並啟用




- 修改主配置文件/etc/httpd/conf/httpd.conf添加location設置

<location /server-status>
SetHandler server-status
Require ip 192.168.10.1 #允許訪問的主機
</location>
-
重啟服務

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

頁面緩存配置
- 啟用 expires模塊



- 修改主配置文件


- 重啟服務

- 測試
- 未開啟緩存時頭部信息

- 開啟緩存后的響應頭部信息出現緩存相關信息

- 未開啟緩存時頭部信息
防盜鏈配置
- 盜鏈:是指以未經原始web服務器允許,私自超鏈接到原始web站點的方式和行為,通常會盜取對方web服務器中的圖片、文件、視頻等靜態資源。被盜web服務器會承受額外的帶寬壓力,所以需要對服務器配置防盜鏈
- 對某種特定的文件實現refer訪問控制,以rewrite模塊的URL重寫功能來實現
- 查看是否啟用rewrite模塊



- 修改測試主頁

- 將welcome.jpg與error.png存放在網站根目錄下

- 在盜鏈的http服務器(192.168.10.122)上創建主頁如下,模擬盜鏈

- 重啟盜鏈服務器http服務

- 測試盜鏈

- 在被盜鏈的主機(192.168.10.120)設置防盜鏈規則


<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),忽略之后的規則
- 重啟服務

- 再次訪問盜鏈主機,查看防盜鏈效果

- 訪問被盜鏈主機查看是否受到影響

隱藏Apache版本號
- 為提高服務器安全性有時會選擇將軟件的版本號隱藏
- 修改主配置文件


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等等)的頁腳中如何顯示信息
#注設置需要聲明在全局配置中
- 重啟服務

- 測試
- 關閉前響應頭部信息

- 關閉后響應頭部信息

- 關閉前響應頭部信息
虛擬主機配置
-
httpd2.4的虛擬主機配置文件為: /etc/httpd/conf.d/vhost.conf (缺省下不存在)
-
httpd2.4 的虛擬主機不再需要NameVirtualHost 參數開啟
-
創建並修改vhost.conf文件


<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> -
創建指定的站點根目錄,並添加測試主頁

-
重啟服務

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

-
域名訪問測試


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 # #允許,有效用戶

注:匹配順序從上到下,后面的覆蓋前面的規則,要注意<RequireAll> 或<RequireAny>的使用
