天天看點

Apache HTTP Server搭建虛拟主機

目錄:

Apache簡介

安裝Apache HTTP Server軟體

配置檔案解析

應用案例

Apache HTTP Server項目是在Windows與Unix等平台上都可以運作的跨平台開源HTTP伺服器軟體,該項目的目标是提供安全、高效、可擴充的HTTP服務。Apache httpd自從1996年釋出以來,如今已經成為世界排名第一的Web伺服器軟體。Apache httpd最新的穩定版本為2.4.4。安裝Apache httpd軟體可以選擇源碼安裝或二進制包安裝,但由于源碼安裝是可以定制的一種安裝方式,這種安裝方式靈活性比較大,可以滿足企業對這種環境的不同需求。二進制包安裝在CentOS 6.3系統中可以選擇RPM包安裝,這種安裝的最大好處就是簡單快捷。本書采用的是源碼安裝軟體包,由于源碼安裝需要大量的依賴包,需要先安裝這些依賴軟體包。

Apache HTTP Sever非常重要的特性是她采用了子產品化設計模型,Apache子產品分為靜态子產品與動态子產品,靜态子產品是Apache最基本的子產品,是無法随時添加與解除安裝的子產品,靜态子產品在編譯軟體時設定。動态子產品是可以随時添加删除的子產品,這樣的設計使得企業部署Apache時可以獲得最大的靈活性,每個企業都可以根據自己的平台以及實際需求,安裝使用不同的子產品功能。Apache子產品将被編譯為動态共享對象(DSOs),這些動态共享對象獨立于httpd程式,DSO子產品可以在編譯Apache是添加,也可以後期随時通過Apache Extension Tool(apxs)工具編譯添加子產品。Apache HTTP Server軟體安裝完成後可以使用httpd –M檢視子產品加載清單。

安裝Apache軟體

1.    下載下傳軟體包

[root@centos6 ~]# wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.4.4.tar.gz 

[root@centos6 ~]# wget http://mirror.bjtu.edu.cn/apache/apr/apr-1.4.6.tar.gz 

[root@centos6 ~]# wget http://mirror.bjtu.edu.cn/apache/apr/apr-util-1.5.2.tar.gz 

2.    安裝軟體

[root@centos6 ~]# yum –y install gcc autoconf automake make \ 

> pcre pcre-devel openssl openssl-devel 

[root@centos6 ~]# tar –xzf httpd-2.4.4.tar.gz –C /usr/src/ 

[root@centos6 ~]# tar –xzf apr-1.4.6.tar.gz –C /usr/src/ 

[root@centos6 ~]# tar –xzf apr-util-1.5.2.tar.gz –C /usr/src/ 

[root@centos6 ~]# cd /usr/src/apr-1.4.6/ 

[root@centos6 apr-1.4.6]# ./configure  --with-apr=/usr/local/apr/ 

[root@centos6 apr-1.4.6]# make && make install 

[root@centos6 apr-1.4.6]# cd /usr/src/apr-util-1.5.2/ 

[root@centos6 apr-util-1.5.2]# ./configure  --with-apr=/usr/local/apr/ 

[root@centos6 apr-util-1.5.2]# make && make install 

[root@centos6 apr-util-1.5.2]# cd /usr/src/httpd-2.4.4/ 

[root@centos6 httpd-2.4.4]# ./configure –prefix=/usr/local/apache2 –enable-so \ 

> --enable-ssl  --enable-rewrite –with-mpm=worker –with-suexec-bin \ 

> --with-apr=/usr/local/apr/ 

[root@centos6 httpd-2.4.4]# make && make install 

configure腳本用來檢查系統環境、查找依賴檔案、設定安裝路徑等操作,configure擁有很多參數,讀者可以通過./configure --help檢視該腳本支援的所有參數。

下面是configure常用參數說明:

參數            描述

--prefix            指定Apache httpd程式的安裝主目錄

--enable-so         開啟子產品化功能,支援DSO(動态共享對象)

