WordPress / 架站教學四:設定 Domain Name 及 Apache 參數 (單一WordPress)

WordPress / 架站教學四:設定 Domain Name 及 Apache 參數 (單一WordPress)

關於連線到我們網站的網址,有兩件重要的事情要設定:指定 Domain Name設定安全的 SSL 連線 (下一篇)。

本篇前半段花了一些篇幅簡單介紹了 domain name 和 DNS 的運作方式和基本需要知道的概念,如果讀者已經對這部分熟悉或是就想直接查詢設定方式可以直接跳到 指定 Domain Name 給本地端 server 這一節。

另外,架站教學系列是針對單一 WordPress Bitnami 的教學,多站 (Multisite WordPress) 的設定會遠比單一網站複雜得多,可以參考多站教學系列文章。

Domain Name 簡介

在網路的世界當中 IP 位址就好像是每個裝置的地址,但那是給電腦看的,要人類記得一長串的數字 xxx.xx.xx.xx 實在是不容易也不好辨識,所以才有了 Domain Name 的出現。Domain name 就像我們常看到的網址,通常是由一個 domain 加上尾綴組成,像是 .com, .org, .com.tw, .co.uk 等等。

wp-tutorial-4-1-domain-name

以這個網站為例,charlestw.com 就是我的 domain name。那麼前面的 note 呢?它就是 sub domain (子網域)。在註冊網域名稱的時候,只會註冊後面的 domain name,那整個域名就會屬於你的。之後你可以在前面加上任何的子網域名稱 (前綴) 指向任何 IP 位址,所有的子網域都隸屬於這個 domain name 之下的 sub domain。

通常註冊 domain name 都是要付費的,不過費用不貴,大概都落在 8~15 美金/年左右。除非你想要註冊特別的名稱或保留自,那有可能會變成競價拍賣的方式取得,不過一般中小型或個人網站通常不需要用到。

網址是怎麼運作的呢?要如何將一串文字指向一個 IP 位址?

這裡要介紹兩個角色的出現:網址供應商 (domain name provider)DNS (domain name server)

域名 (domain name) 可想而知當然是有限的。或者應該說文字的變化當然是非常多種的組合,在規範限制之內,可以申請任意長度、文字變化的域名。一但一個域名被某人或某單位註冊走之後,除非再度釋出否則域名就只能被一個人使用,所以可以註冊的域名當然是越來越少。

如果你想要註冊一個 domain name,你可以上網找網址供應商註冊網址,像是 name.comGoDaddy、中華電信等等。每個供應商提供的服務內容和價格都不太一樣,這在申請之前可以多多比較。

在你註冊了一個 domain 之後,就可以在你的供應商的介面中設定網址指向某個 IP 位址。但當一個遠在地球另一端的使用者在瀏覽器上輸入了網址之後,他又怎麼知道這個網址是對應到哪一個 IP 位址呢?這時候就是 DNS 的出現了。

DNS 是一個非常重要的伺服器,全世界有許多大大小小的 DNS。從字面上來看大概可以猜出這個伺服器最主要的任務就是將網址指向正確的 IP 位址。這個運作的邏輯是這樣的:

當我們在網址供應商的介面上設定好網址對應的 IP 位址時,這時網址供應商就會自動通知 DNS 更新列表,將你的網址與 IP 位址這樣的對應關係寫入資料庫當中。所以下次只要有人輸入了這樣的網址,DNS 就會告訴使用者這個網址實際上是對應到哪一個 IP 位址。

當然 DNS 伺服器的詳細運作的演算法非常複雜,畢竟全世界有那~麽多的網址和 IP 位址,DNS 上上下下也有非常多個,不可能要求每個 DNS 都儲存所有網址 / IP 的對應組合,這部分就不在本篇做討論了。

設定 Domain Name

