2006年(25)
分类: LINUX
2006-09-09 11:50:30
如果您夠幸運﹐有註冊了自己的 domain ﹐還有固定的 IP 地址和 internet 連線﹐架設一個 WWW 伺服器恐怕是必不可少的事情了吧﹖就算您還沒打算正式連上 internet ﹐在自己的 intranet 上面能有一個 WWW 伺服器也是非常便利的。如果您當初安裝 Redhat 6.0 的時候選擇‘Everything’的話﹐您已經有一個叫 apache 的 WWW 伺服器了。而事實上﹐現在 internet 上面的網站﹐大部份都是用 apache 來做伺服器的啦。
設定WWW
要設定 apache ﹐關鍵的檔案都在 /etc/httpd/conf/ 這個目錄之內﹐而我們只需修改三個檔案就可以了﹕
access.conf
httpd.conf
srm.conf
然而﹐如果您在 access.conf 和 srm.conf 中看到下面字眼﹕
# # To avoid confusion, it is recommended that you put all of your # Apache server directives into the httpd.conf file and leave this # one essentially empty. # |
那麼﹐所有的設定都將改在 httpd.conf 進行﹐這是可能是版本的不同所至。(tips:如果您在參考本例子的時候是用 vi 進行編輯的話﹐可以用 “ / ”鍵尋找關鍵字眼再做修改。)
-- access.conf --
第一個 access.conf檔案﹐用來設定一些目錄權限的﹕
|
在這裡﹐我定義了兩個目錄(它們必須是已經存在的)﹐當使用者透過 HTTP 連接進來的時候所擁有權限。因為‘/’(根目錄)至關緊要﹐所以我不開放任何 Option﹐也不容許 Override (在設定後面的 srm.conf 檔案時﹐可以使用‘.htacess’來改變原有目錄的權限)。
不過﹐我卻允許在 /home/httpd/virtual/virtual1/ 目錄下面使用 index ﹐也就是在沒有預設 index.html (在 srm.conf 中設定) 的時候﹐會將目錄內容顯示在流覽器上﹔而‘FollowSymLinks’呢﹐則允許透過 Symbolic Link 方式連接到此目錄外的位置。 同時﹐在這個目錄下﹐我也允許 AllowOverride All 的設定﹐這個我將在 srm.conf 裡面再解釋。
另外﹐我們還可以特別設定這個目錄的連接限制﹐‘order allow,deny’是先列出允許連接的範圍﹐然後到禁止連接的範圍。不過我這裡完全開放連接了(allow from all)。但您如果有必要的話﹐可以在此增加一些 deny 的句子在後面﹐例如﹕
allow from all |
至於其他設定﹐您慢慢看檔案上面的說明吧﹐通常接受預設值就可以了。
-- httpd.conf --
然後﹐我們看看 httpd.conf 這個檔案。前面那些一大堆的‘LoadModule’和‘AddModule’可以不理﹐除非您真的知道如何修改﹐您唯一要做的是確定它們的路徑正確就可以了。
然後到﹕
ServerType standalone |
port 80 |
HostnameLookups off |
User nobody |
ServerAdmin root@redhat52.siyongc.domain |
BindAddress * |
Listen 127.0.0.1:80 Listen 192.168.0.17:80 Listen 203.30.35.134:80 Listen 10.11.127.100:8080 Listen 192.168.1.17:80 ..... |
(雖然﹐您不設定 BindAddress 和 Listen 也照樣可以讓虛擬主機工作﹐但如果您的伺服器還提供 http-proxy 服務﹐或使用其它的 port 提供其它 httpd 服務﹐則要進行設定了。)
接下有一大堆東東﹐有興趣自己看吧﹐我見了早就逃之夭夭了呢~~~
ServerName |
...... |
#ProxyRequests On |
架設虛擬主機
有好多朋友﹐或許會在同一台機器上﹐架設多台 WEB 伺服器﹐這就是所謂的“虛擬主機”啦。在 APACHE 上面架設虛擬主機﹐我們有兩種方法﹕IP-Based 和 Name-Based 。這兩個方法有什麼不同呢﹖
IP-Based 是在早期的網頁伺服器上面設定虛擬主機﹐要求每一個虛擬主機都分別有各自不同的 IP﹐這或許是有多張網路卡﹐或是用 IP Aliase 的方式捆綁多個 IP 。但這畢竟是有限的﹐尤其是現在 IP 位址嚴重不足的情況之下。為了解決這個問題﹐後來就發展出 Name-Based 的虛擬主機架設方法﹐也就是將所有的虛擬主機都架在單一的 IP 之上﹐這提供的便利當然是非常明顯的﹐特別是對那些提供 hosting 服務的 ISP/ICP 業者來說﹐更是救藥良方。
下面﹐讓我們先看看 IP-Based 的虛擬主機架設方法﹕
在 httpd.conf 檔案最後部份﹐我增加了這些句子﹕
無論如何﹐我們首先要確定 /home/httpd/virtual/virtual1/ 這個目錄存在(回顧一下 access.conf 檔案﹕我已經為這個目錄設定好權限了)。同時 的 也設定好(包括正反解)﹔而且使用 為虛擬主機建立新的 IP 地址(可以有別於目前的子網範圍)。
如果您還有更多的虛擬主機要設定﹐將上面的句子 copy 幾份﹐修改好各自的內容就可以了。有時候﹐您或許要修改前面提到的 Listen 選項﹐例如﹕
Listen :80 |
那麼﹐我們使用 Name-Based 又是怎麼設的呢﹖
和 IP-Based 一樣﹐首先我們要確定 DNS 的名稱﹐以及 access.conf 的目錄已經設定好。然後我們在
NameVirtualHost 192.168.0.17
不過使用 NameVirtualHost 模式後﹐原本建立在此 IP 的“真實”主機卻會消失掉﹐您必須將之當成 VirtualHost 一樣﹐也為之建立好
或許﹐有時候﹐您還想一個主頁有多個虛擬主機名稱﹐這一點也不難﹐您只要在
ServerAlias second.virtual.host.name
或許您還會問﹕有沒有更刁鑽的啊﹖我可不可以將 IP-Based 和 Name-Based 混合起來設定啊﹖
哈哈﹐當然可以啦﹐不過我不詳細說明啦﹐請您自己參考 。
-- srm.conf --
最後﹐我們看一下 srm.conf 這個檔案的內容﹕
DocumentRoot /home/httpd/html |
UserDir html |
Alias /netman /home/netman/html/ |
又或者用 link 的方式﹕
ln -s /home/netman/html /home/httpd/html/netman |
這樣﹐您輸入 http:///netman 就可以辦到了。不過﹐您得要確定 /home/httpd 這個目錄在 access.conf 裡面有‘Options FollowSymLinks’的設定。
AccessFileName .htaccess |
AuthUserFile /home/httpd/virtual/virtual1/dir1/.htpwd AuthName dir1pwd #可以用任意名稱 AuthType Basic |
您可以用其它檔案名稱代替上面那個 .htpwd檔案﹐它是用以下命令建立的﹕
htpasswd -c /home/httpd/virtual/virtual1/dir1/.htpwd user1 |
接下來﹕
DirectoryIndex index.html index.shtml index.cgi index.htm default.htm |
AddType text/html .shtml .htm |
至於其他設定﹐有興趣自己看啦﹐我又偷懶去了 ^_^
最後﹐執行 ﹕
/etc/rc.d/init.d/httpd reload |
來讓設定生效﹐一定要留意“[ OK ]”是否出現哦。
測試
然後﹐您就可以在流覽器的 URL 輸入 apache 主機名稱﹐當你看到“It worked!”畫面﹐應該就好了。如果您沒看到﹐確定 httpd 是否真被啟動了﹐留意一下 DNS 是否設定對﹐還有連線﹑IP﹑Port 等地方。
如果是虛擬主機﹐更要確定 IP aliase 是否被正式啟動了﹐同時 routing 也要確定正確。當然﹐在 /etc/httd/conf 下面的檔案也要仔細看看有沒疏忽之處啦﹐例如﹕的
如果您流覽使用者個人網頁的時候碰到“Aceess Prohibited”的問題﹐多是存放網頁的目錄和其上級目錄的權限問題了﹐用‘chmod 755’就應該可以解決(或許還要包括上級目錄)。
如果您在開機的時候﹐停在 httpd 上面了﹐這可能是 httpd.conf 檔案中的 ServerName 找不到。確定您的 /etc/hosts 檔案有它的記錄﹐或者能夠透過 DNS 查詢得到就可以了。使用 ip-base 的 virtual host 也要注意這點﹐但使用 name-base 則可以忽略。
還有一點您可能要倍加小心﹕用來做測試的 browser 有時候顯示出來的畫面是從 cache 那裡來的﹐而未必是來自 server 那端﹐尤其是您未留意自己在 offline 的情況下。這樣很容易把您欺騙了﹐為了確定您的測試是真實的﹐我建議您最後的一次測試應該重新開機後再進行。
還不得不再提醒一次﹕前面提到的三設定檔為計較舊的 Apache 設定檔﹐新版的都已經全部整合在 httpd.conf 裡面了。如果您看得糊塗﹐那就請花點時間找找相應字眼吧。
有關更詳細的 Apache 安裝﹐推薦您參閱 。