--enable-ssl        支援SSL加密

--enable-rewrite    支援位址重寫

--with-mpm          設定Apache httpd工作模式

--with-suexec-bin   支援SUID、SGID

--with-apr          指定apr程式絕對路徑

3.    啟動服務

[root@centos6 ~]# /usr/local/apache2/bin/apachectl start 

[root@centos6 ~]# netstat -ntulp |grep http 

[root@centos6 ~]# iptables -I INPUT -p tcp -dport 80 -j ACCEPT 

安裝完成後Apache會提供名為apachectl啟動腳本,該腳本提供了Apache httpd的啟動、關閉以及測試功能,沒有修改配置檔案的情況下使用start啟動httpd程式,可能會傳回錯誤提示:”Could not reliably determine the server’s fully qualified domain name”,提示說明httpd無法确定伺服器域名稱,可以修改主配置檔案的ServerName項來解決。該提示也可以忽略,通過netstat指令檢視httpd已經啟動成功。

在用戶端使用浏覽器通路該Web伺服器,看到”IT works!”說明伺服器可以被正常通路了。

apachectl具體參數如下:

start           啟動httpd程式,如果已經啟動過該程式則報錯

stop            關閉httpd程式

restart         重新開機httpd程式

graceful        啟動httpd,不中斷現有的連接配接

graceful-stop   關閉httpd,不中斷現有的連接配接

status          檢視httpd程式目前狀态

configtest      檢查httpd主配置檔案文法

Apache配置檔案預設位于/usr/local/apache2/conf目錄下,在該目錄下最主要的配置檔案是httpd.conf檔案,還有一些位于extra目錄下的附加配置檔案。此外original目錄中存有所有這些配置檔案的副本。Apache HTTP Sever主配置檔案主要由指令以及容器組成,容器使用<容器名稱>開始,</容器名稱>結尾,容器的指令一般僅在局部有效。下面是對主配置檔案重點指定的具體描述。

SeverRoot指令

ServerRoot指令設定Apache軟體的安裝主目錄,如果采用源碼安裝則預設路徑為/usr/local/apache2。

Listen指令

Listen指令設定伺服器監聽的IP以及端口号,預設監聽伺服器本機所有的IP位址的80端口。文法格式為Listen [IP位址:]端口 [協定],其中IP位址與協定為可選項,預設監聽所有IP,使用TCP協定。一個配置檔案中可以多次使用Listen指令來開啟多個端口。

LoadModule指令

Apache HTTP Server的特色之一就是她的功能多數是以子產品方式加載的,但如果希望Apache動态加載子產品,需要在編譯Apache時通過--enable-so将mod_so以靜态方式編譯到Apache核心子產品中,LoadModule指令的作用就是加載子產品。文法格式為LoadModule 子產品 子產品檔案名稱,子產品檔案一般位于ServerRoot指定目錄下的modules目錄中。

LoadFile指令

LoadFile指令功能類似于LoadModule,差別在于LoadFile可以通過絕對路徑加載modules目錄以為的子產品檔案。

ServerAdmin指令

當網站出現故障時,需要為客戶提供一個可以幫助解決問題的郵件位址,ServerAdmin指令的作用就是提供這樣的郵件位址。

ServerName指令

ServerName指令設定伺服器本機的主機名稱以及端口,對于URL位址的重定向很重要。

DocumentRoot指令

該指令設定Web服務對用戶端開放可見的文檔根目錄,也就是用戶端通路網站的根路徑,預設為/usr/local/apache2/htdocs。

ErrorLog指令

ErrorLog定位伺服器錯誤日志的位置,預設使用相對路徑,為ServerRoot指定目錄下的”logs/error_log”檔案。

ErrorLogFormat指令

設定錯誤日志的格式,Apache HTTP Server事先定義了很多格式字串 可以直接引用。

CustomLog指令

該指令設定用戶端的通路日志檔案名以及日志格式,預設為”logs/access_log”,文法格式為CustomLog 檔案名 格式。