到這裡我們大概了解了 domain name 實際上是怎麼運作的,但最重要的是當我們取得了我們的 domain 之後,要怎麼把網址設定到 WordPress 上讓他正常運作呢?使用 Bitnami 的 WordPress 有好處也有壞處,好處是 Bitnami 已經盡量的幫我們優化了伺服器,甚至幫我們準備好很多的工具程式或 script,可以直接透過指令簡單地完成原本很繁瑣的任務,例如下面會提到的 domain name 設定、移除 bitnami info page banner、設定 SSL 連線等。

然而壞處就是 bitnami 修改過許多伺服器上的參數設定或檔案位址,也讓整個 apache 伺服器疊床架屋變得非常複雜。所以當我們要手動設定關於 apache 或是 SSL 等網站伺服器相關的參數設定時就會變得非常棘手,常常要花很多的時間才能釐清問題出在哪裡,或是理解 bitnami 究竟把參數、檔案藏到什麼地方去。也常有一種狀況是,無法使用現有的套件或教學方法去設定我們的伺服器,因為系統都已經被 bitnami 修改過了。

這篇真的是我花了一個多月慢慢爬梳整個網站的設定、查了許多 documents 和網路上的文章,把相關的設定方式找了出來,整理在這裡。

指定 IP 位址給 Domain Name Provider

通在這個步驟都是在網址供應商的介面上完成,例如我使用的是 name.com 提供的服務 (我是不是該跟它收點廣告費了 🤣),只需要登入帳號之後在後台管理 Manage DNS Records 就可以指定網址 (hostmane) 與 IP 位址的對應。

在設定的時候有幾個重點:

▍ 使用 A Record:將網址指向一個 IP address

DNS Record 有好幾種對應方式,不過我們使用最基本的 A Record 就可以了,其他較複雜的類別之後在別篇再來說明。

▍ Domain name 、 Sub domain 或萬用子網域

以這個網站為例,這裡的網域是屬於 chalrestw.com 這個 domain 的。我在設定 DNS record 時,網址 (hostname) 會有三種狀況:

1. charlestw.com

這就是指定單一最原始的 domain name 所對應的 IP 位址,如果你嘗試連結過這個網址,你會發現它連到的是我的另一個部落格 charlestw.com

2. note.charlestw.com

這就是子網域 (sub domain) 的實際應用,我在我的 domain name 前面加上 note 這個前綴,所以當你輸入了這個網址就會對應到這個網站,而非我的部落格。

3. *.charlestw.com

萬用子網域,這就是比較特別的應用。當我在 DNS record 加入這樣的 hostname 時,所有不列在清單中的子網域都會被指定到這個 record 的 IP 位址。我也有這樣設定,所以你可以嘗試在前綴隨便輸入一串字串,都會被導到我的部落格去。

這三種方法擇一或交替使用都可以,就看你的習慣和需求。

指定 Domain Name 給本地端 server

完成好 DNS 端的設定之後,接下來就回到我們自己的 server 上了。雖然在預設的狀態不做任何設定好像網站也可以正常運作,那是因為預設通常是設定為 localhost:80 或 127.0.0.1:80 之類的 hostname,也就是指向自己。但為了避免造成可能的錯誤,例如指向錯誤的根目錄、資料庫對應錯誤等問題,又或者你的伺服器上可能不只存在一個網站,上面可能同時運作著多個服務的時候,就必須明確的告訴伺服器我的 domain name 是長什麼樣子,讓伺服器能清楚識別他自己。

▍以 bnconfig 指令設定 domain name
sudo /opt/bitnami/apps/wordpress/bnconfig --appdomain DOMAIN.com

首先,先使用 bitnami 準備好的指令集設定 domain name。輸入上面這個指令,紅字的部分分別是 WordPress 安裝的位址和你的 domain name。上面這個是預設的位置。

修改 Virtual Host 參數

這個指令更改了 WordPress 的 virtual host 設定檔,設定檔位在:

/opt/bitnami/apps/wordpress/conf/httpd-vhosts.conf
wp-tutorial-4-2-wp-vhosts
被更改後的 httpd-vhosts.conf

可以看到 ServerName 已經被更改為我們的 domain name,不過因為還沒有啟用 SSL 加密連線,所以我們也必須把它關起來、註解掉:

