apache的基本設置主要交由httpd.conf來設定管理,我們要修改apache的相關設定,主要還是通過修改httpd.cong來實現。下面讓我們來看看httpd.conf的內容,它主要分成3大部分:
section 1:global environment
section 2:'main' server configuration
section 3:virtual hosts
【第一部分】
·servertype standalone
這表示apache是以standalone啟動,也可以是inetd。所謂standalone是指啟動一次來接聽所有的連線;而inetd是接到http的連線要求才啟動,隨著連線的結束而結束,這樣負擔是不是很但呢?所以一般都是以standalone啟動。
·serverroot "/usr/local/httpd"
此為apache的目錄
·#locdfile /use/local/httpd/logs/httpd.lock
保留預設值,不更動
·pidfile /usr/local/httpd/logs/httpd.pid
此文件記錄著apache的父處理程序id
·scoreboardfile /usr/local/httpd/logs/httpd.scoreboard
此文件存儲處理程序的信息
·#resourceconfig conf/srm.conf
·#accessconfig conf/access.conf
由于我們統籌由httpd.conf來管理,所以這兩個文件預設是注解起來的,可以保留預設值不更動
·timeout 300
設盯超時的時間。如果用戶端超過300秒還沒連上server,或server超過300秒還沒傳送信息給用戶端,即斷線。
·keepalive on
允許用戶端的連線有多個請求,設為off表示不允許
·maxkeepaliverequests 100
每次連線最大的請求樹木,數字愈大,效能愈好。0表示不限制
·minspareserver 5
·maxspareservers 10
minspareserver 5表示最少會有5個閑置的處理程序,如果實際的數目少于此數目,則會增加處理程序。maxspareservers 10表示最大的閑置處理程序數目,如果你的網站需求量很大,可以將此數目設大一些,大不要隨便將此數目設得太大。
·startservers 5
啟動時server的數目
maxclients 150
限制同時間最大的連線數目,當然不能設得太小,一旦達到此數目,就無法再增加用戶端
·maxrequestperchild 0
限制子處理程序結果前的要求數目,0表示不限制
·#listen 3000
·#listen 12.34.56.78:80
使用其它的連接端口或ip
·bindaddress *
可以接聽*(所有ip地址)、指定的ip地址或是完整的域名
·#loadmodule foo_module libexec/mod_foo.so
使用dso模塊
·#extendedstatus on
可檢閱apache的狀態信息,預設是off(注解起來)
【第二部分】
如果之前的servertype是inetd,請直接跳到serveradmin。
·port 80
standalone服務器接聽的連接端口,當然也可以是其他小于1023的端口號
·user nobody
·group nobody
執行httpd的用戶和群組
·serveradmin 管理員的電子郵件地址
這是管理員的電子郵件地址,如果apache有問題的話,會寄信通知管理員,當然你也可以建立一個專門負責web的帳號來收信
·servername 你的主機名稱
此為主機名稱,如果沒有域名,也可以用ip
·documentroot "usr/local/httpd/htdocs"
此目錄為apache放置網頁的地方,里面的index.html即為連到此主機的預設首頁
·
options followsymlinks
allowoverride none
此目錄設定用戶放置網頁的目錄(public_html)的執行動作。詳細的目錄存取方法會在后面說明
·
options indexes folloesymlinks
allowoverride none
order allow,deny
allow from all
此目錄設定apache的網頁目錄(htdocs)的執行動作
·userdir public_html
用戶可在自己的目錄下建立public_html目錄來放置網頁,輸入http://主機地址/~用戶名稱即可連接到...勞撤胖玫牡胤?/a>
·directoryindex index.html
這里設定預設主頁的名稱
·accessfilename .htaccess
這個是控制存取的文件名稱,一般采用預設的.htaccess名稱,后面會說明htaccess的使用方法
·
order allow,deny
deny from all
這用來防止其他人看到.ht開頭的文件內容,不僅是保護.htaccess的內容,還保護.htpasswd的內容。當然也可以直接寫成。如果你有更改accessfilename,例如將.htaccess改成.accessht,請記得也要在此做相關的更改,如此才能防止其他人看到哦
·#cachenegotiateddocs
注解起來是告訴proxy不要將互動產生的文件存入cache,如果拿掉#,則會存在cache中
·usecanonicalname on
使用標準的名稱,預設是on。假設有一個web server的全名是www.sample.com,一般稱為www;如果us...羑ttp://www/abc
·typeconfig /usr/local/httpd/conf/mime.types
指定存放mime文件類型的文件。你可以自行編輯mime.types文件。
·defaulttype text/plain
當server不認得此文件類型時的預設格式,此設定是當成一般文字
·
mimemagicfile /usr/local/httpd/conf/magic
mod_mime_magic模塊可使server由文件內容決定其mime類型。如果有載入mod_mime_magic模塊,才會處理mimemagicfile這一段。如果是…,則表示如果沒有載入該模塊,才會處理這一段
·hostlookups off
如果為on,則每次都會向name server解析該ip,記錄此連線的名稱(例如www.apache.org)自換岷牟簧偈奔洌...為off,僅記錄ip
·errorlog /usr/local/httpd/logs/error_log
指定發生錯誤的記錄文件(error_log)位置。如果在沒有指定發生錯誤的記錄文件,則會沿用此文件
·loglevel warn
記錄分成很多等級,在此是warn。各等級如下: 等級 說明
debug debug信息
info 普通信息
notice 重要信息
warn 警告信息
error 發生錯誤
crit 緊急情況
alert 馬上要處理的情況
amerg 系統快要死了
·logformat "%h %l %u %t/"%r/"%>s %b/"{referer}i/"/"${useragent}i/""combined
logformat "%h %l %u %t"%r/"%>s %b"commom
logformat "%{referer}i->%u"referer
logformat "%{user-agent}i"agent
自定四種記錄格式:combined、common、referer、agent
·customlog /usr/local/httpd/logs/access_log common
存取的記錄文件(access_log)使用自定的common格式
·#customlog /usr/local/httpd/logs/referer_log referer
#customlog /usr/local/httpd/logs/agent_log agent
#customlog /usr/local/httpd/logs/agent_log combined
這三個記錄文件也是使用自定義格式(分別是referer、agent、combined),不過注解起來表示未使用這三個文件
·serversignature on
設為on時,在server所產生的網頁(像是錯誤發生時)上,會有apache的版本、主機、連接端口的一行信息;如果設為email,則會有mailto:給管理員的超鏈接
·alias /icons/ "/usr/local/httpd/icons/"
使用較短的別名,其格式為:alias 別名 原名。
·scriptalias /cgi-bin/ "/usr/local/httpd/cgi-bin/"
和alias一樣,只是這是設定server script的目錄
·indexoptions fancyindexing
顯示好看的文件清單(配合下面各文件所對應的圖形)
·addiconbyencoding(cmp,/icons/compressed.gif)x-conpress x-gzip
·addicon /icons/blank.gif^^blankicon^^defaulticon/icons/unknow.gif
這些是在顯示文件清單(之前所說的fancyindex)時,各種文件類型的對應圖形。例如.ps .si .eps這三種文件的表示圖形都是a.gif
·#adddescription "gzip conpressed document" .gz
#adddescription "tar archive" .tar
#adddescription "gzip compressed tar archive" .tgz
這些是在顯示文件清單時,在文件后面附上說明,其格式為:
adddescription "說明" 文件名
例如:adddescription "it is private txt" my.txt
·readmename readme
顯示文件清單時,在最下面顯示readme的文件內容
設置cgi腳本/將httpd.conf做為唯一的配置文件/用戶授權和訪問控制等
關于apache的配置及使用,在linuxaid中已經有不少文章做了詳細的闡述,本文討論了在使用apache時,有關配置文件的使用及對文件的訪問控制等內容,算是對apache的使用所做的一些補充吧!
如果您對apache有一定的了解,特別是對幾個配置文件有一定的了解,這將會有助于您對本文內容的理解;如果恰巧您不是很了解這幾個配置文件的使用,那么就借著這個機會來一起熟悉一下吧。
一、關于cgi執行腳本的配置
這里有兩種設置cgi腳本的方法。第一、cgi的腳本文件以.cgi為擴展名;第二、設置腳本可執行目錄。但是這兩種方法都需要將要執行的文件設置為711,才可以被執行。
第一種方法,我們需要在access.conf文件種將你要發行的目錄設置為option execcgi all,在srm.conf資源配置文件中,加上下列一句:
addhandle cgi-script .cgi
這樣在所有的目錄種只要你的文件是.cgi為擴展名的,且文件訪問權限為711的,無論給文件在你發行目錄的任何一個地方都可以做為cgi被apache服務器調用。這種方法一般沒有第二種方法安全。
第二種方法,是將一個目錄作為一個可執行目錄,將所有的cgi文件都放在其中,這里就不一定非得是以.cgi為擴展名得文件可以執行,而是只要有711屬性的文件就可以被執行,而且其它的非可執行文件都被禁止訪問。我們的默認配置文件種就有一個很好的例子:
access.conf:
<directory /home/httpd/cgi-bin/>
allow override none
options execcgi
</directory>
srm.conf
scriptalias /cgi-bin/ /home/httpd/cgi-bin/
這樣只要在/home/httpd/cgi-bin/目錄中的可執行文件都可以被web服務器調用,而其它的非可執行文件將被拒絕訪問。
二、配置用戶的發行目錄
這里有兩種設置方法:
第一種是系統的默認方法,即用戶目錄下的public_html目錄為用戶的發行目錄,且默認的主頁文件為index.html,且該目錄不支持cgi。
第二種是在其它目錄種專門為用戶設置發布目錄,如我想在/home/html目錄做為用戶的web目錄,那管理員就應該在該目錄下為每一個用戶設置一個子目錄,如:/home/html/user01、/home/html/user02等。那么,你的srm.conf文件中的userdir后面就不能再是public_html了,應該改為:userdir /home/html/*/,注意這里的“*”代表anyone,當你再瀏覽器中請求一個如http://www.domain/~user01時,apache...ndex.html文件。
這種設置不需要到access.conf中設置該目錄的訪問屬性,還有,當我們設置虛擬主機時也不用設置目錄的訪問屬性,但是如果你想讓某個目錄具有cgi權限,都要到access.conf文件中去配置目錄的訪問權限,如:你想讓你的所有用戶在他們的發布目錄中具有cgi訪問權,則需要在你的access.conf中這樣設置:
<directory /home/html/*/cgi-bin/>
allow override none
options execcgi
</dirctory>
注意這里設置用戶目錄中的cgi-bin子目錄為cgi執行目錄,這是一種安全的設置,而且也是一種unix的習慣。
三、如何將apache服務器設置為inetd的子服務
當你安裝了apache后,默認設置為standalone方式運行,如果你想將它設置為inetd的子服務,首先在每次激活linux時不激活httpd,然后編輯/etc/inetd.conf,在其中加入下列語句:http stream tcp nowait root /usr/sbin/httpd httpd
然后重新激活inetd服務器。這樣你用ps -aux命令查看進程運行情況時,你不會發現httpd的進程的存在,但是一旦有客戶請求一個頁面時,inetd就激活一個httpd進程為該請求服務,之后就自動釋放,這種運行方式有助于節省系統資源,但是如果你的web服務很重要,一般不建議設置為這種方式運行。
四、將httpd.conf做為唯一的配置文件
在apache中給用戶提供了三個配置文件: srm.conf、 access.conf 和 httpd.conf files。 實際上這三個文件是平等的,所有的配置都可以放在一個單獨的httpd.conf文件中,事實上在apache 1.3.2中就已經這樣做了,在httpd.conf中應包括以下兩條指令來防止apache對srm.conf和access.conf兩個配置文件的訪問:
accessconfig /dev/null
resourceconfig /dev/null
在apache1.3.2中只要注釋掉以下這兩行即可:
accessconfig conf/access.conf
resourceconfig conf/srm.conf
五、用戶授權和訪問控制
你也許在訪問某些網站時會遇到過這樣的情況,當你點擊某個連接時,你的瀏覽器會彈出一個身份驗證的對話框,要求輸入賬號及密碼,如果沒有,就無法繼續瀏覽了。有人會以為這是用cgi做出來的,其實不然,這是www服務器的用戶授權和訪問控制機制在發揮作用。
你是否還記得在設置apache服務環境的過程中,有<directory>……..<./directory>這個指令,可以對不同的目錄提供不同的保護。但是這樣的設定,需要重新啟動服務器才會生效,靈活性較差,通過accessfile指令指定訪問控制文件的方式則比較靈活,在apache服務器中設置用戶的訪問控制權限步驟如下:
1、首先對httpd.conf文件進行設置如下:
<directory /home/httpd/html>
# allowoverride fileinfo authconfig limit
# options multiviews indexes symlinksifownermatch includesnoexec
options includes followsymlinks indexes
allowoverride all //*注意allowoverride 一定要設置為all,這樣后面的.htaccess文件才會起作用
<limit get post options propfind>
order allow,deny
allow from all
</limit>
# <limit put delete patch proppatch mkcol copy move lock unlock>
# order deny,allow
# deny from all
# </limit>
</directory>
#指定配置存取控制權限的文件名稱
accessfilename .htaccess
2、創建.htaccess文件內容
要控制某目錄的訪問權限必須建立一訪問控制文件,文件名前面指定的“.htaccess”,其內容格式如下:
authuserfile 用戶帳號密碼文件名
authgroupfile 群組帳號密碼文件名
authname 畫面提示文字
authtype 驗證方式
<limit get>
密碼驗證方式
</limit>
用戶驗證方式authtype目前提供了basic和digest兩種。
密碼檢驗設定方法與httpd.conf中的相關設定相同。
具體例子如下:
authuserfile /etc/secure.user
authname 安全認證中心
authtype basic
<limit get>
require valid-user
</limit>
3、建立用戶密碼文件
如果你是第一次創建用戶密碼,命令格式如下:
htpasswd -c 密碼文件名 用戶名稱
在上面的例子中,我們將用戶密碼文件放到了/etc/secure.user文件中,所以這里應按照如下進行操作:
htpasswd -c /etc/secure.user sword
程序會提示你輸入兩次用戶的口令,然后用戶密碼文件就已經創建sword這個用戶也添加完畢了。
如果要向密碼文件中添加新的用戶,按照如下命令格式進行操作:
htpasswd 密碼文件 用戶名稱
這樣,重新啟動httpd后,進行該web目錄時就會有一個對話框彈出,要求輸入用戶名及用戶口令了。
4、如何減少訪問控制對apache性能的影響
頻繁的使用訪問控制會對apache的性能產生較大的影響,那么,如何才能減少這種影響呢?最簡單也是最有效的方法之一就是減少.htaccess文件的數目,這樣可以避免apache對每一個請求都要按照.htaccess文件的內容進行授權檢查。它不僅在當前的目錄中查找.htaccess文件,它還會在當前目錄的父目錄中查找。
/
/usr
/usr/local
/usr/local/etc
/usr/local/etc/httpd
/usr/local/etc/httpd/htdocs
/usr/local/etc/httpd/htdocs/docs
通常在根目錄下沒有htaccess文件,但apache仍然會進行例行檢查以確定該文件確實不存在。這是影響很影響服務器工作效率的事情。下面的方法可以消除這個討厭的過程:將allowoverride選設置為none,這樣apache就會檢查.htaccess文件了。將/根目錄的allowoverride選項設為none,只將需要進行訪問控制的目錄下的allowoverride選項設置為all,如下面的例子中將/根目錄的allowoverride 選項關閉了,只打開了/usr/local/etc/httpd/htdocs目錄下的allowoerride選項,這樣,系統就只在/usr/local/etc/httpd/htdocs中檢查.htaccess文件,達到的提高服務效率的目的。
<directory />
allowoverride none
</directory>
<directory /usr/local/etc/httpd/htdocs>
allowoverride all
</directory>
如果除了根目錄以外,還有其它存放www文件的目錄,你也可以采取同樣的方法進行設置。比如:如果你使用userdir來允許用戶訪問自己的目錄,allowoverride的設置如下:
<directory /home/*/public_html>
allowoverride fileinfo indexes includesnoexec
</directory>
5、防止用戶訪問指定的文件
系統中有一些文件是不適宜提供給www用戶的,如:.htaccess、htpasswd、*.pl等,可以用<files>達到這個目的:
<files .htaccess>
order allow,deny
deny from all
</files>
用戶訪問控制三個.htaccess文件、.htpasswd和.htgroup(用于用戶授權) ,為了安全起見,應該防止用戶瀏覽其中內容,可以在httpd.conf中加入以下內容阻止用戶對其進行訪問:
<files ~”/.ht”>
order deny, allow
deny from all
</files>
這樣這三個文件就不會被用戶訪問了。
6、限制某些用戶訪問特定文件
<directory>可以對目錄進行約束,要限制某些用戶對某個特定文件的訪問可以使用<location>,比如:不允許非domain.com域內的用戶對/prices/internal.html進行訪問,可以用如下的設置:
<location /prices/internal.html>
order deny,allow
deny from all
allow from .domain.com
</location>
如果你要授于相應權限的機器沒有公開的域名,請在你的/etc/hosts文件中,將其ip地址映射到某個指定的名稱,然后在location中對其進行設置,否則該選項是不起作用的。
7、只接受來自特定鏈接的訪問
例如,只讓所有來自 http://www.sina.com.cn/* 的鏈接的用戶進入此目錄,由其它鏈接來的訪客都不得進入; " * "表示此網站底下所有的鏈接。其中的 http://www.sina.com.cn/* 也可以是:http://202.106.184.200/* 或是指定文件 http://www.sina.com.cn/news.html
.htaccess文件的內容如下:
authuserfile /dev/null
authgroupfile /dev/null
authname exampleallowfromspecificurl
authtype basic
<limit get>
order deny,allow
deny from all
referer allow from http://www.sina.com.cn/*
</limit>
六、如何通過apache訪問掛接到mnt中的目錄內容
在linux下,要瀏覽光盤的內容,必須要先將光盤掛接到/mnt/cdrom上,在linux下訪問dos或其它分區也一樣,都要將其先掛接到/mnt下。下面提供的方法,可以通過apache顯示上掛的目錄內容:
1、 先將需要掛接的內容掛接到mnt下,如:
mount –t iso9660 /dev/cdrom /mnt/cdrom
2、修改/usr/local/etc/httpd/conf中的srm.conf文件(在apache1.3.2中修改httpd.conf)
加入別名支持:
# alias fakename realname
# alias for netware server //
alias /netware/ /mnt/mydom_nw/vol1/home/htmldocs/
alias /winnt/ /mnt/mydom_nt/
alias /unix/ /mnt/mydom_unix
其實這一步還有個最簡單的方法就是直接在www文件目錄下建立鏈接目錄,比如:
ln –s /mnt/mydom_nt/ winnt
也能達到同樣的效果。
3、最后,用directory 分別指定用戶對上面這幾個目錄的訪問權限:
<direcory “/mnt/mydom_nt”>
options indexes multiviews
allowoverride none
order allow,deny
allow from all
</directory>
注意, options中的indexes一定要注明,否則被打開的目錄中若沒有index.html文件,用戶無法瀏覽整個目錄的結構,服務器會返回錯誤指示。
這些工作都完成后,別忘了重新啟動apache。在客戶端通過 http://www.yourdomain/cdrom/訪問光盤內容,其余系統以此類推
#
新聞熱點
疑難解答