LogFormat指令

描述使用者日志檔案格式,可以直接使用Apache預先設定的格式字串,一般我們會為LogFormat指令設定的日志格式建立别名,然後可以再通過CustomLog指令調用該日志格式别名。

Include指令

Include指令允許Apache在主配置檔案中加載其他的配置檔案,該指令文法比較簡單,Inclde指令後直接跟上其他附加配置檔案路徑即可。

Options指令

為特定目錄設定選項,文法格式為Options [+|-]選項 [[+|-]選項]。選項可以設定為None,代表不啟用任何額外功能,也可以使用如下常用選項。

All:開啟出來MultiViews之外的所有選項。

ExecCGI:允許執行CGI腳本。

FollowSymlinks:允許目錄下通過連結檔案連結到目錄外的檔案或目錄。

Indexes:如果與URL對應的目錄下,沒有DirectoryIndex指定的首頁文檔,則Apache

将會把目前目錄的所有檔案索引出來。

Order指令

控制預設通路狀态以及Allow與Deny次序,如果使用Order deny,allow,則先檢查拒絕,沒有拒絕則預設允許。如何使用Order allow,deny,則先檢查允許,沒有允許則預設拒絕。

以下為具體案例:

Order deny,allow

Deny from all

先檢查拒絕規則,再檢查允許規則,預設為允許。這裡Deny From all代表拒絕所有,是以最終結果為拒絕所有。

Order Allow,Deny

allow from All

先檢查允許規則,再檢查拒絕規則,allow from all代表允許所有,是以最終結果為允許所有。

allow from 192.168.0.1

先檢查允許規則時允許192.168.0.1,其餘為預設值,預設為拒絕所有,最終除192.168.0.1外拒絕所有。

Deny from All

先檢查允許規則時允許192.168.0.1通路,但檢查拒絕規則時為拒絕所有,而192.168.0.1也包含在all之中,當Allow與Deny有沖突時,以Order最後的規則覆寫其他的規則,本案例将使用Deny規則覆寫Allow規則,最終效果為拒絕所有人通路。

Order Deny,Allow

先檢查拒絕規則,再檢查允許規則,拒絕規則為拒絕所有,允許規則為允許192.168.0.1,拒絕與允許規則有沖突的部分本案例将采用Allow的規則,最終本案例可以實作僅允許192.168.0.1通路,其他任何主機均無法通路Apache服務。

IfDefine容器

IfDefine容器封裝的指令僅在啟動Apache時測試條件為真才會被處理,測試條件需要在啟動Apache時通過httpd -D定義。文法格式為<IfDefine>指令</IfDefine>。具體案例如下:

<IfDefine MemCache>

LoadModule mem_cache_module modules/mod_mem_cache.so

</IfDefine>

<IfDefine UseCache>

LoadModule cache_module modules/mod_ cache.so

這樣的配置可以讓管理者采用多種配置方式啟動Apache,啟動Apache時如果使用了httpd -DuseCache -DMemCache,則Apache将加載mod_mem_cache與mod_cache子產品,如果沒有使用-D指定任何參數,則Apache将不加載這些子產品。

IfModule容器

使用IfModule容器可以封裝僅在條件滿足時才會處理的指令,根據指定的子產品是否加載決定條件是否滿足,文法格式<IfModule [!] 子產品>指令</IfModule>。具體案例如下:

<IfModule unixd_module>

User daemon

Group daemon

</IfModule>

以上配置說明,僅在Apache加載了unixd_module子產品後User daemon與Group daemon才會被Apache處理。

Directory容器

該容器内的指令僅應用于特定的檔案系統目錄、子目錄以及目錄下的内容,文法格式為<Directory directory-path>指令</Directory>。路徑可以使用~比對正規表達式。具體案例如下:

<Directory “/usr/local/apche2/htdocs”>

Options Indexs FollowSymLinks

</Directory>

<Directory ~ “^/www/[0-9]{3}”>

