Apache搭建與相關設定優化(內含存取控制,日誌分割,分析,web虛擬主機)

2020-08-12 11:50:54

前言

  • Apache HTTP Server 之所以受到衆多企業的青睞,得益於其程式碼開源,跨平臺,功能模組化,可靈活定製等諸多優點,其不僅效能穩定,在安全性方面的表現也十分出色

一:Apache設定詳解

1.1:Apache連線保持

1.1.1:爲什麼要保持連線

  • HTTP協定是基於TCP協定之上的,在進行HTTP連線之前,要先進行TCP連線,每個TCP連線都要進行三次握手與四次揮手。建立與關閉連線對於HTTP協定而言會消耗很多的記憶體與CPU資源。
  • 解決辦法是HTTP連線保持。就是儘量地保持用戶端的連線,通過一個TCP連線傳送多個HTTP請求響應,對於用戶端可以提高50%以上的響應時間,對於伺服器可以降低建立與關閉連線時的資源消耗。

1.1.2:保持連線的方式

Apache連線保持相關參數

  • KeepAlive
    • 是否開啓連線保持,OFF關閉,ON開啓
  • KeepAliveTimeout
    • 一次連線多次請求之間的最大間隔時間,兩次請求超過該時間連線斷開
  • MaxKeepAliveRequests
    • 一次連線能夠傳輸的最大請求數量

1.2:Apache存取控制

1.2.1:Apache存取控制概述

  • 作用
    • 控制對網站資源的存取
    • 爲特定的網站目錄新增存取授權
  • 常用存取控制方式
    • 客戶機地址限制
    • 使用者授許可權制

1.2.2:基於用戶端地址的存取控制

  • 使用Require設定項實現存取控制,按先後順序限制

  • 可用,,,設定段中

  • Require設定項的常見語法

Require all granted
Require all denied
Require local
Require [not] host <主機名或域名列表>
Require [not] ip <IP地址或網段列表>
'//使用not禁止存取時要將其置於<RequireAll></RequireAll>容器中,並在容器中指定相對應的限制策略'
  • 舉例
[root@localhost ~]# cd /etc/httpd/conf
[root@localhost conf]# ls
httpd.conf  magic
[root@localhost conf]# mkdir abc
[root@localhost conf]# ls
abc  httpd.conf  magic
[root@localhost conf]# cd abc

[root@localhost abc]# vim vhost.conf
<VirtualHost *:80>
 ...省略內容
  <Directory "/var/www/html">
  Require not ip 192.168.100.100	'//表示不允許ip192.168.100.100存取'
  Require all granted
  </Directory>
</VirtualHost>
...省略內容

1.2.3:使用者授許可權制–建立使用者認證數據庫

  • 建立使用者認證數據庫
命令基本格式
'//htpasswd命令是httpd自帶的'
htpasswd -c /etc/httpd/conf/abc webadmin '//爲使用者webadmin建立密碼檔案'
New password:'//輸入密碼'
Re-type new password:'//重複輸入密碼'
cat  /etc/httpd/conf/abc
webadmin:加密密碼

舉例

[root@localhost abc]# htpasswd -c /etc/httpd/conf/aaa ddd
New password: 
Re-type new password: 
Adding password for user ddd
[root@localhost abc]# cat /etc/httpd/conf/aaa
ddd:$apr1$zwIklPGy$ZINaIkXsSq36oIk2lAiiJ1
    '//新增第二個使用者'
[root@localhost abc]# htpasswd /etc/httpd/conf/aaa bbb
New password: 
Re-type new password: 
Adding password for user bbb
[root@localhost abc]# cat /etc/httpd/conf/aaa
ddd:$apr1$zwIklPGy$ZINaIkXsSq36oIk2lAiiJ1
bbb:$apr1$q7OdS8z1$ELGg2a1AhHP.QfXJXfQTQ1

1.2.4:使用者授許可權制–新增使用者授權設定

