【XAMPP】【Apache】將多個網域綁定到一個IP (HTTP、SSL)

Two Domain On One IP

我在Google Domain上註冊了兩個Domain後,想都綁同一個實體IP(Public IP),並自動導向到不同網頁(網站)。





首先從你買域名的地方上做好設置,將兩個頂級域Domain(TLD) 透過類型A 都指向該IP

將Domain綁定到該IP位置,再開始做以下步驟


環境


伺服器是用XAMPP的Apache


80 port http 虛擬主機設定


先開啟  httpd.conf  (預設路徑在 C:\xampp\apache\conf)
確保這一行沒有被#註解掉

Include conf/extra/httpd-vhosts.conf



有這行代表他會去讀 httpd-vhosts.conf 的設定

接著修改 httpd-vhost.conf 檔案 (預設在 C:\xampp\apache\conf\extra)


直接在文件最底部 加上VirtualHost區塊

設定像這樣子
DocumentRoot 指向 網站根目錄位置
ServerName 打上域名
ServerAlias 打上別名(可以不用設置此行。若想看ServerAlias用途及差異,請至文章底部)

NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot "C:\www\BIZ"
    ServerName bizlove.net
    ServerAlias bizlove.net
</VirtualHost>


<VirtualHost *:80>
    DocumentRoot "C:\www"
    ServerName gjlmotea.com
    ServerAlias gjlmotea.com
</VirtualHost>

接著重啟Apache服務

http連線的設定就完成拉



在測試的時候因為快取的關係,多次以為是自己沒設定好,
後來用別台電腦開發現結果是OK的,建議使用網頁無痕模式開啟測比較準。



443 port https 虛擬主機設定

http弄好之後,再來要設定https

回到 httpd.conf  (預設路徑在 C:\xampp\apache\conf)
確保這一行沒有被註解掉



修改 httpd-ssl.conf 檔案 (預設路徑在 C:\xampp\apache\conf\extra)

使整份文件結構看起來大概像這樣:

<VirtualHost _default_:443>
DocumentRoot "C:\www"
ServerName gjlmotea.com
</VirtualHost>                                  

<VirtualHost *:443>
    DocumentRoot "C:\www\BIZ"
    ServerName bizlove.net
</VirtualHost>



(若需要永久導向,可另外加上這一行)
<VirtualHost _default_:443>
DocumentRoot "C:\www"
ServerName www.gjlmotea.com

# http to https 重導向
Redirect permanent / https://www.gjlmotea.com/
</VirtualHost>          

但連上也只會出現不安全網頁,
因為上面這是沒有SSL憑證的狀態



照著CertBot步驟申請憑證,有了SSL的證書後
最終整份 httpd-ssl.conf 檔案設定看起來會是這樣

<VirtualHost _default_:443>
    DocumentRoot "C:\www"
    ServerName www.gjlmotea.com
    SSLEngine on
    SSLCertificateFile "C:\Certbot\live\gjlmotea.com\fullchain.pem"
    SSLCertificateKeyFile "C:\Certbot\live\gjlmotea.com\privkey.pem"
    SSLCertificateChainFile "C:\Certbot\live\gjlmotea.com\chain.pem"
</VirtualHost>                                  

<VirtualHost *:443>
    DocumentRoot "C:\www\BIZ"
    ServerName bizlove.net
    ServerAlias bizlove.net
    SSLEngine on
    SSLCertificateFile "C:\Certbot\live\bizlove.net\fullchain.pem"
    SSLCertificateKeyFile "C:\Certbot\live\bizlove.net\privkey.pem"
    SSLCertificateChainFile "C:\Certbot\live\bizlove.net\chain.pem"
</VirtualHost>






SubDomain 子網域、網址前綴

SubDomain 是主域名下額外建立的子名稱

在 DNS頁面設定 SubDomain


接著在Apache設定 httpd-vhost.conf 檔案:

ServerAlias 是伺服器設定額外支援的域名或子域名


<VirtualHost *:80>
    DocumentRoot "C:\www\BIZ"
    ServerName bizlove.net
    ServerAlias www.bizlove.net xyz.bizlove.net
</VirtualHost>

或者使用萬用域名

<VirtualHost *:80>
    DocumentRoot "C:\www\BIZ"
    ServerName bizlove.net
    ServerAlias *.bizlove.net # 可支援萬用域名
</VirtualHost>


如此一來www.bizlove.net、xyz.bizlove.net便可連上同一個網域




歷史:

在早期1990年代,網路主要是用來提供多種不同的服務,而「不同的服務」會使用「不同的子域名 」
www.domain.com(Web服務,網站)
ftp.domain.com(FTP檔案傳輸服務)
mail.domain.com(郵件mail伺服器)

後來,因為雲端代管的方案盛行,較少會自行架設ftp以及mail
基本上會直接讓 domain.com 直接解析到伺服器
於是裸域名(domain.com)崛起,網址也比 www.domain.com 更為簡潔、簡短


最佳實踐:
擁有 gjlmotea.com 域名之後,也要設置 www.gjlmotea.com
雖然www是早期的domain作法,只是現在通常會沿用,
讓仍以習慣 www為主的使用者不會撲了個空。


DNS頁面會這樣設置
www.gjlmotea.com 透過CNAME指向原本域名



(當然,這種方式也可以,但是不推薦
原因:未來更動IP時,會需要更改兩筆紀錄,兩次的動作)



然後在Apache設定 httpd-vhost.conf 檔案:

<VirtualHost *:80>
    DocumentRoot "C:\www"
    ServerName gjlmotea.com
    ServerAlias www.gjlmotea.com
    Redirect permanent / https://gjlmotea.com/ # 若有https的話 此行有助於SEO,並建議保留最後/
</VirtualHost>



接著開始弄HTTPS,在CertBot步驟申請憑證
指令範例:certbot certonly --apache -d gjlmotea.com -d www.gjlmotea.com

之後修改 httpd-vhost.conf 檔案 

<VirtualHost _default_:443>

DocumentRoot "C:\www\gjlmotea"

ServerName gjlmotea.com

ServerAlias www.gjlmotea.com

SSLEngine on

SSLCertificateFile "C:\Certbot\live\gjlmotea.com\fullchain.pem"

SSLCertificateKeyFile "C:\Certbot\live\gjlmotea.com\privkey.pem"

</VirtualHost>




沒有留言:

張貼留言