生活札記 首頁 生活札記
提供一個可以讓大家無拘無束的討論園地
 
相簿相簿   常見問題常見問題   搜尋搜尋   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 


好文轉貼 -- Apache Virtual Host 最簡單的做法 (含 DNS,讓你建目錄等於建虛擬主機 )

 
發表新主題   回覆主題    生活札記 首頁 -> Web Server
上一篇主題 :: 下一篇主題  
發表人 內容
luckyhoo



註冊時間: 2006-07-19
文章: 447

發表發表於: 星期一 十一月 13, 2006 1:49 pm    文章主題: 好文轉貼 -- Apache Virtual Host 最簡單的做法 (含 DNS,讓你建目錄等於建虛擬主機 ) 引言回覆

http://phorum.study-area.org/viewtopic.php?t=17120&highlight=URL+Rewrite+module

引言回覆:

以下有部份取自原來我貼在 VBird 的文章
Apache 的 VH 其實設法相當多種,
相信大多數都是這種設法
<VirtualHost 1.2.3.80:80>
ServerAdmin admin@xxx.com.tw
DocumentRoot /home/httpd/html/enum
ServerName VH1.xxx.com.tw
ErrorLog logs/VH1-error.log
CustomLog logs/VH2-access_log common
</VirtualHost>
因為書本上教的,但是你改了這些值, httpd 要重新啟動...
高明點用 rewrite modules: (要有 RE 的基礎)
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.[^.]+\.host\.com$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^www\.([^.]+)\.host\.com(.*) /home/$1$2

這樣只要新增 /home 目錄下的目錄就是新增 VirtualHost 了,且 httpd 不需重開
(有很多不同設法, http://httpd.apache.org/docs/misc/rewriteguide.html)

另外一種方法:Mass Virtual Hosting (亦不需要重啟 httpd)
UseCanonicalName on
CustomLog /home/www/access_log "%{VHOST}e %h %l %u %t \"%r\" %>s %b" :
RewriteEngine on
RewriteMap lowercase int:tolower
RewriteMap vhost txt:/etc/vhost.map #路徑自己設
RewriteCond %{REQUEST_URI} !^/commonurl1/.*
RewriteCond %{REQUEST_URI} !^/commonurl2/.*
RewriteCond %{REQUEST_URI} !^/commonurlN/.*
RewriteCond %{HTTP_HOST} !^$
RewriteCond ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}]

#/etc/vhost.map 檔,加一行並新增對應目錄就是一個 VirtualHost
www1.xxx.com.tw:80 /home/www/www1
www2.xxx.com.tw:80 /home/www/www2
#這個方法也是 rewrite 的一種,且亦不需重新啟動 httpd,但是 httpd.conf 中要
#enable 這兩行 或是 complier 時以 static link 方式編進 httpd core
# rewrite 雖不容易懂,但懂了後就很好用
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c



最後一種方法最簡單:
UseCanonicalName Off
VirtualDocumentRoot /home/www/%0

#%0 就是 HOST_NAME,像 www.xxx.com.tw ,一個目錄就是一個 Virtual,
#詳細用法可以看這裏哦
# http://httpd.apache.org/docs-2.1/mod/mod_vhost_alias.html

%N 的意義
0 the whole name
1 the first part
2 the second part
-1 the last part
-2 the penultimate part
2+ the second and all subsequent parts
-2+ the penultimate and all preceding parts
1+ and -1+ the same as 0

通常若您做網站代管這種業務,目錄都會再依序分層,有學過資料結構和演算法的話,你就知道一個平的目錄,不如一個有深度規畫的目錄來的好:
/home/www/tw/com/xxx/
/home/www/tw/org/yyy/
那就是
VirtualDocumentRoot /home/www/....你自己去實驗了哦...


以上是 VH 的設定法,我們假設 IP 為 1.2.3.80, 那我們再來看看 dns 的部份

$TTL 3600
$ORIGIN xxx.com.tw.
@ IN SOA dummy.xxx.com.tw. admin.xxx.com.tw. (
1 38400 3600 864000 86400)
IN NS ns1
IN NS ns2
IN MX 10 mail
ns1 IN A 1.2.3.4
ns2 IN A 1.2.3.5
mail IN A 1.2.3.4
www IN A 1.2.3.80
; 以上都是一般的設定狀況...最後再加一筆
* IN A 1.2.3.80

這樣的 zone file 的內容,只要是查 除了 ns1/ns2/mail/www 外,
查 a.xxx.com.tw 或 xxxxxxxxxx.xxx.com.tw 得到的結果都是
1.2.3.80, 這也是大家習慣的萬用字元的用法

我們依據以下設法(httpd.conf):
UseCanonicalName Off
VirtualDocumentRoot /home/www/%0

在 /home/www/ 之下, 你每建一個 ???.xxx.com.tw 的目錄
(不含巳指明且不同 IP 的),就是建立一個 虛擬主機哦
EZ 吧 ~~我自己幾乎都是用這樣的做法,至少較最多人用的方法
都簡單許多哦

姨~什麼時候變 "榮譽博士" ?
好~改天再來貼一點獨門?活
( 哈 一定不是獨門....但是都是自己 study 來的)
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    生活札記 首頁 -> Web Server 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作