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軟件及相關軟件包
[root@xuegod63 ~]# 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中軟件包是否安裝
[root@xuegod63 ~]# rpm -q gcc
gcc-4.4.7-4.el6.x86_64
[root@xuegod63 ~]# rpm -q gcc-c++
gcc-c++-4.4.7-4.el6.x86_64
[root@xuegod63 ~]# rpm -q make
make-3.81-20.el6.x86_64
[root@xuegod63 ~]# yum install pcre-devel -y
第3步:解壓軟件包
[root@xuegod63 ~]# tar zxvf httpd-2.4.25.tar.gz -C /opt/
[root@xuegod63 ~]# tar -zxvf apr-1.5.2.tar.gz -C /opt/
[root@xuegod63 ~]# tar -zxvf apr-util-1.5.4.tar.gz -C /opt/
[root@xuegod63 opt]# cp -r apr-1.5.2/ httpd-2.4.25/srclib/apr
[root@xuegod63 opt]# cp -r apr-util-1.5.4/ httpd-2.4.25/srclib/apr-util
註釋:解壓後複製到httpd的srclib解壓目錄中(不帶版本號)
第4步:源碼編譯安裝Apache
[root@xuegod63 ~]# cd /opt/httpd-2.4.25/
[root@xuegod63 httpd-2.4.25]# ./configure \ #源碼
--prefix=/usr/local/apache \
--enable-so \
--enable-rewrite \
--enable-mods-shared=most \
--with-mpm=worker \
--disable-cgid \
--disable-cgi
[root@xuegod63 httpd-2.4.25]# echo $?
0
[root@xuegod63 httpd-2.4.25]# make -j 4 #編譯,將編譯程序變爲可執行程序
[root@xuegod63 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
[root@xuegod63 httpd-2.4.25]# ls /usr/local/apache/bin/apachectl #檢查apachectl命令
/usr/local/apache/bin/apachectl
[root@xuegod63 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下。
[root@xuegod63 httpd-2.4.25]# ln -s /usr/local/apache/bin/* /usr/local/bin/
[root@xuegod63 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變量的路徑中,命令纔可以被使用。
[root@xuegod63 httpd-2.4.25]# grep -v "#" /usr/local/apache/bin/apachectl > /etc/init.d/httpd
[root@xuegod63 httpd-2.4.25]# vim /etc/init.d/httpd
#!/bin/sh
# chkconfig: 2345 85 15
# description: Apache is a World Wide Web server.
[root@xuegod63 httpd-2.4.25]# chmod +x /etc/init.d/httpd
[root@xuegod63 httpd-2.4.25]# chkconfig --add httpd
[root@xuegod63 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下
[root@xuegod63 httpd-2.4.25]# ln -s /usr/local/apache/conf/httpd.conf /etc/httpd.conf
[root@xuegod63 httpd-2.4.25]# vim /etc/httpd.conf
ServerName www.example.com:80
[root@xuegod63 httpd-2.4.25]# service httpd start #啓動服務沒有效果
[root@xuegod63 httpd-2.4.25]# netstat -anutp | grep http #監聽http服務
tcp 0 0 :::80 :::* LISTEN 32974/httpd
第7步:物理機驗證http服務
[root@xuegod63 httpd-2.4.25]# service iptables stop #關閉防火牆
[root@xuegod63 httpd-2.4.25]# cd /usr/local/apache/ #
[root@xuegod63 apache]# cat htdocs/index.html
<html><body><h1>It works!</h1></body></html>
註釋:在/usr/local/apache/htdocs/下存放着apache服務自帶的index。Html網頁,用於驗證,次服務是否啓動成功,在此目錄下,可以創建更多的網頁文件。
[root@xuegod63 htdocs]# vim a.html 創建一個新的網頁
<html>
<body>
<h1>This is my first homepage!!!!------mobanche !</h1>
<h2>--------Welcome my homepage----------</h2>
</body>
</html>
第二塊:Httpd服務訪問控制
作用:
控制對網站資源的訪問
爲特定的網站目錄添加訪問授權
常用訪問控制方式:
客戶機地址限制
用戶授權限制
第1步:共享虛擬目錄
[root@xuegod63 ~]# vim /etc/httpd.conf
Include conf.d/*.conf #在主配置文件末尾增加。
註釋:httpd.conf是apache服務器的主配置文件,由於內容過多,不易查看,因此初見一個子主配置文件,當主配置文件讀完之後就開始讀子主配置文件,所以直接在子配置文件中修改配置文件。
[root@xuegod63 ~]# cd /usr/local/apache/ #切換至服務目錄
[root@xuegod63 apache]# mkdir conf.d #創建子主配置文件目錄
[root@xuegod63 apache]# cd conf.d/
[root@xuegod63 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>
[root@xuegod63 conf.d]# service httpd restart
第2步:共享目錄授權訪問
[root@xuegod63 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>
[root@xuegod63 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’,第二次以後就不需要了。
[root@xuegod63 conf.d]# htpasswd /usr/local/apache/user jack
New password: 456789
Re-type new password:456789
Adding password for user jack
[root@xuegod63 conf.d]# cat /usr/local/apache/user
test:$apr1$KQuygE7p$H7qBAPM5Z2V0SXrWfTFlo0
jack:$apr1$spCSLlRw$WYGcMNUbYqXUQZNkoMXcm1
[root@xuegod63 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地址修改。
[root@xuegod63 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>
[root@xuegod63 conf.d]# mkdir /opt/accp #創建虛擬主機的文件夾目錄
[root@xuegod63 conf.d]# mkdir /opt/benet
[root@xuegod63 conf.d]# echo "<h1>welcome accp<h1>" > /opt/accp/index.html
[root@xuegod63 conf.d]# echo "<h1>welcome benet<h1>" > /opt/benet/index.html #給定虛擬主機輸入一些信息
[root@xuegod63 conf.d]# service httpd restart
[root@xuegod63 conf.d]# service iptables stop
第2步:基於端口地址的虛擬主機
[root@xuegod63 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>
[root@xuegod63 conf.d]# service httpd restart
第3步:基於域名的虛擬主機
[root@xuegod63 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響應中發給客戶端。
[root@localhost ~]# 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軟件
[root@localhost ~]# ls /mnt/Packages/ | grep "httpd"
httpd-2.2.15-53.el6.centos.x86_64.rpm
[root@localhost ~]# yum install -y httpd httpd-manual
[root@localhost ~]# yum install -y elinks //這是一個字符界面瀏覽器 使用方式 “elinks 域名”
[root@localhost ~]# service httpd restart //服務啓動
[root@localhost ~]# chkconfig httpd on //服務開機啓動
[root@localhost ~]# netstat -antup | grep 80 //啓動是否成功,查看端口是否開放
相關文件
[root@localhost ~]# ls /etc/httpd/ //apache工作目錄,配置文件目錄
[root@localhost ~]# ls /etc/httpd/conf/httpd.conf //yum或rpm方式安裝的配置文件位置
[root@localhost ~]# ls /etc/httpd/conf.d/ //這個是默認httpd.conf裏面include位置
[root@localhost ~]# ls /var/log/httpd/ //默認日誌目錄
[root@localhost ~]# ls /var/log/httpd/access_log //默認訪問日誌
[root@localhost ~]# ls /var/log/httpd/error_log //默認錯誤日誌
[root@localhost ~]# ls /var/www/html/ //默認網站根目錄
[root@localhost ~]# ls /etc/httpd/modules/ //apache庫文件,模塊文件目錄
[root@localhost ~]# ls /etc/httpd/run/httpd.pid //apache運行的進程pid
[root@localhost ~]# ls /var/www/manual/ //apache手冊也,需要安裝httpd-manual
查看Apache的相關信息
查看Apache軟件版本信息
[root@localhost ~]# 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)
查看已經被編譯的模塊
[root@localhost ~]# 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 root@localhost #管理員郵箱
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 #支持的語言,默認編碼
#配置文件的最後是虛擬主機的字段,其中你大部分字段做個瞭解即可,用到的時候去查即可
檢測配置文件語法
[root@localhost ~]# cat /etc/httpd/conf/httpd.conf | grep "^Listen" //修改web端口爲55667
Listen 55667
[root@localhost ~]# apachectl configtest
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
Syntax OK
[root@localhost ~]# service httpd reload //切記http服務不可以隨便重啓,修改配置文件要重新載入配置文件
Reloading httpd:
創建一個測試首頁
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
[root@localhost html]# echo "<h1>zhang789.blog.51cto.com</h1>" >> index.html
[root@localhost 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,配置就是一個軟連接就行
[root@localhost html]# ln -s /usr/share/doc/ doc
[root@localhost 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>
#指定當用戶訪問/doc目錄遇到404錯誤自動重定向到http://192.168.211.128:55667/old-doc
Redirect 303 /doc http://192.168.211.128:55667/old-doc
2、重載httpd服務
3、使用瀏覽器再次訪問
Apache日誌文件
Apache運行會生成兩個日誌文件,access_log(訪問日誌)error_log(錯誤日誌)
[root@localhost httpd]# pwd
/var/log/httpd
[root@localhost 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
[root@localhost httpd]# service httpd reload
Reloading httpd:
用戶認證
Apache的用戶認證方式包括基本(Basic)認證和摘要(Digest)認證兩種,摘要認證比基本認證更加安
全,但有個別瀏覽器不支持,基本認證很簡單,當用戶在瀏覽器輸入認證模式的URL時候,會彈出一個對
話框,要求輸入賬戶密碼,當用戶輸入後,web服務驗證他的正確性,如果正確,則返回頁面,錯誤則返
回401頁面
要使用用戶認證,首先要創建好用戶名和密碼,在Apache中提供htpasswd命令用於創建和修改密碼文件,該命令在<apache 安裝目錄>/support目錄下
要在/etc/httpd/conf/下創建一個名爲users的認證密碼文件,並在密碼文件添加sam用戶
[root@localhost ~]# htpasswd -c /etc/httpd/conf/users sam
New password:
Re-type new password:
Adding password for user sam
認證密碼文件創建後,如果再向users文件添加一個ken的用戶 不加-C
[root@localhost ~]# htpasswd /etc/httpd/conf/users ken
New password:
Re-type new password:
Adding password for user ken
與/etc/passwd文件類似,認證密碼都是一行一個
[root@localhost ~]# 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、檢測語法,重載服務
[root@localhost ~]# apachectl configtest
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
Syntax OK
[root@localhost ~]# service httpd reload
Reloading httpd:
[root@localhost ~]#
虛擬主機
虛擬主機就是指將一臺物理服務器虛擬多臺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文件
[root@localhost html]# mkdir server{1,2}
[root@localhost html]# ls
index.html log loganalyze old-doc server1 server2
[root@localhost 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都是可生效的文件)
[root@localhost 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
Order Allow,deny
</Directory>
ErrorLog /log/httpd/vhost_log/error_server2.log
</VirtualHost>
重載Apache服務訪問
基於主機名的虛擬主機(域名)
大多數物理機IP有限,基於IP這種方式太浪費IP資源了,更多的都是使用基於域名的虛擬主機服務
http1.1協議中,增加了對主機名的虛擬主機服務的支持,具體的說,當客戶端向web服務器發送請求
時,客戶端想要訪問的主機名也通過請求頭中的Host語句傳遞給web服務器,web服務器接受到這個請求
後,通過檢查Host語言來判斷客戶端請求的是哪個虛擬主機
與基於IP地址虛擬主機的配置方法不同,用戶必須在conf配置文件使用NameVirtualHost參數
NameVirtualHost IP地址/主機名[:端口]
NameVirtualHost 192.168.211.128
<VirtualHost 192.168.211.128>
ServerName www.server1.com
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>
NameVirtualHost 192.168.211.130
<VirtualHost 192.168.211.130>
ServerName www.server2.com
DocumentRoot /var/www/html/server2
<Directory "/var/www/html/server2">
AllowOverride none
Allow from all
Order Allow,deny
</Directory>
ErrorLog /log/httpd/vhost_log/error_server2.log
</VirtualHost>
檢查配置語法,重載httpd服務
基於端口的虛擬主機
在同一IP,同一主機名下,使用監聽不同端口,訪問時需要加訪問的端口。使用不多,一般用來做內網測試使用
配置文件
<VirtualHost 192.168.211.128:80>
ServerName www.server1.com
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>
Listen 8080 //添加監聽端口
<VirtualHost 192.168.211.128:8080>
ServerName www.server2.com
DocumentRoot /var/www/html/server2
<Directory "/var/www/html/server2">
AllowOverride none
Allow from all
Order Allow,deny
</Directory>
ErrorLog /log/httpd/vhost_log/error_server2.log
</VirtualHost>
重載服務
Apache配置詳解
Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改。
主站點的配置(基本配置)
(1) 基本配置:
ServerRoot "/mnt/software/apache2" #你的apache軟件安裝的位置。其它指定的目錄如果沒有指定絕對路徑,則目錄是相對於該目錄。
PidFile logs/httpd.pid #第一個httpd進程(所有其他進程的父進程)的進程號文件位置。
Listen 80 #服務器監聽的端口號。
ServerName www.clusting.com:80 #主站點名稱(網站的主機名)。
ServerAdmin [email protected] #管理員的郵件地址。
DocumentRoot "/mnt/web/clusting" #主站點的網頁存儲位置。
以下是對主站點的目錄進行訪問控制:
<Directory "/mnt/web/clusting">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
在上面這段目錄屬性配置中,主要有下面的選項:
Options:配置在特定目錄使用哪些特性,常用的值和基本含義如下:
ExecCGI: 在該目錄下允許執行CGI腳本。
FollowSymLinks: 在該目錄下允許文件系統使用符號連接。
Indexes: 當用戶訪問該目錄時,如果用戶找不到DirectoryIndex指定的主頁文件(例如index.html),則返回該目錄下的文件列表給用戶。
SymLinksIfOwnerMatch: 當使用符號連接時,只有當符號連接的文件擁有者與實際文件的擁有者相同時纔可以訪問。
AllowOverride:允許存在於.htaccess文件中的指令類型(.htaccess文件名是可以改變的,其文件名由AccessFileName指令決定):
None: 當AllowOverride被設置爲None時。不搜索該目錄下的.htaccess文件(可以減小服務器開銷)。
All: 在.htaccess文件中可以使用所有的指令。
其他的可用值及含義(如:Options FileInfo AuthConfig Limit等),請參看: http://www.clusting.com/Apache/ApacheManual/mod/core.html#AllowOverride
Order:控制在訪問時Allow和Deny兩個訪問規則哪個優先:
Allow:允許訪問的主機列表(可用域名或子網,例如:Allow from 192.168.0.0/16)。
Deny:拒絕訪問的主機列表。
更詳細的用法可參看:http://www.clusting.com/Apache/ApacheManual/mod/mod_access.html#order
DirectoryIndex index.html index.htm index.php #主頁文件的設置(本例將主頁文件設置爲:index.html,index.htm和index.php)
(2) 服務器的優化 (MPM: Multi-Processing Modules)
apache2主要的優勢就是對多處理器的支持更好,在編譯時同過使用--with-mpm選項來決定apache2的工作模式。如果知道當前的apache2使用什麼工作機制,可以通過httpd
-l命令列出apache的所有模塊,就可以知道其工作方式:
prefork:如果httpd -l列出prefork.c,則需要對下面的段進行配置:
<IfModule prefork.c>
StartServers 5 #啓動apache時啓動的httpd進程個數。
MinSpareServers 5 #服務器保持的最小空閒進程數。
MaxSpareServers 10 #服務器保持的最大空閒進程數。
MaxClients 150 #最大併發連接數。
MaxRequestsPerChild 1000 #每個子進程被請求服務多少次後被kill掉。0表示不限制,推薦設置爲1000。
</IfModule>
在該工作模式下,服務器啓動後起動5個httpd進程(加父進程共6個,通過ps -ax|grep httpd命令可以看到)。當有用戶連接時,apache會使用一個空閒進程爲該連接服務,同時父進程會fork一個子進程。直到內存中的空閒進程達到MaxSpareServers。該模式是爲了兼容一些舊版本的程序。我缺省編譯時的選項。
worker:如果httpd -l列出worker.c,則需要對下面的段進行配置:
<IfModule worker.c>
StartServers 2 #啓動apache時啓動的httpd進程個數。
MaxClients 150 #最大併發連接數。
MinSpareThreads 25 #服務器保持的最小空閒線程數。
MaxSpareThreads 75 #服務器保持的最大空閒線程數。
ThreadsPerChild 25 #每個子進程的產生的線程數。
MaxRequestsPerChild 0 #每個子進程被請求服務多少次後被kill掉。0表示不限制,推薦設置爲1000。
</IfModule>
該模式是由線程來監聽客戶的連接。當有新客戶連接時,由其中的一個空閒線程接受連接。服務器在啓動時啓動兩個進程,每個進程產生的線程數是固定的(ThreadsPerChild決定),因此啓動時有50個線程。當50個線程不夠用時,服務器自動fork一個進程,再產生25個線程。
perchild:如果httpd -l列出perchild.c,則需要對下面的段進行配置:
<IfModule perchild.c>
NumServers 5 #服務器啓動時啓動的子進程數
StartThreads 5 #每個子進程啓動時啓動的線程數
MinSpareThreads 5 #內存中的最小空閒線程數
MaxSpareThreads 10 #最大空閒線程數
MaxThreadsPerChild 2000 #每個線程最多被請求多少次後退出。0不受限制。
MaxRequestsPerChild 10000 #每個子進程服務多少次後被重新fork。0表示不受限制。
</IfModule>
該模式下,子進程的數量是固定的,線程數不受限制。當客戶端連接到服務器時,又空閒的線程提供服務。 如果空閒線程數不夠,子進程自動產生線程來爲新的連接服務。該模式用於多站點服務器。
(3) HTTP返頭回信息配置:
ServerTokens Prod #該參數設置http頭部返回的apache版本信息,可用的值和含義如下:
Prod:僅軟件名稱,例如:apache
Major:包括主版本號,例如:apache/2
Minor:包括次版本號,例如:apache/2.0
Min:僅apache的完整版本號,例如:apache/ 2.0.54
OS:包括操作系統類型,例如:apache/2.0.54(Unix)
Full:包括apache支持的模塊及模塊版本號,例如:Apache/2.0.54 (Unix) mod_ssl/2.0.54 OpenSSL/0.9.7g
ServerSignature Off #在頁面產生錯誤時是否出現服務器版本信息。推薦設置爲Off
(4) 持久性連接設置
KeepAlive On #開啓持久性連接功能。即當客戶端連接到服務器,下載完數據後仍然保持連接狀態。
MaxKeepAliveRequests 100 #一個連接服務的最多請求次數。
KeepAliveTimeout 30 #持續連接多長時間,該連接沒有再請求數據,則斷開該連接。缺省爲15秒。
別名設置
對於不在DocumentRoot指定的目錄內的頁面,既可以使用符號連接,也可以使用別名。別名的設置如下:
Alias /download/ "/var/www/download/" #訪問時可以輸入:http://www.custing.com/download/
<Directory "/var/www/download"> #對該目錄進行訪問控制設置
Options Indexes MultiViews
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
CGI設置
ScriptAlias /cgi-bin/ "/mnt/software/apache2/cgi-bin/" # 訪問時可以:http://www.clusting.com/cgi-bin/ 。但是該目錄下的CGI腳本文件要加可執行權限!
<Directory "/usr/local/apache2/cgi-bin"> #設置目錄屬性
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
個人主頁的設置 (public_html)
UserDir public_html (間用戶的主頁存儲在用戶主目錄下的public_html目錄下 URL http://www.clusting.com/~bearzhang/file.html 將讀取 /home/bearzhang/public_html/file.html 文件)
chmod 755 /home/bearzhang #使其它用戶能夠讀取該文件。
UserDir /var/html (the URL http://www.clusting.com/~bearzhang/file.html 將讀取 /var/html/bearzhang/file.html)
UserDir /var/www/*/docs (the URL http://www.clusting.com/~bearzhang/file.html 將讀取 /var/www/bearzhang/docs/file.html)
日誌的設置
(1)錯誤日誌的設置
ErrorLog logs/error_log #日誌的保存位置
LogLevel warn #日誌的級別
顯示的格式日下:
[Mon Oct 10 15:54:29 2005] [error] [client 192.168.10.22] access to /download/ failed, reason: user admin not allowed access
(2)訪問日誌設置
日誌的缺省格式有如下幾種:
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common #common爲日誌格式名稱
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog logs/access_log common
格式中的各個參數如下:
%h --客戶端的ip地址或主機名
%l --The 這是由客戶端 identd 判斷的RFC 1413身份,輸出中的符號 "-" 表示此處信息無效。
%u --由HTTP認證系統得到的訪問該網頁的客戶名。有認證時纔有效,輸出中的符號 "-" 表示此處信息無效。
%t --服務器完成對請求的處理時的時間。
"%r" --引號中是客戶發出的包含了許多有用信息的請求內容。
%>s --這個是服務器返回給客戶端的狀態碼。
%b --最後這項是返回給客戶端的不包括響應頭的字節數。
"%{Referer}i" --此項指明瞭該請求是從被哪個網頁提交過來的。
"%{User-Agent}i" --此項是客戶瀏覽器提供的瀏覽器識別信息。
下面是一段訪問日誌的實例:
192.168.10.22 - bearzhang [10/Oct/2005:16:53:06 +0800] "GET /download/ HTTP/1.1" 200 1228
192.168.10.22 - - [10/Oct/2005:16:53:06 +0800] "GET /icons/blank.gif HTTP/1.1" 304 -
192.168.10.22 - - [10/Oct/2005:16:53:06 +0800] "GET /icons/back.gif HTTP/1.1" 304 -
用戶認證的配置
(1)in the httpd.conf:
AccessFileName .htaccess
.........
Alias /download/ "/var/www/download/"
<Directory "/var/www/download">
Options Indexes
AllowOverride AuthConfig
</Directory>
(2) create a password file:
/usr/local/apache2/bin/htpasswd -c /var/httpuser/passwords bearzhang
(3)onfigure the server to request a password and tell the server which users are allowed access.
vi /var/www/download/.htaccess:
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /var/httpuser/passwords
Require user bearzhang
#Require valid-user #all valid user
虛擬主機的配置
(1)基於IP地址的虛擬主機配置
Listen 80
<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example1.com
</VirtualHost>
<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example2.org
</VirtualHost>
(2) 基於IP和多端口的虛擬主機配置
Listen 172.20.30.40:80
Listen 172.20.30.40:8080
Listen 172.20.30.50:80
Listen 172.20.30.50:8080
<VirtualHost 172.20.30.40:80>
DocumentRoot /www/example1-80
ServerName www.example1.com
</VirtualHost>
<VirtualHost 172.20.30.40:8080>
DocumentRoot /www/example1-8080
ServerName www.example1.com
</VirtualHost>
<VirtualHost 172.20.30.50:80>
DocumentRoot /www/example2-80
ServerName www.example1.org
</VirtualHost>
<VirtualHost 172.20.30.50:8080>
DocumentRoot /www/example2-8080
ServerName www.example2.org
</VirtualHost>
(3)單個IP地址的服務器上基於域名的虛擬主機配置:
# Ensure that Apache listens on port 80
Listen 80
# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example1.com
ServerAlias example1.com. *.example1.com
# Other directives here
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example2.org
# Other directives here
</VirtualHost>
(4)在多個IP地址的服務器上配置基於域名的虛擬主機:
Listen 80
# This is the "main" server running on 172.20.30.40
ServerName server.domain.com
DocumentRoot /www/mainserver
# This is the other address
NameVirtualHost 172.20.30.50
<VirtualHost 172.20.30.50>
DocumentRoot /www/example1
ServerName www.example1.com
# Other directives here ...
</VirtualHost>
<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example2.org
# Other directives here ...
</VirtualHost>
(5)在不同的端口上運行不同的站點(基於多端口的服務器上配置基於域名的虛擬主機):
Listen 80
Listen 8080
NameVirtualHost 172.20.30.40:80
NameVirtualHost 172.20.30.40:8080
<VirtualHost 172.20.30.40:80>
ServerName www.example1.com
DocumentRoot /www/domain-80
</VirtualHost>
<VirtualHost 172.20.30.40:8080>
ServerName www.example1.com
DocumentRoot /www/domain-8080
</VirtualHost>
<VirtualHost 172.20.30.40:80>
ServerName www.example2.org
DocumentRoot /www/otherdomain-80
</VirtualHost>
<VirtualHost 172.20.30.40:8080>
ServerName www.example2.org
DocumentRoot /www/otherdomain-8080
</VirtualHost>
(6)基於域名和基於IP的混合虛擬主機的配置:
Listen 80
NameVirtualHost 172.20.30.40
<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example1.com
</VirtualHost>
<VirtualHost 172.20.30.40>
DocumentRoot /www/example2
ServerName www.example2.org
</VirtualHost>
<VirtualHost 172.20.30.40>
DocumentRoot /www/example3
ServerName www.example3.net
</VirtualHost>
SSL加密的配置
首先在配置之前先來了解一些基本概念:
證書的概念:首先要有一個根證書,然後用根證書來簽發服務器證書和客戶證書,一般理解:服務器證書和客戶證書是平級關係。SSL必須安裝服務器證書來認證。 因此:在此環境中,至少必須有三個證書:根證書,服務器證書,客戶端證書。 在生成證書之前,一般會有一個私鑰,同時用私鑰生成證書請求,再利用證書服務器的根證來簽發證書。
SSL所使用的證書可以自己生成,也可以通過一個商業性CA(如Verisign 或 Thawte)簽署證書。
簽發證書的問題:如果使用的是商業證書,具體的簽署方法請查看相關銷售商的說明;如果是知己簽發的證書,可以使用openssl自帶的CA.sh腳本工具。
如果不爲單獨的客戶端簽發證書,客戶端證書可以不用生成,客戶端與服務器端使用相同的證書。
(1) conf/ssl.conf 配置文件中的主要參數配置如下:
Listen 443
SSLPassPhraseDialog buildin
#SSLPassPhraseDialog exec:/path/to/program
SSLSessionCache dbm:/usr/local/apache2/logs/ssl_scache
SSLSessionCacheTimeout 300
SSLMutex file:/usr/local/apache2/logs/ssl_mutex
<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "/usr/local/apache2/htdocs"
ServerName www.example.com:443
ServerAdmin [email protected]
ErrorLog /usr/local/apache2/logs/error_log
TransferLog /usr/local/apache2/logs/access_log
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.key
CustomLog /usr/local/apache2/logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
</VirtualHost>
(2) 創建和使用自簽署的證書:
a.Create a RSA private key for your Apache server
/usr/local/openssl/bin/openssl genrsa -des3 -out /usr/local/apache2/conf/ssl.key/server.key 1024
b. Create a Certificate Signing Request (CSR)
/usr/local/openssl/bin/openssl req -new -key /usr/local/apache2/conf/ssl.key/server.key -out /usr/local/apache2/conf/ssl.key/server.csr
c. Create a self-signed CA Certificate (X509 structure) with the RSA key of the CA
/usr/local/openssl/bin/openssl req -x509 -days 365 -key /usr/local/apache2/conf/ssl.key/server.key -in /usr/local/apache2/conf/ssl.key/server.csr -out /usr/local/apache2/conf/ssl.crt/server.crt
/usr/local/openssl/bin/openssl genrsa 1024 -out server.key
/usr/local/openssl/bin/openssl req -new -key server.key -out server.csr
/usr/local/openssl/bin/openssl req -x509 -days 365 -key server.key -in server.csr -out server.crt
(3) 創建自己的CA(認證證書),並使用該CA來簽署服務器的證書。
mkdir /CA
cd /CA
cp openssl-0.9.7g/apps/CA.sh /CA
./CA.sh -newca
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.csr newreq.pem
./CA.sh -sign
cp newcert.pem /usr/local/apache2/conf/ssl.crt/server.crt
cp server.key /usr/local/apache2/conf/ssl.key/