AllowOverride None

以上案例中Opions Index FollowSymLins僅對/usr/local/apache2/htdocs目錄有效,AllowOverride None僅對所有/www目錄下包含三個數字的子目錄有效。

<DirectoryMatch>

DirectoryMatch類似于Directory,但可以直接使用正規表達式比對,而無需像Directory一樣使用~符号才可以比對。

Files容器

該容器類似于Directory容器,但Files容器内的指令僅應用于特定的檔案,文法格式如下:<Files 檔案名>指令</File>,與Directory類似可以使用~比對正規表達式。

FilesMatch容器

僅使用正規表達式比對需要的檔案,容器内的指令僅應用于比對成功的特定檔案。FilesMatch等同于使用了~符号的Files。

Location容器

Location容器内定義的指令僅對特定的URL有效,文法格式為<Location URL-path|URL>指令</Location>,如果需要使用正規表達式比對URL可以使用~符号。

LocationMathch容器

LocationMatch僅使用正規表達式比對URL,等同于使用了~符号比對的Location。

VirtualHost容器

虛拟主機應用案例

虛拟主機是在一台伺服器上同時運作多個網站業務,Apache HTTP Server支援基于域名以及基于IP虛拟主機類型。在Apache配置檔案中虛拟主機指令需要使用VirtualHost容器封裝。基于IP的虛拟主機可以根據不同的IP位址以及端口号定位不同的網站請求,但基于IP的虛拟主機需要獨立的IP位址定位連接配接的網站,而目前IP位址是網際網路的稀缺資源,是以很多時候我們更喜歡基于域名的虛拟主機,伺服器可以根據用戶端通路HTTP的頭部資訊來實作網站的分離解析,用戶端可以使用不同的域名通路位于同一IP位址的伺服器資源。

當用戶端請求到達後,伺服器會根據<VirtualHost IP位址:[端口号]>參數比對IP位址與端口号,IP位址可以使用*比對伺服器本地所有IP位址。接下來我們通過一個案例說明基于域名虛拟主機的實作方式,首先我們需要将主配置檔案中Include conf/extra/httpd-vhosts.conf這樣功能開啟,預設該行為注釋行,去除#符号即可。Include指令會将httpd-vhosts.conf檔案視作為配置檔案的一部分。下面我們僅列出該配置檔案中需要修改的部分。

[root@centos6 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf 

<VirtualHost *:80> 

    ServerAdmin [email protected] 

    DocumentRoot "/usr/local/apache2/htdocs/example" 

    ServerName www.example.com 

    ServerAlias web.example.com 

ErrorLog "logs/www.example.com-error_log" 

CustomLog "logs/www.example.com-access_log" common 

</VirtualHost> 

    DocumentRoot "/usr/local/apache2/htdocs/test" 

    ServerName www.test.com 

    ErrorLog "logs/test. com-error_log" 

    CustomLog "logs/test.com-access_log" common 

[root@centos6 ~]# mkdir -p /usr/local/apache2/htdocs/{example,test} 

[root@centos6 ~]# echo “example.com” > /usr/local/apache2/htdocs/example/index.html

[root@centos6 ~]# echo “test.com” > /usr/local/apache2/htdocs/test/index.html

[root@centos6 ~]# /usr/local/apache2/bin/apachectl restart 

Apache HTTP Sever完成以上配置後即可實作基于相同IP位址的www.example.com與www.test.com網站。可以使用用戶端通路這兩個域名測試效果,如果沒有合法的DNS伺服器可以通過修改hosts檔案的方式進行域名解析。如果讀者需要實作基于IP位址的虛拟主機,隻需要将VirtualHost後面的*修改為固定的IP位址即可,多個虛拟主機需要使用多個VirtualHost封裝。

http://manual.blog.51cto.com/3300438/1186157  丁丁曆險

本文轉自丁丁曆險51CTO部落格,原文連結: http://blog.51cto.com/manual/1186157,如需轉載請自行聯系原作者