'//設定基本格式'

  <Directory "/var/www/html">
  AuthName "DocumentRoot"  '//受保護的領域名稱'
  AuthType Basic		'//認證型別'
  AuthUserFile /etc/httpd/conf/qwe  '//使用者認證賬號檔案'
  Require valid-user  '//要求通過認證才能 纔能存取'
  </Directory>

舉例

[root@localhost abc]# vim vhost.conf 
    ...省略內容
<VirtualHost 192.168.197.100:80>
  DocumentRoot "/var/www/html/ccc"
  ServerName www.ccc.com
  Errorlog "logs/www.ccc.com.error_log"
  Customlog "logs/www.ccc.com.custom_log" common
  <Directory "/var/www/html">
  AuthName "DocumentRoot"
  AuthType Basic
  AuthUserFile /etc/httpd/conf/aaa
  Require valid-user
  </Directory>
</VirtualHost>
...省略內容
    

二:Apache日誌管理

2.1:日誌分割

  • 隨着網站的存取量增大,預設情況下Apache的單個日誌檔案也會越來越大
    • 日誌檔案佔用磁碟空間很大
    • 檢視相關資訊不方便
  • 對日誌檔案進行分割
    • Apache自帶rotatelogs分割工具實現
    • 第三方工具cronolog分割

2.2:rotatelogs分割工具

  • 設定網站的日誌檔案轉交給rotatelogs分割處理

  • 設定格式爲

ErrorLog "| rotatelogs 命令的絕對路徑 -l 日誌檔案路徑/網站名-error_%Y%m%d.log 86400"	'//which rotatelogs命令檢視絕對路徑,%Y%m%d表示年月日,86400表示一天的秒數'
CustomLog "| rotatelogs 命令的絕對路徑 -l 日誌檔案路徑/網站名-access_%Y%m%d.log 86400" combined 
例如
[root@localhost logs]vim /etc/httpd/conf/httpd.conf
ErrorLog "| /usr/sbin/rotatelogs -l logs/error_%Y%m%d.log 86400"
CustomLog "| /usr/sbin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined 

2.2.1:日誌檔案的產生

  • 服務安裝後,不會生成日誌檔案不會產生
  • 服務啓動後,生成日誌檔案
  • 存取服務後,日誌檔案會生成內容

2.3:AWStats日誌分析

2.3.1:AWStats概述

  • perl語言(駱駝語言)開發的一款開源日誌分析系統
  • 可用來分析Apache,Samba,vsftpd,IIS等伺服器的存取日誌
  • 資訊結合crond等計劃任務服務,可對日誌內容定期進行分析

2.3.2:部署AWStats環境準備

  • 環境部署

VMware軟體

一臺centos7虛擬機器

一臺Windows虛擬機器

  • 環境準備

WindowsDNS解析地址指向centos7

centos7安裝bind和httpd

2.3.3:部署AWStats過程

  • 設定dns服務