SSLEngine off
#SSLCertificateFile "/opt/bitnami/apps/wordpress/conf/cert/server.crt"
#SSLCertificateKeyFile "/opt/bitnami/apps/wordpress/conf/cert/server.key"

否則後面我們重啟 apache server 的時候會出現錯誤。

▍Virtual Host 參數說明 (選讀)

在 apache 當中關於網址 (hostname) 的指向設定都是屬於 virtual host 的設定。這意思是,當一個網址被 DNS 導引過來時,我們的伺服器必須明確的知道要將使用者導引到哪一個目錄底下。也就是說,例如像上面的設定,當一個 test.charlestw.com 的網址被導引過來時,我們要將使用者導引到 wordpress 的根目錄當中。這就好像是一個櫃檯,當客人進來指定要找 603 號房時,我們要告訴他 603 號房是位在這棟樓的哪一個位子。

這邊解釋一下 virtual host 的參數:

  • ServerName:指定的網址
    他就像房號一樣,當用戶端連線過來是以這個 ServerName 的網址過來時,我們就知道他要訪問的是下面 Document Root 這個目錄。
  • ServerAlias:其他替代的網址
    有一種狀況是,多個網址都指向同一個網站,例如 603 號房和 6 樓第三間都是指向同一個房間。我們就會把其他網址都列在 ServerAlias 中,以空格分隔多個網址。以上面的設定為例,一個 www.test.charlestw.com 的網址來訪時,我們就會知道它也是要訪問 Document Root 這個目錄。這個參數就視你的需求自行增減。
  • Document Root:網站根目錄
    就是這個網站的根目錄位置,ServerName 和 ServerAlias 中的所有網址都是對應到這個根目錄。
  • port 80、port 443 和 SSL 憑證
    可以發現 virtual host 的設定分為兩個 port,這是因為預設的 http 是使用用 port 80 做連線,而加密的 https 則是用 port 443 (通常沒特別需求也不會更動這個),所以必須針對特定 port 做設定。基本上兩邊的參數應該是一樣的,差在 https 必須指定 SSL 憑證的位址,SSL 的部分在下一章再談。

(選用) 設定 Apache 參數

這一節之所以說是選用,是因為在單一的 WordPress 環境當中不算太複雜,上述 Bitnami 提供的指令集是可以完成簡單的 domain name 設定,在使用上來說還不至於造成錯誤。不過保險起見我們還是把下列幾個參數都完整設定,避免未來可能的 bug 產生。

前面提過,因為作業系統和 apache server 經過 Bitnami 的優化後,已經變得疊床架屋。在設定上已經和原始的 apache 不太相同,這部分的設定會稍微繁瑣些。

修改 wp-config.php

根據 Bitnami 的說明文件,給定 domain name 必須修改 wp-config.php 的參數。開啟 wp-config.php 這個設定檔:

sudo nano /opt/bitnami/apps/wordpress/htdocs/wp-config.php

修改下面兩個參數:

define('WP_SITEURL', 'http://DOMAIN.COM/');
define('WP_HOME', 'http://DOMAIN.COM/');

將 DOMAIN.COM 換成你的 domain name,記得要加上斜線符號結尾。

Apache server configuration:修改 httpd.conf
  • 開啟 Apache 設定檔:
sudo nano /opt/bitnami/apache2/conf/httpd.conf
  • 修改 domain name:
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName test.charlestw.com:80

將 ServerName 換成自己的 domain,記得後面的 port 80 不要刪掉。

  • 指定 document root:
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
# 
DocumentRoot "/opt/bitnami/apps/wordpress/htdocs"
<Directory "/opt/bitnami/apps/wordpress/htdocs">

將 document root 指向 WordPress 根目錄,預設位址如上設定。

Bitnami apache server configuration:修改 bitnami.conf
  • 開啟 Bitnami Apache 設定檔:
sudo nano /opt/bitnami/apache2/conf/bitnami/bitnami.conf
  • 修改 virtual host (http):
