Linux環境下搭建Apache伺服器(完整版)
Linux下搭建Apache伺服器(完整版)
什麼是Apache?
Apache Licence是著名的非盈利開源組織Apache採用的協議。該協議和BSD類似,同樣鼓勵程式碼共享和尊重原作者的著作權,同樣允許程式碼修改,再發布(作為開源或商業軟體)。需要滿足的條件也和BSD類似
Apache主要特點
1、開放原始碼、跨平臺應用
2、支援多種網頁程式語言
3、模組化設計 、執行穩定、良好的安全性
Apache軟體版本
1.X
1、目前最高版本是1.3,執行穩定
2、向下相容性較好,但缺乏一些較新的功能
2.X
1、目前主要包括2.0和2.2兩個版本
2、具有更多的功能特性
3、與1.X相比,配置管理風格存在較大差異
Apache編譯安裝的優點
1、具有較大的自由度,功能可定製
2、可及時獲得最新的軟體版本
3、普遍適用於大多數Linux版本,便於移植使用
一:實驗要求
1:學會編譯安裝httpd伺服器
2:熟悉httpd服務的部署過程及常見配置
3:學會構建AWStats日誌分析系統
4:httpd服務的訪問控制
客戶機的地址限制
使用者授權限制
5:構建虛擬WEB主機
基於域名的虛擬主機
基於IP地址、埠的虛擬主機
二:實驗環境
1:需要的軟體包
apr-1.5.2.tar.gz
apr-util-1.5.4.tar.gz
httpd-2.4.25.tar.gz
2:搭建伺服器的環境
RHEL6.5版本
IP地址:192.168.1.63 255.255.255.0
配置好yum倉庫
三:實驗程式碼
第一塊:搭建apache伺服器
主要目錄和檔案:
服務目錄:/usr/local/httpd/
主配置檔案:/usr/local/httpd/conf/httpd.conf
網頁目錄:/usr/local/httpd/htdocs/
服務指令碼:/usr/local/httpd/bin/apachectl
執行程式:/usr/local/httpd/bin/httpd
訪問日誌: /usr/local/httpd/log/access_log
錯誤日誌: /usr/local/httpd/log/error_log
第1步:解除安裝httpd軟體及相關軟體包
[[email protected] ~]# rpm -e httpd httpd-manual webalizer subversion mod_python mod_ssl mod_perl system-config-httpd php php-cli php-ldap php-common mysql dovecot --nodeps
註釋:--nodeps是強制接觸依賴關係
第2步:檢查手工編譯需要的4中軟體包是否安裝
[[email protected] ~]# rpm -q gcc
gcc-4.4.7-4.el6.x86_64
[[email protected] ~]# rpm -q gcc-c++
gcc-c++-4.4.7-4.el6.x86_64
[[email protected] ~]# rpm -q make
make-3.81-20.el6.x86_64
[[email protected] ~]# yum install pcre-devel -y
第3步:解壓軟體包
[[email protected] ~]# tar zxvf httpd-2.4.25.tar.gz -C /opt/
[[email protected] ~]# tar -zxvf apr-1.5.2.tar.gz -C /opt/
[[email protected] ~]# tar -zxvf apr-util-1.5.4.tar.gz -C /opt/
[[email protected] opt]# cp -r apr-1.5.2/ httpd-2.4.25/srclib/apr
[[email protected] opt]# cp -r apr-util-1.5.4/ httpd-2.4.25/srclib/apr-util
註釋:解壓後複製到httpd的srclib解壓目錄中(不帶版本號)
第4步:原始碼編譯安裝Apache
[[email protected] ~]# cd /opt/httpd-2.4.25/
[[email protected] httpd-2.4.25]# ./configure \ #原始碼
--prefix=/usr/local/apache \
--enable-so \
--enable-rewrite \
--enable-mods-shared=most \
--with-mpm=worker \
--disable-cgid \
--disable-cgi
[[email protected] httpd-2.4.25]# echo $?
0
[[email protected] httpd-2.4.25]# make -j 4 #編譯,將編譯程式變為可執行程式
[[email protected] httpd-2.4.25]# make install #安裝
引數解釋:
--prefix= //來指定安裝路徑
--enable-so //該引數表示支援用mod_so模組提供的功能,用LoadModule在httpd.conf檔案或包含的conf檔案中動態載入某個模組。讓 Apache 可以支援DSO模式
--enable-rewrite //支援 URL 重寫
--enable-mods-shared=most //選項:告訴編譯器將所有標準模組都動態編譯為DSO模組。
--with-mpm=worker // 讓apache以worker方式執行
--with-mpm=worker //該引數是配置apache將以何種模式編譯的。Apache網站文件指出不同作業系統下的不同的預設模式.
--disable-cgid //禁止用一個外部 CGI 守護程序執行CGI指令碼
--disable-cgi //禁止編譯 CGI 版本的 PHP
第5步:命令連結到PATH變數並且管理service
[[email protected] httpd-2.4.25]# ls /usr/local/apache/bin/apachectl #檢查apachectl命令
/usr/local/apache/bin/apachectl
[[email protected] httpd-2.4.25]# echo $PATH #檢視PATH變數
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin
註釋:Linux系統中所有的命令都是放在PATH變數中的,可以放在/usr/local//sbin或者/usr/local/bin下。
[[email protected] httpd-2.4.25]# ln -s /usr/local/apache/bin/* /usr/local/bin/
[[email protected] httpd-2.4.25]# ls -l /usr/local/bin/apachectl /usr/local/bin/httpd
lrwxrwxrwx 1 root root 31 3月 9 17:32 /usr/local/bin/apachectl -> /usr/local/apache/bin/apachectl
lrwxrwxrwx 1 root root 27 3月 9 17:32 /usr/local/bin/httpd -> /usr/local/apache/bin/httpd
註釋:優化路徑,將/usr/local/apache/bin/下的所有命令內容連結到PATH變數中的路徑下。
只有將命令連結到PATH變數的路徑中,命令才可以被使用。
[[email protected] httpd-2.4.25]# grep -v "#" /usr/local/apache/bin/apachectl > /etc/init.d/httpd
[[email protected] httpd-2.4.25]# vim /etc/init.d/httpd
#!/bin/sh
# chkconfig: 2345 85 15
# description: Apache is a World Wide Web server.
[[email protected] httpd-2.4.25]# chmod +x /etc/init.d/httpd
[[email protected] httpd-2.4.25]# chkconfig --add httpd
[[email protected] httpd-2.4.25]# chkconfig --list httpd
httpd 0:關閉1:關閉2:關閉3:關閉4:關閉5:關閉6:關閉
註釋:使程式可以使用service 管理,"service管理的命令都在/etc/init.d/這個目錄下的"。
如果是rpm命令安裝的軟體包就不需要使用service命令管理,可以直接執行service命令,
但是手工原始碼編譯的軟體包,程式就不可以直接執行service命令。
第6步:將配置檔案連結到/etc下
[[email protected] httpd-2.4.25]# ln -s /usr/local/apache/conf/httpd.conf /etc/httpd.conf
[[email protected] httpd-2.4.25]# vim /etc/httpd.conf
ServerName www.example.com:80
[[email protected] httpd-2.4.25]# service httpd start #啟動服務沒有效果
[[email protected] httpd-2.4.25]# netstat -anutp | grep http #監聽http服務
tcp 0 0 :::80 :::* LISTEN 32974/httpd
第7步:物理機驗證http服務
[[email protected] httpd-2.4.25]# service iptables stop #關閉防火牆
[[email protected] httpd-2.4.25]# cd /usr/local/apache/ #
[[email protected] apache]# cat htdocs/index.html
<html><body><h1>It works!</h1></body></html>
註釋:在/usr/local/apache/htdocs/下存放著apache服務自帶的index。Html網頁,用於驗證,次服務是否啟動成功,在此目錄下,可以建立更多的網頁檔案。
[[email protected] htdocs]# vim a.html 建立一個新的網頁
<html>
<body>
<h1>This is my first homepage!!!!------mobanche !</h1>
<h2>--------Welcome my homepage----------</h2>
</body>
</html>
第二塊:Httpd服務訪問控制
作用:
控制對網站資源的訪問
為特定的網站目錄新增訪問授權
常用訪問控制方式:
客戶機地址限制
使用者授權限制
第1步:共享虛擬目錄
[[email protected] ~]# vim /etc/httpd.conf
Include conf.d/*.conf #在主配置檔案末尾增加。
註釋:httpd.conf是apache伺服器的主配置檔案,由於內容過多,不易檢視,因此初見一個子主配置檔案,當主配置檔案讀完之後就開始讀子主配置檔案,所以直接在子配置檔案中修改配置檔案。
[[email protected] ~]# cd /usr/local/apache/ #切換至服務目錄
[[email protected] apache]# mkdir conf.d #建立子主配置檔案目錄
[[email protected] apache]# cd conf.d/
[[email protected] conf.d]# vim vdir.conf #建立子主配置檔案
Alias /doc/ "/usr/share/doc/" #定義虛擬目錄doc,物理共享路徑在/usr/share/doc/
<Directory "/usr/share/doc"> #定義這個目錄的許可權如下內容
Options Indexes MultiViews FollowSymLinks #固定模式
AllowOverride None #固定的不允許重寫
Order allow,deny #先允許,後拒絕
Allow from all #允許從任何客戶機訪問
Require all granted #對這個目錄給予授權,這是6.0手動編譯安裝的apache時,定義被訪問目錄的許可權
</Directory>
[[email protected] conf.d]# service httpd restart
第2步:共享目錄授權訪問
[[email protected] conf.d]# vim vdir.conf #修改子主配置檔案
Alias /man/ "/usr/share/man/" #共享出去的目錄和共享出去的別名
<Directory "/usr/share/man/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
AuthName "**********welcome*********" #定義受保護的領域名稱,該內容將在瀏覽器彈出的認證對話方塊中顯示
AuthType Basic #設定認證的型別,basic為基本的認證
AuthUserFile /usr/local/apache/user #設定用於儲存使用者賬號、密碼的認證檔案
路徑(htpasswd)
require valid-user #要求只有認證檔案中的合法使用者才能訪問。valid-user表示所有合法使用者
#Require all granted
</Directory>
[[email protected] conf.d]# htpasswd -c /usr/local/apache/user test #建立使用者認證的資料庫
New password: 123456
Re-type new password:123456
Adding password for user test
注意:htpasswd命令指的是建立使用者認證的資料庫中的使用者名稱稱和密碼,
‘-c’指的是建立使用者認證的資料庫的路徑。第一次建立需要加‘-c’,第二次以後就不需要了。
[[email protected] conf.d]# htpasswd /usr/local/apache/user jack
New password: 456789
Re-type new password:456789
Adding password for user jack
[[email protected] conf.d]# cat /usr/local/apache/user
test:$apr1$KQuygE7p$H7qBAPM5Z2V0SXrWfTFlo0
jack:$apr1$spCSLlRw$WYGcMNUbYqXUQZNkoMXcm1
[[email protected] conf.d]# service httpd restart
第三塊:構建虛擬WEB主機
虛擬Web主機
在同一臺伺服器中執行多個Web站點,其中每一個站點並不獨立佔用一臺真正的計算機
httpd支援的虛擬主機型別
1、基於域名的虛擬主機
2、基於IP地址的虛擬主機
3、基於埠的虛擬主機
第1步:基於ip的虛擬主機
需求:
1:構建2個虛擬Web站點:
www.benet.com,IP地址為 192.168.1.36
www.accp.com,IP地址為 192.168.1.63
2:在瀏覽器中訪問這兩個域名時,分別顯示不同的內容
分析:在虛擬機器中新增網絡卡,給定網橋模式,修改新增網絡卡資訊,並且將mack地址修改。
[[email protected] conf.d]# vim vhost.conf
<VirtualHost 192.168.1.63:80> #定義虛擬主機,給定IP地址
ServerAdmin [email protected] #定義此虛擬主機的IP地址
DocumentRoot /opt/accp/ #定義虛擬主機的歸屬目錄
ServerName www.accp.com #定義域名
ErrorLog logs/accp.com-error_log #錯誤日誌
CustomLog logs/accp.com-access_log common
</VirtualHost>
<Directory "/opt/accp"> #定義虛擬主機的目錄許可權
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Require all granted
</Directory>
<VirtualHost 192.168.1.36:80>
ServerAdmin [email protected]
DocumentRoot /opt/benet/
ServerName www.benet.com
ErrorLog logs/benet.com-error_log
CustomLog logs/benet.com-access_log common
</VirtualHost>
<Directory "/opt/benet">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Require all granted
</Directory>
[[email protected] conf.d]# mkdir /opt/accp #建立虛擬主機的資料夾目錄
[[email protected] conf.d]# mkdir /opt/benet
[[email protected] conf.d]# echo "<h1>welcome accp<h1>" > /opt/accp/index.html
[[email protected] conf.d]# echo "<h1>welcome benet<h1>" > /opt/benet/index.html #給定虛擬主機輸入一些資訊
[[email protected] conf.d]# service httpd restart
[[email protected] conf.d]# service iptables stop
第2步:基於埠地址的虛擬主機
[[email protected] conf.d]# vim vhost.conf
Listen 192.168.1.63:8080
<VirtualHost 192.168.1.63:8080>
ServerAdmin [email protected]
DocumentRoot /opt/accp/
ServerName www.accp.com
ErrorLog logs/accp.com-error_log
CustomLog logs/accp.com-access_log common
</VirtualHost>
<Directory "/opt/accp">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Require all granted
</Directory>
<VirtualHost 192.168.1.63:80>
ServerAdmin [email protected]
DocumentRoot /opt/benet/
ServerName www.benet.com
ErrorLog logs/benet.com-error_log
CustomLog logs/benet.com-access_log common
</VirtualHost>
<Directory "/opt/benet">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Require all granted
</Directory>
[[email protected] conf.d]# service httpd restart
第3步:基於域名的虛擬主機
[[email protected] conf.d]# vim vhost.conf
Listen 192.168.1.63:8080
<VirtualHost 192.168.1.63:8080>
ServerAdmin [email protected]
DocumentRoot /opt/accp/
ServerName www.accp.com
ErrorLog logs/accp.com-error_log
CustomLog logs/accp.com-access_log common
</VirtualHost>
<Directory "/opt/accp">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Require all granted
</Directory>
<VirtualHost 192.168.1.63:80>
ServerAdmin [email protected]
DocumentRoot /opt/benet/
ServerName www.benet.com
ErrorLog logs/benet.com-error_log
CustomLog logs/benet.com-access_log common
</VirtualHost>
<Directory "/opt/benet">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Require all granted
</Directory>
註釋:hosts檔案在C:\Windows\System32\drivers\etc下,hosts檔案中新增以下內容,需要將此檔案拖出到桌面修改,修改完之後再拖回去。
192.168.1.63 www.benet.com
192.168.1.63 www.accp.com
Apache中的虛擬主機的配置(基於IP)
簡單介紹一下環境
OS:RED HAT AS 4.0
IP:192.168.1.108
MASK:255.255.255.0
GW:192.168.1.1
DNS:192.168.1.2
1.先新增一個IP因為伺服器現在是單網絡卡,所以要新增一個網絡卡,操作步驟
#cd /etc/sysconfig/network-scripts
#vi ifcfg-eth0:0
新增內容:
DEVICE="eth0:0"
IPADDR="192.168.1.109"
NETMASK="255.255.255.0"
ONBOOT="yes"
#reboot
2.測試網絡卡是否已經開始工作
說明兩塊網絡卡都開始正常工作
2.修改APACHE的配置檔案
<VirtualHost 192.168.1.124:80>
DocumentRoot /var/www/html/test1
</VirtualHost>
<VirtualHost 192.168.1.109:80>
DocumentRoot /var/www/html/test2
</VirtualHost>
記得把原來的DocumentRoot註釋掉
3測試結果:在瀏覽器裡分別輸入
[url]http://192.168.1.108[/url]
[url]http://192.168.109[/url]
應該看到不同的頁面
我的頁面如下:
http協議簡介
http協議,全稱HyperText Transfer Protocol,中文名稱超文字傳輸協議,是網際網路應用最為廣泛的一種網路協議,所有的www都必須遵守這個標準,設計http最初的目的為了提供一種釋出和接收HTML(一種頁面標記語言)
web伺服器介紹
全球資訊網又稱web(world wide web,www),是在internet上以超文字為基礎形成的資訊網,使用者可以通過瀏覽器可以訪問web伺服器上面的資訊資源
web服務的歷史和工作原理
web服務的歷史
Internet上最熱門的服務之一就是全球資訊網,它是因特網上以超文字為基礎形成的資訊網,使用者可以通過查閱Internet上的資訊資源,例如:平時上網使用瀏覽器訪問網站資訊的最常見應用。
web在1989年起源於歐洲的一個國家核能源研究院中,由於隨著研究的深入和發展,研究院的檔案越來越多,而且人員流動非常大,要找到相關的資料是非常困難的,於是一個科學家就提出這樣的一個建議,咋伺服器上維護一個目錄,目錄的連結指向每個人的檔案,每個人維護自己的檔案,保證別人訪問的時候總是最新的文件,這個建議得到了採納並不斷的完善後,最終形成如今Internet上最常見的www服務
web的工作原理
web系統是客戶端/服務端的C/S架構,所以有伺服器端端和客戶端程式兩個部分,
常用的伺服器端軟體有Apache,IIS,nginx等,
常見的客戶端瀏覽器有IE,Mozilla等,使用者在瀏覽器位址列中輸入資源定位地址(URL)來訪問web頁面
web頁面是以超文字標記語言(HTML)進行編寫,它是文字不在是傳統的書頁方式文字,而是可以在瀏覽
器上面從一個頁面跳轉到另一個頁面,使用HTML語言編制的web除了文字意外還可以嵌入視訊,音樂,圖
象等 .
瀏覽一個頁面時,(比如http://www.baidu.com/index.html)瀏覽器會向伺服器www.baidu.com傳送一條HTTP請求,伺服器會去尋找所期望的物件(在這個例子就是/index.html),如果傳送成功,就將物件,物件型別,物件長度以及其他一些資訊放在http響應中發給客戶端。
[[email protected] ~]# curl -I www.baidu.com
HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Thu, 06 Oct 2016 07:23:46 GMT
Content-Type: text/html
Content-Length: 277
Last-Modified: Mon, 13 Jun 2016 02:50:09 GMT
Connection: Keep-Alive
ETag: "575e1f61-115"
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache
Accept-Ranges: bytes
一次完整的Http請求處理過程:
(1) 建立或處理連線請求;
(2) 接收請求;
(3) 解析請求,處理請求;
(4) 載入使用者請求的資源;
(5) 構建響應報文;
(6) 傳送響應報文;
(7) 記錄訪問於日誌中;
訪問錯誤響應碼
1xx:
2xx: 成功響應
3xx: 重定向響應
4xx: 客戶端錯誤
5xx: 服務端錯誤
Windows系統中預設Web服務程式是IIS(Internet Information Services),這是一款圖形化的網站管理工具,IIS程式不光能提供Web網站服務,還能夠提供FTP、NMTP、SMTP等服務功能,但只能在Windows系統中使用。
nginx——最初於2004年10月4日為俄羅斯知名門戶站點而開發的,作為一款輕量級的網站服務軟體,因其穩定性和豐富的功能而深受信賴,但最最最被認可的是低系統資源、佔用記憶體少且併發能力強,目前國內如新浪、網易、騰訊等門戶站均使用。
Apache——取自美國印第安人土著語Apache,寓意著擁有高超的作戰策略和無窮的耐性,由於其跨平臺和安全性廣泛被認可且擁有快速、可靠、簡單的API擴充套件。目前擁有很高的Web服務軟體市場佔用率,全球使用最多的Web服務軟體,開源、跨平臺(可運行於Unix,linux,windows中)。
Tomcat——屬於輕量級的Web服務軟體,一般用於開發和除錯JSP程式碼,通常認為Tomcat是Apache的擴充套件程式。
關於Apache服務
Nginx程式作為Web服務軟體屆的後起之秀已經通過自身的努力與優勢贏得了大批站長的信賴,不得不說真的很棒!但是Apache程式作為老牌的Web服務軟體因其卓越的穩定性與安全性成為了紅帽RHEL7系統中預設的網站服務軟體,同樣也是紅帽RHCSA與RHCE考試認證中避不開的考題。
Apache簡介
Apache是一種開源的httpd伺服器軟體,可以在UNIX、Linux以及Windows在內的大多數主流計算機作業系統系統上面執行,Apache是由Illinois大學Urbana-Champaign的國家高階計算機程式中心開發,它的名字取自apatchy server 的讀音,即充滿補丁的伺服器,可見在最初的時候該程式並不是非常完善
Apache優點
但由於Apache是開源軟體,所以得到開源社群的支援,不斷開發出新的功能特性,並修補了原來的缺陷,經過多年不斷的完善,如今的Apache已經是最流行的web服務端軟體之一Apache擁有以下眾多的特性,保證了它可以高速穩定的執行
支援所有的計算機平臺
簡單有效的配置檔案
支援虛擬主機
支援多種方式的http認證
整合Perl指令碼語言
整合代理伺服器模組
支援實時監視伺服器狀態和定製伺服器日誌
支援伺服器端包含指令
支援Php
支援第三方軟體開發商提供的軟體
Apache模組化
Apache伺服器的安裝使用
httpd相關軟體及安裝
httpd-2.2.15-29.el6_4.x86_64.rpm //服務端主程式包,伺服器執行核心軟體包
httpd-devel-2.2.15-29.el6_4.x86_64.rpm //apache開發程式包,如開發附加模組的時候需要此軟體
httpd-manual-2.2.15-29.el6_4.noarch.rpm //Apache手冊文件
httpd-tools-2.2.15-29.el6_4.x86_64.rpm //一起apache的工具,如htpasswd
apr-devel-1.3.9-5.el6_2.x86_64.rpm //安裝httpd-devel的時候的依賴包
apr-util-devel-1.3.9-3.el6_0.1.x86_64.rpm //安裝httpd-devel的時候的依賴包
expat-devel-2.0.1-11.el6_2.x86_64.rpm //安裝httpd-devel的時候的依賴包
安裝Apache
Linux基本都自帶Apache軟體
[[email protected] ~]# ls /mnt/Packages/ | grep "httpd"
httpd-2.2.15-53.el6.centos.x86_64.rpm
[[email protected] ~]# yum install -y httpd httpd-manual
[[email protected] ~]# yum install -y elinks //這是一個字元介面瀏覽器 使用方式 “elinks 域名”
[[email protected] ~]# service httpd restart //服務啟動
[[email protected] ~]# chkconfig httpd on //服務開機啟動
[[email protected] ~]# netstat -antup | grep 80 //啟動是否成功,檢視埠是否開放
相關檔案
[[email protected] ~]# ls /etc/httpd/ //apache工作目錄,配置檔案目錄
[[email protected] ~]# ls /etc/httpd/conf/httpd.conf //yum或rpm方式安裝的配置檔案位置
[[email protected] ~]# ls /etc/httpd/conf.d/ //這個是預設httpd.conf裡面include位置
[[email protected] ~]# ls /var/log/httpd/ //預設日誌目錄
[[email protected] ~]# ls /var/log/httpd/access_log //預設訪問日誌
[[email protected] ~]# ls /var/log/httpd/error_log //預設錯誤日誌
[[email protected] ~]# ls /var/www/html/ //預設網站根目錄
[[email protected] ~]# ls /etc/httpd/modules/ //apache庫檔案,模組檔案目錄
[[email protected] ~]# ls /etc/httpd/run/httpd.pid //apache執行的程序pid
[[email protected] ~]# ls /var/www/manual/ //apache手冊也,需要安裝httpd-manual
檢視Apache的相關資訊
檢視Apache軟體版本資訊
[[email protected] ~]# httpd -V
Server version: Apache/2.2.15 (Unix)
Server built: May 11 2016 19:28:33
Server's Module Magic Number: 20051115:25
Server loaded: APR 1.3.9, APR-Util 1.3.9
Compiled using: APR 1.3.9, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
檢視已經被編譯的模組
[[email protected] ~]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
httpd.conf主配置檔案的解釋
ServerTokens OS #返回作業系統型別,如apache/2.0.54(unix)
ServerRoot "/etc/httpd" #伺服器配置檔案目錄
ServerName 192.168.1.235:80 #伺服器主機名
PidFile run/httpd.pid #apache執行程序ID存放
Timeout 60 #超時時間,多少s沒有反應就超時
KeepAlive Off #是否允許一個永久的連結,設定為OFF的時候,不能保持連線功能,傳輸效率比較低,設定為ON時,可以提高伺服器傳輸檔案的效率,建議開啟
MaxKeepAliveRequests 100 #設定KeepAlive為ON時,設定客戶端每次連線允許請求相應最大檔案數,預設100個
KeepAliveTimeout 15 #超時時間,同一個客戶端下一個請求15s沒收到就超時
Listen 80 #監聽埠,預設本地IP,如果指定ip寫上IP:80
<IfModule prefork.c>
StartServers 8 #服務開始起啟動8個程序
MinSpareServers 5 #最小空閒5個程序
MaxSpareServers 20 #最多空閒20個程序
ServerLimit 256 #伺服器允許配置程序數上線
MaxClients 256 #最大連線數256,超過要進入等候佇列
MaxRequestsPerChild 4000 #每個程序生存期內服務最大的請求數量,0表示用不結束
</IfModule>
<Directory />
Options FollowSymLinks #Options Indexes 目錄瀏覽 FollowSymLinks用連線瀏覽
AllowOverride None #設定為none,忽略.htaccess
</Directory>
LoadModule auth_basic_module modules/mod_auth_basic.so #載入的庫,模組
● ● ● ● ● ●
Include conf.d/*.conf #conf.d裡面的conf檔案也屬有效配置檔案
User apache #apache執行以哪個身份執行
Group apache #apache執行以哪個組的身份執行
ServerAdmin [email protected] #管理員郵箱
DocumentRoot "/var/www/html" #預設的主目錄,如果改動要改動兩處,Directory
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny #這裡預設後者生效,也就是deny生效
Allow from all #這裡說允許所有
</Directory>
LogLevel warn #日誌等級
DirectoryIndex index.html index.html.var #首頁
AccessFileName .htaccess #access檔名
AddDefaultCharset UTF-8 #支援的語言,預設編碼
#配置檔案的最後是虛擬主機的欄位,其中你大部分欄位做個瞭解即可,用到的時候去查即可
檢測配置檔案語法
[[email protected] ~]# cat /etc/httpd/conf/httpd.conf | grep "^Listen" //修改web埠為55667
Listen 55667
[[email protected] ~]# apachectl configtest
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
Syntax OK
[[email protected] ~]# service httpd reload //切記http服務不可以隨便重啟,修改配置檔案要重新載入配置檔案
Reloading httpd:
建立一個測試首頁
[[email protected] ~]# cd /var/www/html/
[[email protected] html]# ls
[[email protected] html]# echo "<h1>zhang789.blog.51cto.com</h1>" >> index.html
[[email protected] html]# ll
total 4
-rw-r--r-- 1 root root 33 Oct 6 09:06 index.html
符號連結和虛擬目錄
DocumentRoot的引數是指定web釋出文件的主目錄,在預設情況下,使用者通過http訪問web伺服器瀏覽
的所有資料都是存在該目錄下,該引數只能設定一個目錄作為引數值,那麼是不是在Apache中就能有一
個目錄存放文件檔案呢?如果文件根目錄空間不足,要放到其他的檔案系統中應該怎麼辦,
符號連結
例如:/var/www/html/doc這個目錄,希望吧/usr/share/doc目錄對映成/var/www/html/doc,配置就是一個軟連線就行
[[email protected] html]# ln -s /usr/share/doc/ doc
[[email protected] html]# ll
total 4
lrwxrwxrwx 1 root root 15 Oct 6 09:49 doc -> /usr/share/doc/
-rw-r--r-- 1 root root 33 Oct 6 09:06 index.html
虛擬目錄(別名)
使用虛擬目錄是另一種將根目錄以外的內容加入站點中的辦法,下面舉一個簡單的例子,把/var/log目
錄對映成網站根目錄下的/log下
1、開啟httpd.conf檔案,新增如下內容
Alias /log "/var/log"
<Directory "/var/log/">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
2、過載httpd服務,然後訪問加資源URL/log路徑
service httpd reload
頁面重定向
如果使用者經常訪問某個網站的網頁,他很可能會把頁面的URL新增到收藏夾,在每次訪問網站的時候,可
以直接點選收藏夾的記錄訪問,但是如果網站進行了目錄架構的更改,使用者再使用原來的URL訪問時就會
出現404頁面無法找到的錯誤,為了方便使用者能夠使用原來的URL進行訪問,這時就需要頁面重定向了
假設網站有一個doc目錄,現在管理員要對網站的目錄結構就行整理,並把/doc目錄移動到/old-doc目錄下,如果使用者還是訪問原來的URL就會出現404的錯誤,
1、開啟httpd.conf配置檔案,新增如下內容
Alias /old-doc "/usr/share/doc"
<Directory "/usr/share/doc">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
2、過載httpd服務
3、使用瀏覽器再次訪問
Apache日誌檔案
Apache執行會生成兩個日誌檔案,access_log(訪問日誌)error_log(錯誤日誌)
[[email protected] httpd]# pwd
/var/log/httpd
[[email protected] httpd]# ls
access_log error_log
1、訪問日誌檔案
Apache的訪問日誌就是記錄web伺服器的所有訪問活動(如下圖)
容可以看出,每一行都記錄了一次訪問記錄,由7個部分組成
192.168.211.1 - - [06/Oct/2016:10:23:26 +0800] "GET /old-doc/ HTTP/1.1" 200 149404 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"
//客戶端地址、訪問者的標示、訪問者的驗證名字、請求的時間、請求型別、請求的http程式碼、傳送給客戶端的位元組數
部分詳細說明
客戶端地址:表明訪問網站的客戶端IP地址
訪問者的標示:該項一般為空白,用“-”代替
訪問者驗證的名字:該項用於記錄訪問者進行身份驗證時提供的名字,一般情況下該項也為空白
請求的時間:記錄訪問操作的發生時間
請求型別:該項記錄了伺服器收到是一個什麼型別的請求,一般型別包括GET、post、HEAD
請求的程式碼:通過該項資訊可以知道請求是否成功,遇到了什麼樣的問題錯誤,正常情況下,為200
傳送給客戶端的位元組數:表示傳送給客戶端的總的位元組數,通過檢查該數值是否和檔案大小相同,可以知道傳輸是否被中斷
2、錯誤日誌
錯誤日誌是Apache提供的另外一種標準日誌,該日誌記錄了Apache服務執行過程發生的錯誤日誌,httpd.conf配置檔案中提供了一下兩個配置引數:
ErrorLog logs/error_log
LogLevel warn
它們分別用於配置錯誤日誌的位置和日誌的級別
日誌的級別說明
嚴重程度 等級 說明
1 emerg 系統不可以用
2 alert 需要立即引起注意的情況
3 crit 危急情況
4 error 錯誤資訊
5 warn 警告資訊
6 notiee 需要引起注意的情況
7 info 一般資訊
8 debug 由運行於debug模式的程式輸出的資訊
emerg級別的資訊最為嚴重,debug級別最低,如果使用者吧錯誤日誌設定成warn級別,則嚴重程度由1-5會被記錄下來
容可以看出,每一行記錄了一個錯誤,由3個部分組成,
時間 錯誤等級 錯誤資訊
[Thu Oct 06 10:22:24 2016] [error] [client 192.168.211.1] Directory index forbidden by Options directive: /usr/share/doc/
第一個括號是錯誤發生的時間 2016年10月06 10:22:24
第二個是錯誤等級:error
第三個是錯誤的內容:[客戶192.168.211.1]目錄索引選項禁止指令:/usr/share/doc/
Apache安全配置
Apache提供了多種安裝控制手段,包括web訪問控制,使用者登入密碼設定及.htaccess檔案
訪問控制
訪問控制是提高apache伺服器安全級別的最有效的手段之一,看下Diertory段,Diertory段用於設定與
目錄相關的引數和指令,包括訪問控制和認證
<Diretory 目錄的路徑>
目錄相關的配置引數和指令
</Diretory>
每個Diretory段以<Diretory>開始</Diretory>結束。
<Diretory>指定目錄及其裡面的所有檔案和子目錄,在段中可以設定與目錄相關的引數和指令,包括訪
問控制和認證
<Directory "/var/www/icons">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
1、Allow 指令
Allow指令用於設定那些客戶端可以訪問Apache
Allow for [All/全域名/部分域名/ip地址/網路地址/cidr地址。。。]
all表示所有客戶端
全域名:表示域名對應的客戶端 www.baidu.com
部分域名:表示域內的所有客戶端 baidu.com
IP地址:如172.16.2.1
網路地址:如192.168.1.0/256.356.355.0
CIDR地址:172.16.20.0/24
2、Deny指令
Deny指令使用者設定拒絕那些客戶端訪問Apache,格式和Allow一樣
3、Order指令
Order指令用於指定訪問規則的先後順序,有一下兩種
Order Allow,Deny;先執行允許訪問規則,在執行拒絕訪問規則
Order Deny,Allow; 先執行拒絕訪問規則,在執行允許訪問規則
例項:
現在,假設網站中一個logo目錄,是登入網站後臺的目錄,所以網站管理員希望該目錄只能由該網站管理員訪問(192.168.211.1),其他都不能訪問
1、開啟httpd.conf配置檔案新增如下內容
<Directory "/var/www/html/log">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 192.168.211.1
</Directory>
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
Syntax OK
[[email protected] httpd]# service httpd reload
Reloading httpd:
使用者認證
Apache的使用者認證方式包括基本(Basic)認證和摘要(Digest)認證兩種,摘要認證比基本認證更加安
全,但有個別瀏覽器不支援,基本認證很簡單,當用戶在瀏覽器輸入認證模式的URL時候,會彈出一個對
話框,要求輸入賬戶密碼,當用戶輸入後,web服務驗證他的正確性,如果正確,則返回頁面,錯誤則返
回401頁面
要使用使用者認證,首先要建立好使用者名稱和密碼,在Apache中提供htpasswd命令用於建立和修改密碼檔案,該命令在<apache 安裝目錄>/support目錄下
要在/etc/httpd/conf/下建立一個名為users的認證密碼檔案,並在密碼檔案新增sam使用者
[[email protected] ~]# htpasswd -c /etc/httpd/conf/users sam
New password:
Re-type new password:
Adding password for user sam
認證密碼檔案建立後,如果再向users檔案新增一個ken的使用者 不加-C
[[email protected] ~]# htpasswd /etc/httpd/conf/users ken
New password:
Re-type new password:
Adding password for user ken
與/etc/passwd檔案類似,認證密碼都是一行一個
[[email protected] ~]# cat /etc/httpd/conf/users
sam:fGNODsapTMn72
ken:8HenVGxWHKF8A
使用者名稱:加密後的密碼
htpasswd沒有刪除賬戶指令,直接在配置檔案裡面刪除
建立完成認證密碼後,還要對配置檔案進行修改,使用者認證是在httpd.conf配置檔案中<Directort>段中進行設定
案例:
現在網站管理員為了更加安全,加強控制,對log目錄經過sam使用者認證才能訪問
1、在httpd.conf配置檔案新增如下內容
<Directory "/var/www/html/log">
Options Indexes FollowSymLinks
AllowOverride None
AuthType Basic //設定認證的方式
AuthName "doc" //設定保護區域的名稱
AuthUserFile /etc/httpd/conf/users //認證密碼的檔案
require user sam //指定那些使用者可以進行訪問
Order deny,allow
Deny from all
Allow from 192.168.211.1
</Directory>
2、檢測語法,過載服務
[[email protected] ~]# apachectl configtest
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
Syntax OK
[[email protected] ~]# service httpd reload
Reloading httpd:
[[email protected] ~]#
虛擬主機
虛擬主機就是指將一臺物理伺服器虛擬多臺web伺服器,可以有效的節省硬體資源,Apache支援基於IP地址或主機名的虛擬機器服務
虛擬主機的介紹
虛擬主機就是將一臺物理伺服器虛擬成多臺web伺服器,對於一些小規模的網站,通過web虛擬主機技術、可以跟其他網站共享一臺伺服器,有效減少系統的執行成本,
比如說,一家從事web託管的公司,他為企業提供web服務,那麼他肯定不會為每個企業準備一臺物理伺服器,
Apache提供3中虛擬主機方案:基於IP的虛擬主機服務,基於主機名的虛擬主機和基於埠的虛擬主機
基於IP的虛擬主機
基於IP的虛擬主機,服務上面必須設定多個IP地址,伺服器根據請求目的的IP地址來判斷請求的是哪個虛擬主機
Apache中是通過httpd.conf配置檔案的<VirtualHost>段來配置虛擬主機服務的
<VirtualHost IP地址:主機名[:埠] IP地址:主機名[:埠]...>
虛擬主機的相關配置引數和指令
<VirtualHost>
案例:
假設一臺伺服器上面有兩個IP地址,分別為192.168.211.128和192.168.211.130,對應www.server1.com和www.server2.com,現在要根據這兩個IP地址來實現虛擬主機
當客戶端訪問192.168.211.128訪問/var/www/html/server1
當客戶端訪問192.168.211.130訪問/var/www/html/server2
問題:
如果伺服器只有一個網絡卡,可以通過單網絡卡配置多IP來模擬
1、在/var/www/html/server1和server2下,分別生成index.html檔案
[[email protected] html]# mkdir server{1,2}
[[email protected] html]# ls
index.html log loganalyze old-doc server1 server2
[[email protected] server1]# cat index.html
<HTML>
<HEAD>
<TITLE> 基於IP的虛擬主機測試 </TITLE>
</HEAD>
<BODY>
基於IP的虛擬主機測試:<FONT SIZE="6">www.server1.com</FONT>
</BODY>
</HTML>
為了管理方便在/etc/httpd/conf.d/下面建立一個vhost.conf
(在httpd.conf主配置裡面有指定,conf.d/*.conf都是可生效的檔案)
[[email protected] conf.d]# vim /etc/httpd/conf.d/vhost.conf
<VirtualHost 192.168.211.128>
ServerAdmin [email protected]
DocumentRoot /var/www/html/server1
<Directory"/var/www/html/server1">
AllowOverride none
Allow from all
Order Allow,deny
</Directory>
ErrorLog /log/httpd/vhost_log/error_server1.log
</VirtualHost>
<VirtualHost 192.168.211.130>
ServerAdmin [email protected]
DocumentRoot /var/www/html/server2
<Directory"/var/www/html/server2">
AllowOverride none
Allow from all