Apache 安裝設(shè)置

  • 安裝Apache2
sudo apt-get install apache2 
  • 編輯/etc/apache2/apache2.conf(新安裝的系統(tǒng)可能在/etc/apache2/conf.d/charset)文件,在改動(dòng)之前,請(qǐng)先將該配置文件做個(gè)備份。以便在出錯(cuò)的時(shí)候可以恢復(fù)。將
AddDefaultCharset ISO-8859-1  改為  AddDefaultCharset GB2312

當(dāng)然如果你網(wǎng)站的編碼用的是UTF-8的話(huà),也可以改為

AddDefaultCharset UTF-8

這樣的話(huà),我們就不會(huì)每次打開(kāi)網(wǎng)頁(yè)都是亂碼了!

增加安全模塊

?????? 增加安全模塊,以保障Apache服務(wù)的正常運(yùn)行,現(xiàn)在我們安裝mod-security。(可選)

首先安裝libapache2-mod-security包

sudo apt-get install libapache2-mod-security

該模塊默認(rèn)是沒(méi)激活的,我們可以在/etc/apache2/mods-available目錄下看到有mod-security.load文件,但在/etc/apache2/mods-enabled目錄卻沒(méi)有它的軟鏈接。我們現(xiàn)在激活它:

$sudo ln -s /etc/apache2/mods-available/mod-security.load /etc/apache2/mods-enabled/mod-security.load

$sudo cp /usr/share/doc/libapache2-mod-security/examples/httpd2.conf.example-full /etc/apache2/mods-available/mod-security.conf

$sudo cp /etc/apache2/mods-available/mod-security.conf /etc/apache2/mods-available/mod-security.conf.orig

$sudo vi /etc/apache2/mods-available/mod-security.conf

==== mod-security.conf 文件內(nèi)容開(kāi)始====

# 檢測(cè)內(nèi)容長(zhǎng)度以避免堆溢出攻擊

SecFilterForceByteRange 32 254 =>SecFilterForceByteRange 32 126

# debug設(shè)置

SecFilterDebugLevel 9 =>SecFilterDebugLevel 0

# 設(shè)置缺省的動(dòng)作

SecFilterDefaultAction "deny,log,status:499" =>SecFilterDefaultAction "deny,log,status:404"

# 把設(shè)置傳遞給子目錄

SecFilterInheritance Off

# Redirect user on filter match

# 當(dāng)匹配sh的時(shí)候,重新定向到一個(gè)特殊的警告頁(yè)面,該頁(yè)面是自行編寫(xiě)的,寫(xiě)些警告的話(huà)讓攻擊者知難而退,該段先不要生效,等到相關(guān)配置配好之后再失效不遲。記住在配好之后要使之生效。

#SecFilter sh redirect:http://localhost/hack/warning.htm

# Prevent OS specific keywords

#過(guò)濾一些敏感的東西,我們使用*是為了攻擊者使用/etc/./passwd來(lái)繞開(kāi)檢測(cè)

