服務器中有兩個不一樣的項目siteA和siteB,咱們須要把頂級域名www.siteA.com綁定到項目siteA,將二級域名siteB.siteA.com綁定到項目siteB中。因而,咱們使用了基於名稱的虛擬主機來進行設置。php
首先,在對服務器進行配置以前,先確保你的域名已經進行正確的解析。針對以上的情景,咱們須要將爲頂級域名和二級域名在域名服務商中進行解析(假設服務器IP爲121.199.XXX.XXX):web
主機記錄 | 記錄值(IP) |
---|---|
siteB | 121.199.XXX.XXX |
www | 121.199.XXX.XXX |
驗證是否解析成功,能夠在瀏覽器輸入www.siteA.com/siteA 和 siteB.siteA.com/siteB,查看是否能夠訪問到相應服務器。apache
咱們的服務器系統爲ubuntu12,apache的web服務器,下面以該系統爲基礎對服務器配置進行說明:ubuntu
(1)安裝好apache之後默認有一個叫default的虛擬主機。在 /etc/apache2/sites-enabled中,存在一個000-default 的軟連接文件,實際鏈接的是 /etc/apache2/sites-available 目錄中的 default 文件,這是一個默認的配置文件,它指向的是服務器的站點根目錄/var/www,咱們能夠模仿該配置文件建立兩個新的虛擬主機。瀏覽器
(2)複製虛擬主機的默認配置文件,siteA的虛擬主機名稱爲www.siteA.com,siteB的虛擬主機名稱爲siteB.siteA.com,服務器
$ copy /etc/apache2/site-available/default /etc/apache2/site-available/www.siteA.com $ copy /etc/apache2/site-available/default /etc/apache2/site-available/siteB.siteA.com
複製好後,咱們打開www.siteA.com的配置文件,將其修改成以下:tcp
<VirtualHost *:80> ServerName www.siteA.com ServerAdmin admin@email.com DocumentRoot /var/www/siteA <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/siteA_error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/siteA_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>
主要更改有以上內容,具體的含義以下:ServerName www.siteA.com
:設置虛擬主機的域名,www.siteA.com能夠是你註冊的任何域名ServerAdmin admin@mail.com
:設置該虛擬主機網管員的郵件DocumentRoot /var/www/siteA
:設置該虛擬主機的主目錄路徑ErrorLog /var/log/apache2/siteA_error.log
:設置該虛擬主機的出錯信息CustomLog /var/log/apache2/siteB_access.log combined
:設置該虛擬主機的訪問信息ide
保存好後,啓用站點,重啓apache。網站
$ sudo a2ensite www.siteA.com
這時在/etc/apache2/sites-enabled 中會有指向www.siteA.com配置文件的軟鏈接。.net
$ sudo /etc/init.d/apache2 restart
如今查看是否綁定成功,在瀏覽器中輸入 www.siteA.com,看看是否自動訪問 服務器中 的項目siteA的index文件,若是是,則說明綁定成功。
二級域名siteB.siteA.com的綁定方式跟上面同樣,修改配置文件
<VirtualHost *:80> ServerName siteB.siteA.com ServerAdmin admin@email.com DocumentRoot /var/www/siteB <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/siteB_error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/siteB_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>
啓用站點,重啓apache
$ sudo a2ensite siteB.siteA.com $ sudo /etc/init.d/apache2 restart
完成後,在瀏覽器中輸入 siteB.siteA.com,查看是否自動訪問到 siteB/index. 中。
注意:綁定域名後,項目代碼中的路徑訪問和跳轉最好不要絕對路徑,例如若是代碼中使用重定向到 http://serverName/siteA/login...,當使用域名訪問時,會跳轉到http://www.siteA.com/siteA/lo...,這時候會出現 404 NOT FOUND的錯誤,由於www.siteA.com已經綁定了siteA的目錄,這時候它會去訪問siteA/siteA/login.php的文件,該文件實際上是在siteA/login.php目錄下的。
若是你想要停用以上的站點,可使用命名:
$ sudo a2dissite www.siteA.com $ sudo a2dissite siteB.siteA.com
重啓apache後,域名綁定就會被取消了。
具體原理說明能夠參考:http://wiki.ubuntu.org.cn/Apa...
附註說明:
域名解析的「記錄類型」說明:
記錄類型 | 說明 |
---|---|
搭建網站 | 要將域名指向主機服務商提供的IP地址,請選擇「A記錄」;要將域名指向主機服務商提供的另外一個域名,請選擇「CNAME記錄」。 |
創建郵箱 | 須要設置「MX記錄」,根據郵箱服務商提供的MX記錄填寫。 |
A記錄 | 將域名指向一個IPv4地址(例如:10.10.10.10),須要增長A記錄 |
CNAME記錄 | 若是將域名指向一個域名,實現與被指向域名相同的訪問效果,須要增長CNAME記錄 |
MX記錄 | 創建電子郵箱服務,將指向郵件服務器地址,須要設置MX記錄 |
NS記錄 | 域名解析服務器記錄,若是要將子域名指定某個域名服務器來解析,須要設置NS記錄 |
TXT記錄 | 可任意填寫(可爲空),一般用作SPF記錄(反垃圾郵件)使用 |
AAAA記錄 | 將主機名(或域名)指向一個IPv6地址(例如:ff03:0:0:0:0:0:0:c1),須要添加AAAA記錄 |
SRV記錄 | 記錄了哪臺計算機提供了哪一個服務。格式爲:服務的名字.協議的類型(例如:_example-server._tcp) |
顯性URL | 將域名指向一個http(s)協議地址,訪問域名時,自動跳轉至目標地址(例如:將www.net.cn顯性轉發到www.hichina.com後,訪問www.net.cn時,地址欄顯示的地址爲:www.hichina.com)。 |
隱性URL | 與顯性URL相似,但隱性轉發會隱藏真實的目標地址(例如:將www.net.cn隱性轉發到www.hichina.com後,訪問www.net.cn時,地址欄顯示的地址仍然爲:www.net.cn)。 |
「主機記錄」說明:
要將域名example.com解析爲www.example.com,在主機記錄(RR)處填寫www便可。
主機記錄就是域名前綴,常見用法有:
主機記錄類型 | 說明 |
---|---|
www | 將域名解析爲www.example.com,填寫www; |
@ | 將域名解析爲example.com(不帶www),填寫@或者不填寫; |
將域名解析爲mail.example.com,一般用於解析郵箱服務器; | |
* | 泛解析,全部子域名均被解析到統一地址(除單獨設置的子域名解析); |
二級域名 | 如:mail.example.com或abc.example.com,填寫mail或abc; |
手機網站 | 如:m.example.com,填寫m。 |