<VirtualHost _default_:80>
  DocumentRoot "/opt/bitnami/apps/wordpress/htdocs"
  <Directory "/opt/bitnami/apps/wordpress/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride All
    <IfVersion < 2.3 >
      Order allow,deny
      Allow from all
    </IfVersion>
    <IfVersion >= 2.3 >
      Require all granted
    </IfVersion>
  </Directory>

一樣將 document root 指向 WordPress 根目錄。

  • 修改 virtual host (https):
<VirtualHost _default_:443>
  DocumentRoot "/opt/bitnami/apps/wordpress/htdocs"
  SSLEngine off
  #SSLCertificateFile "/opt/bitnami/apache2/conf/server.crt" 
  #SSLCertificateKeyFile "/opt/bitnami/apache2/conf/server.key" 

  <Directory "/opt/bitnami/apps/wordpress/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride All
    <IfVersion < 2.3 >
      Order allow,deny
      Allow from all
    </IfVersion>
    <IfVersion >= 2.3 >
      Require all granted
    </IfVersion>
  </Directory>

和前一節 port 443 也就是 https 加密連線的 virtual host 設定一樣,修改網站根目錄並關掉 SSL 連線。

重啟 Apache Server

設定完所有參數之後,必須重啟 Apache server 更新伺服器參數。

sudo /opt/bitnami/ctlscript.sh restart apache

只要參數設定沒有任何錯誤應該會看到下列結果:

Unmonitored apache
Syntax OK
/opt/bitnami/apache2/scripts/ctl.sh : httpd stopped
Syntax OK
/opt/bitnami/apache2/scripts/ctl.sh : httpd started at port 80
Monitored apache

試試看用你的 domain name 登入網站看看,應該就會出現了!

結語

這一篇真的是整個架站教學系列以來份量偏重的一篇,大概有一半的篇幅都在解釋名詞、參數或原理。我已經盡量簡化背景知識的說明,但還是保留一定程度的解說。

別問我為什麼 Bitnami 要把 Apache server 的參數結構搞得這麼複雜,或許他有在優化上或開發上的考量。我也是花了一兩個月的時間,讀了好多 documents、搜尋好多資料和 case study、不停的 try and error,才釐清整個參數設定的結構,還有檔案/目錄的儲存位置等等。

只要 WordPress 和 Bitnami 沒有大改版的話,基本上這篇大致上把 WordPress Bitnami 的 domain name 設定完整的整理過一遍了。

 

下一篇:WordPress / 架站教學五:設定 SSL 加密連線,讓網站連線更安全 (以Apache為例)

 

WordPress 網站架設與搬家教學系列

WordPress 快速架站教學 (濃縮版):
在 Google Cloud (GCP) 台灣主機上免費架設 WordPress Bitnami

WP 架站教學一:使用 Google 台灣主機免費架設自己的網站 (Mac/Win版)
WP 架站教學二:透過 SSH 連線遠端控制 GCP 並設定 FTP 伺服器 (使用 WordPress Bitnami)
WP 架站教學三:更改 MySQL Administrator 密碼、設定外部靜態 IP 位址
WP 架站教學四:設定 Domain Name 及 Apache 參數
WP 架站教學五:設定 SSL 加密連線,讓網站連線更安全 (以Apache為例)
WP 架站教學六:WordPress 檔案及目錄的結構簡介與預設檔案權限
WP 架站教學七:修改網站外觀樣式,如何建立子主題 (child theme)
WP 多重架站一:如何在同一個伺服器架設第二個 WordPress (Multiple WordPress)
WP 多重架站二:設定 Domain Name,指定多個 WordPress 的網址 (使用subdomain)
WP 多重架站三:設定 SSL 加密連線 (以 Apache 為例)
WP 搬家教學:一個按鍵幫網站搬家,使用 All-in-One Migration

WordPress / 網站架設與搬家教學系列簡介及目錄
https://note.charlestw.com/wordpress-tutorial-category/