SecFilter /etc/passwd =>SecFilter /etc/*passwd

SecFilter /bin/*sh

# Very crude filters to prevent SQL injection attacks

# 防止SQL插入(SQL Injection)攻擊

????? SecFilter "delete[[[space|space]]]+from" SecFilter "insert[[[space|space]]]+into" SecFilter "select.+from" SecFilter "select[[[space|space]]]+from" SecFilter "union[[[space|space]]]+from"

==== mod-security.conf 文件內(nèi)容結(jié)束====

sudo ln -s /etc/apache2/mods-available/mod-security.conf /etc/apache2/mods-enabled/mod-security.conf

重啟Apache2服務(wù)即可。

sudo /etc/init.d/apache2 restart

備注:第三步可能會(huì)引起部分網(wǎng)站不能正常運(yùn)行,可以參照著去掉某些限制,由于是安全模塊,所以參照的是防火墻的做法,關(guān)掉一切不安全的,再根據(jù)需要打開(kāi)必要的。

測(cè)試環(huán)境
  • 操作系統(tǒng):Ubuntu 9.0.4
  • 測(cè)試機(jī)地址:10.39.6.59
  • 測(cè)試機(jī)域名:*.firehare.com

基本配置

我們都知道,如果我們想在單臺(tái)機(jī)器上設(shè)置多個(gè)域名或主機(jī)名時(shí),我們就要用到基于名稱(chēng)的虛擬主機(jī)了。那么要如何進(jìn)行設(shè)置呢?這就是本指南想解決的問(wèn)題 了。在 Ubuntu 的 /etc/apache2/ 目錄下有個(gè) Apache2 的主配置文件 apache2.conf。在該文件中我們可以看到有這么一行內(nèi)容:

Include /etc/apache2/sites-enabled/[^.#]*

這行的意思表明該文件包含了 /etc/apache2/sites-enabled/ 目錄中文件名不含 "." 或 "#" 這兩個(gè)字符的所有文件。而當(dāng)我們列出該目錄的文件時(shí),發(fā)現(xiàn)只有一個(gè) 000-default 的軟鏈接文件,實(shí)際連接的是 /etc/apache2/sites-available 目錄中的 default 文件,不難看出該文件的文件名中并不包含 "." 或 "#"。所以這個(gè)文件當(dāng)然是要被配置文件 apache2.conf 所包含的了。打開(kāi)該文件,發(fā)現(xiàn)它其實(shí)是一個(gè)虛擬主機(jī)的配置文件,不過(guò)由于該文件中的虛擬主機(jī)為 *,所以它實(shí)際上是一個(gè)通用配置文件。如果我們要建立虛擬主機(jī)的話(huà),那么就要把該文件改成如下所示:

NameVirtualHost 10.39.6.59
<VirtualHost 10.39.6.59>
ServerName www.firehare.com
ServerAdmin ubuntu.firehare@gmail.com

DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
# Commented out for Ubuntu
#RedirectMatch ^/$ /apache2-default/
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined
ServerSignature On

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0?::1/128
</Directory>

</VirtualHost>

下面我們來(lái)分析一下上面這段設(shè)置中與虛擬主機(jī)有關(guān)的設(shè)置語(yǔ)句:

  • `NameVirtualHost 10.39.6.59`:表示我們要做的是一個(gè)基于名稱(chēng)的虛擬主機(jī),且其 IP 地址為 10.39.6.59
  • `<VirtualHost 10.39.6.59> 和 </VirtualHost>`:表示在其中的是一個(gè)虛擬主機(jī)的配置
  • `ServerName www.firehare.com`:設(shè)置虛擬主機(jī)的域名
  • `ServerAdmin ubuntu.firehare@gmail.com`:設(shè)置該虛擬主機(jī)網(wǎng)管員的郵件
  • `DocumentRoot /var/www/`:設(shè)置該虛擬主機(jī)的主目錄路徑
  • `ErrorLog /var/log/apache2/error.log`:設(shè)置該虛擬主機(jī)的出錯(cuò)信息
  • `CustomLog /var/log/apache2/access.log combined`:設(shè)置該虛擬主機(jī)的訪(fǎng)問(wèn)信息

這樣我們就配置了一個(gè)虛擬主機(jī) www.firehare.com。但由于這是缺省配置,所以在 Apache2 重啟之后,無(wú)論你輸入 DNS 服務(wù)器中指向這個(gè)主機(jī)的任何域名,都會(huì)被導(dǎo)向 www.firehare.com 這個(gè)缺省配置所指向的 /var/www 這個(gè)目錄的。除非該域名被其他虛擬主機(jī)配置所用,比如我們還配置了 edunuke.firehare.com 指向本機(jī),且配置了相應(yīng)的虛擬主機(jī),這樣的話(huà),輸入域名 edunuke.firehare.com 就會(huì)被對(duì)應(yīng)該域名的目錄中。

進(jìn)一步說(shuō)明

為了說(shuō)明清楚 我們?cè)偬砑右粋€(gè)虛擬主機(jī)站點(diǎn) edunuke.firehare.com,首先到 /etc/apache2/sites-available/ 目錄中建立一個(gè)文件 edunuke。當(dāng)然這個(gè)文件名中是沒(méi)有 "." 或 "#" 這兩個(gè)字符的了。然后編輯該文件:

<VirtualHost 10.39.6.59>
ServerName edunuke.firehare.com
ServerAdmin ubuntu.firehare@firehare.com
DocumentRoot "/var/www/edunuke/"
ErrorLog "/var/log/apache2/edunuke_errors.log"
CustomLog "/var/log/apache2/edunuke_accesses.log" common
</VirtualHost>

設(shè)置的具體含義同上面的相似,這是我就不再多說(shuō)了。然后再運(yùn)行命令:

sudo a2ensite edunuke

這樣的話(huà),虛擬主機(jī)站點(diǎn) edunuke.firehare.com 就已經(jīng)安裝好了。這時(shí)你也可以在 /etc/apache2/sites-enabled/ 目錄中發(fā)現(xiàn)多了一個(gè)到 /etc/apache2/sites-available/edunuke 的軟鏈接。接下來(lái)就是將 Apache2 重啟來(lái)使虛擬主機(jī)站點(diǎn)運(yùn)行起來(lái):

sudo /etc/init.d/apache2 restart  這里可以使用reload 重新加載

這樣你在瀏覽器上輸入 edunuke.firehare.com 的話(huà),就會(huì)被指向 /var/www/edunuke 目錄了,而輸入其他指向本機(jī)的域名則都會(huì)指到缺省配置中的 /var/www 目錄中。熟悉 Apache2 的朋友會(huì)問(wèn)為什么這樣麻煩,放在一個(gè)文件中不也是可以嗎?為什么要用兩個(gè)文件呢?其實(shí)很簡(jiǎn)單,因?yàn)槿绻乙獙?duì) edunuke 站點(diǎn)進(jìn)行維護(hù)時(shí),我只要運(yùn)行命令:

sudo a2dissite edunuke
sudo /etc/init.d/apache2 restart

即可,這樣既可以維護(hù) edunuke 這個(gè)站點(diǎn),同時(shí)還不影響其他站點(diǎn)的正常運(yùn)行。

高級(jí)配置

上面談了一下簡(jiǎn)單的虛擬主機(jī)配置方法。這個(gè)基本上能滿(mǎn)足我們大部分的需要。但如果要是安裝 Zope+Plone 的話(huà),上面的這點(diǎn)設(shè)置是遠(yuǎn)遠(yuǎn)不夠的,由于 Zope+Plone 結(jié)構(gòu)所采用的端口并非是80端口,所以我們還得做端口重定向。為了能夠做這個(gè),我們得激活 Rewrite 和 Proxy 兩個(gè)模塊。激活模塊很簡(jiǎn)單,同站點(diǎn)配置目錄一樣,在 Apache2 中也有兩個(gè)模塊配置目錄:mods-available 和 mods-enabled。在 mods-available 目錄中的是所有可用的模塊,而在 mods-enabled 目錄中的則是已被安裝到 Apache2 中的模塊。由于在 mods-available 目錄中已經(jīng)有了 Rewrite 和 Proxy 模塊的配置引導(dǎo)文件,所以只需要簡(jiǎn)單地將其安裝到 Apache2 中即可。使用命令:

sudo a2enmod rewrite
sudo a2enmod proxy

然后,添加虛擬主機(jī)站點(diǎn) plone.firehare.com,同 edunuke 站點(diǎn)創(chuàng)建相似在/etc/apache2/sites-available/ 目錄中建立一個(gè)文件 plone。顯然這個(gè)文件名中是沒(méi)有 "." 或 "#" 這兩個(gè)字符的了。然后編輯該文件:

<VirtualHost 10.39.6.59>
ServerName plone.firehare.com
ServerAdmin ubuntu.firehare@firehare.com
ErrorLog "/var/log/apache2/plone_errors.log"
CustomLog "/var/log/apache2/plone_accesses.log" common

RewriteEngine on
RewriteRule ^/(.*) http://127.0.0.1:8081/VirtualHostBase/http/plone.firehare.com:80/plone/VirtualHostRoot/$1 [L,P]

<Proxy *>
Order Deny,Allow
Deny from all
Allow from all
</Proxy>

</VirtualHost>

這樣就安裝好了 plone.firehare.com 虛擬主機(jī)站點(diǎn),可以在瀏覽器中地址欄中輸入 http://plone.firehare.com 就可以重定向到 Zope+Plone 站點(diǎn)去了。