[root@localhost opt]# vim /etc/named.conf 
options {
        listen-on port 53 { any; };	'//修改成any'
        ...省略內容
        allow-query     { any; };	'//修改成any'
[root@localhost ~]# vim /etc/named.rfc1912.zones 
zone "dabao.com" IN {
        type master;
        file "dabao.com.zone";
        allow-update { none; };
};
[root@localhost ~]# cd /var/named/
[root@localhost named]# cp -p named.localhost dabao.com.zone
[root@localhost named]# vim dabao.com.zone 
'//尾行修改爲下面 下麪內容'
www IN  A       192.168.197.143
[root@localhost named]# systemctl start named
  • 設定httpd
[root@localhost named]# vim /etc/httpd/conf/httpd.conf 
    '//修改此兩行內容'
Listen 192.168.197.143:80
#Listen 80
    '//修改爲指定域名'
ServerName www.dabao.com:80
[root@localhost named]# systemctl stop firewalld.service 
[root@localhost named]# setenforce 0
[root@localhost named]# systemctl start httpd.service 
  • 安裝AWStats
[root@localhost ~]# mount.cifs //192.168.100.3/ccc /opt
Password for root@//192.168.100.3/ccc: 
[root@localhost ~]# df -h
[root@localhost ~]# cd /opt
[root@localhost opt]# tar zxvf awstats-7.6.tar.gz -C /mnt
[root@localhost opt]# cd /mnt
[root@localhost mnt]# ls
awstats-7.6
[root@localhost mnt]# mv awstats-7.6/ /usr/local/awstats
[root@localhost mnt]# ls
[root@localhost mnt]# cd /usr/local
[root@localhost local]# ls
awstats  bin  etc  games  include  lib  lib64  libexec  sbin  share  src
[root@localhost local]# cd awstats/
[root@localhost awstats]# ls
docs  README.md  tools  wwwroot
[root@localhost awstats]# cd tools/
[root@localhost tools]# ls
[root@localhost tools]# ./awstats_configure.pl 
> /etc/httpd/conf/httpd.conf	'//第一次互動輸入此路徑'
y	'//第二次互動輸入y'
www.dabao.com	'//第三次互動輸入指定域名'
'//第四五六次互動直接回車'
[root@localhost tools]# cd /etc/httpd/conf
[root@localhost conf]# vim httpd.conf   
    '//省略內容,直接到檔案末尾修改此設定'
<Directory "/usr/local/awstats/wwwroot">
    Options None
    AllowOverride None
#    Order allow,deny
#    Allow from all
    Require all granted
</Directory>
[root@localhost conf]# cd /etc/awstats/
[root@localhost awstats]# ls
awstats.www.dabao.com.conf
[root@localhost awstats]# vim awstats.www.dabao.com.conf 
...省略內容
    '//將下面 下麪兩行內容修改'
LogFile="/var/log/httpd/access_log"
   ...省略內容
DirData="/var/lib/awstats"
[root@localhost awstats]# cd /var/lib
[root@localhost lib]# ls
[root@localhost lib]# mkdir awstats
[root@localhost lib]# systemctl restart httpd.service 
  • 嘗試存取awstats網頁

    使用剛剛互動生成的網址存取,將其中的localhost修改爲指定域名

在这里插入图片描述
在这里插入图片描述

  • 更新網頁存取數據的統計
[root@localhost lib]# cd /usr/local/awstats/
[root@localhost awstats]# ls
docs  README.md  tools  wwwroot
[root@localhost awstats]# cd tools/
[root@localhost tools]# ls
...省略內容
[root@localhost tools]# ./awstats_updateall.pl now
...省略內容
  • 再次存取網站,數據統計成功

在这里插入图片描述

2.3.4:設定週期性任務

[root@localhost tools]# crontab -e
'//新增一下內容'
*/3 * * * *     /usr/local/awstats/tools/awstats_updateall.pl now
[root@localhost tools]# systemctl start crond
You have new mail in /var/spool/mail/root
[root@localhost tools]# cd /var/www/html
[root@localhost html]# vim aws.html
<html>
 <head>
   <meta http-equiv=refresh content="0;url=http://www.dabao.com/awstats/awstats.pl?config=www.dabao.com">
 </head>
 <body></body>
</html>
  • 此時可以直接使用www.dabao.com/aws.html存取網頁
    在这里插入图片描述

三:Apache虛擬主機

3.1:虛擬web主機概述

  • 在同一臺伺服器中執行多個web站點,其中每一個站點並不獨立佔用一臺真正的計算機
  • 通過虛擬web主機可以充分利用伺服器的硬體資源,從而大大降低網站構建及執行成本
  • 使用httpd可以非常方便的構建虛擬主機伺服器,只需要執行一個httpd服務就能夠同時支撐大量的web站點

3.2:httpd支援的虛擬主機型別

  • 基於域名
    • 爲每個虛擬主機使用不同的域名,但是其對應的IP地址使相同的
    • 域名不同–IP相同,埠相同
    • 基於域名是最爲普遍的虛擬web主機型別
  • 基於IP地址
    • 爲每個虛擬主機使用不同的域名,且各自對應的IP地址也不相同
    • 這種方式需要爲伺服器配備多個網路介面,因此應用不是很廣泛
    • IP不同,埠相同
  • 基於埠
    • 這種方式並不使用域名,IP地址來區分不同的站點內容,而是使用不同的 TCP埠號
    • 因此使用者在瀏覽不同的虛擬站點時需要同時制定埠號才能 纔能存取
    • IP相同,埠不同

3.2.1:新增虛擬主機設定格式

[root@localhost ~]# vim /etc/http/conf/xxx/vhost.conf
 1 <VirtualHost *:80>	'//針對本伺服器所有IP地址'
  2   DocumentRoot "/var/www/html/xxx"	'//指定站點目錄'
  3   ServerName www.xxx.com	'//指定域名'
  4   Errorlog "logs/www.xxx.com.error_log"	'//指定錯誤日誌路徑'
  5   Customlog "logs/www.xxx.com.custom_log" common	'//指定存取日誌路徑'
  6   <Directory> "/var/www/html">
  7         Require all granted		'//設定網頁允許所有主機存取,也可以通過denied設定拒絕存取'
  8   </Directory>
  9 </VirtualHost>

3.3:生產環境中虛擬主機概述

  • 生產環境中,伺服器不止兩臺

  • 每台伺服器都有虛擬主機對應各自的網站

  • 通過排程伺服器調取伺服器中的網站資源
    在这里插入图片描述

3.4:構建虛擬主機–基於域名範例演示

3.4.1:環境準備

  • VMware軟體

  • 一臺Windows虛擬機器,IP地址爲192.168.197.133

  • 一臺centos7虛擬機器,IP地址爲192.168.197.141

  • centos7安裝bind和httpd服務

[root@localhost ~]# yum install bind httpd -y
    

3.4.2:範例演示目的

  • 在Windows虛擬機器瀏覽器中存取這兩個域名時,分別顯示不同的內容

3.4.3:爲虛擬主機提供域名解析

  • 關閉防火牆,編輯主組態檔
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/named.conf 
...省略內容
    options {
        listen-on port 53 { any; };	'//修改爲any'
        listen-on-v6 port 53 { ::1; };
        ...省略內容
        allow-query     { any; };	'//修改爲any'
...省略內容
  • 編輯區域組態檔
[root@localhost ~]# vim /etc/named.rfc1912.zones 
'//新增一下兩端內容'
    ...省略內容
zone "dabao.com" IN {
        type master;
        file "dabao.com.zone";
        allow-update { none; };
};

zone "erbao.com" IN {
        type master;
        file "erbao.com.zone";
        allow-update { none; };
};
...省略內容
  • 編輯區域數據檔案
[root@localhost ~]# cd /var/named/
[root@localhost named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@localhost named]# cp -p named.localhost dabao.com.zone
[root@localhost named]# vim dabao.com.zone 
...省略內容
    '//末尾新增內容'
www IN  A       192.168.197.141
[root@localhost named]# cp -p dabao.com.zone erbao.com.zone
  • 開啓服務並測試
[root@localhost named]# systemctl start named

在这里插入图片描述
在这里插入图片描述

3.4.4:設定httpd服務

  • 建立站點,並新增虛擬主機設定
[root@localhost named]# cd /etc/httpd/conf
[root@localhost conf]# ls
httpd.conf  magic
[root@localhost conf]# mkdir baobao
[root@localhost conf]# ls
baobao  httpd.conf  magic
[root@localhost conf]# cd baobao
[root@localhost baobao]# ls
[root@localhost baobao]# vim vhost.conf
 1 <VirtualHost *:80>
  2   DocumentRoot "/var/www/html/dabao"
  3   ServerName www.dabao.com
  4   Errorlog "logs/www.dabao.com.error_log"
  5   Customlog "logs/www.dabao.com.custom_log" common
  6   <Directory> "/var/www/html">
  7         Require all granted
  8   </Directory>
  9 </VirtualHost>
 10 
 11 <VirtualHost *:80>
 12   DocumentRoot "/var/www/html/erbao"
 13   ServerName www.erbao.com
 14   Errorlog "logs/www.erbao.com.error_log"
 15   Customlog "logs/www.erbao.com.custom_log" common
 16   <Directory> "/var/www/html">
 17         Require all granted
 18   </Directory>
 19 </VirtualHost>
  • 編輯虛擬機器網頁文件
[root@localhost baobao]# cd /var/www/html/
[root@localhost html]# ls
[root@localhost html]# mkdir dabao erbao
[root@localhost html]# ls
dabao  erbao
[root@localhost html]# echo "this is dabao" > dabao/index.html
[root@localhost html]# echo "this is erbao" > erbao/index.html
[root@localhost html]# yum install tree
[root@localhost html]# tree /var/www/html/
/var/www/html/
├── dabao
│   └── index.html
└── erbao
    └── index.html

2 directories, 2 files
  • 編輯httpd主組態檔,新增虛擬主機站點
[root@localhost html]# vim /etc/httpd/conf/httpd.conf 
'//找到此行'
IncludeOptional conf.d/*.conf
Include conf/baobao/vhost.conf	'//新增此行內容'
  • 開啓httpd服務,並測試
[root@localhost html]# systemctl start httpd

在这里插入图片描述
在这里插入图片描述

3.5:構建虛擬主機–基於埠範例演示

3.5.1:環境準備

  • 環境繼承上一個範例的環境

3.5.2:範例演示目的

  • 在瀏覽器中存取不同埠,顯示不同內容

3.5.3:設定httpd服務

  • 設定虛擬主機設定
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# systemctl start httpd
[root@localhost html]# cd /etc/httpd/conf
[root@localhost conf]# ls
baobao  httpd.conf  magic
[root@localhost conf]# cd baobao
[root@localhost baobao]# ls
vhost.conf
[root@localhost baobao]# vim vhost.conf 
    '//在第二個主機設定後新增80'
<VirtualHost *:8080>	'//多寫一個80'
  
  • 設定監聽地址
[root@localhost baobao]# vim /etc/httpd/conf/httpd.conf 
Listen 192.168.197.141:80
Listen 192.168.197.141:8080		'//找到監聽地址,開啓IPv4監聽,設定監聽地址,新增一個8080埠的監聽地址'
#Listen 80	'//關閉IPv6監聽'
  • 重新啓動服務,驗證
 [root@localhost baobao]# systemctl restart httpd.service 

在这里插入图片描述
在这里插入图片描述

3.6:構建虛擬主機–基於不同IP範例演示

3.6.1:環境準備

  • 繼承以上實驗環境
  • centos虛擬主機新增一張網絡卡

在这里插入图片描述

  • 通過ifconfig檢視得知第二張網絡卡IP地址爲192.168.197.180

3.6.2:範例目的

  • 在瀏覽器存取兩個IP時,分別顯示不同的內容

3.6.3:設定httpd服務

  • 虛擬主機設定
[root@localhost baobao]# vim vhost.conf 
<VirtualHost 192.168.197.141:80>	'//將*修改爲第一張網絡卡IP地址'
<VirtualHost 192.168.197.180:80>	'//將*修改爲第二張網絡卡IP地址'
    '//將他們的域名都註釋掉'
  • 設定監聽地址
[root@localhost baobao]# vim /etc/httpd/conf/httpd.conf 
...省略內容
Listen 192.168.197.141:80
Listen 192.168.197.180:80
#Listen 80
...省略內容
  • 重新啓動服務,驗證
[root@localhost baobao]# systemctl restart httpd

在这里插入图片描述
在这里插入图片描述