前言

如果看過我瘋的文章「透過 GCP 從 0 開始的 WordPress 架站」,我們選擇的服務是 WordPress with NGINX and SSL Certified by Bitnami and Automattic,其中的關鍵字就是 Nginx ,想知道 Nginx 配置該如何設定,必須先知道它本身的架構囉 !

簡易介紹 Nginx 配置

  • nginx.conf 裡的最上層是 events、http,http 包含至少一個 server , server 又包含 location。
events {
    # events 配置內容
}
http {
    # http 配置內容
    server {
        # server 配置內容
        location / {
            # location 配置內容
        }
    }
}
  • 可以把 server 的配置當作是用來定義一個虛擬的伺服器,當 client 端發出請求時,Nginx 會去對應 server 的配置來回應請求。
  • 以下是針對埠號 80 以及 443 的 server 配置,先有個簡單的概念即可。
http {
    # HTTP
    server {
        listen 80;
        server_name localhost;
    }

    # HTTPS
    server {
        listen 443;
        server_name localhost;
    }
}

關於各種令人混亂的 nginx 配置

為了方便理解,將所有會碰到的配置列出來,大家也可以試著去下指令查看各自相對路徑的配置。

  • 查看配置的結構 : tree /opt/bitnami/nginx/conf

主要有一支 nginx.conf 以及 bitnami 資料夾底下有四支config,這裡我們僅針對 bitnami-* 的三個配置做說明。


nginx.conf (由於配置太冗長,僅擷取部分做說明)

  • 剛剛前面有提到至少要配置一個 server,卻沒有看到,但發現最後一行 include bitnami.conf,說明 server 配置可能在這支檔案。
events {
    # events 配置內容
}
http {
    # http 配置內容
    include "/opt/bitnami/nginx/conf/bitnami/bitnami.conf";
}

bitnami 資料夾底下的所有 config

  • 下圖左邊針對埠號80與443做設定,不論是哪一個路徑接引用了 右邊 bitnami-apps-prefix.conf ,又引用了我們架設第一個網站的設定分別是 /opt/bitnami/apps/phpmyadmin/conf/nginx-prefix.conf(這部分先不對資料庫做探討) 以及 /opt/bitnami/apps/wordpress/conf/nginx-prefix.conf

看到這邊應該想翻白眼,到底還要引用多少層。


wordpress 資料夾底下 nginx-prefix.conf

  • 終於看到網站檔案的路徑埋在這了 ! 也就是預設路徑是吃我們第一個架站的內容。
  • 這邊有些人可能會疑惑,如果你已經將網站綁上 domain,照理來說要配置 server_name your.domain,卻沒看到相對應的配置,Nginx 這邊有個規則,如果都沒有符合的名稱,那麼第一個 server 配置會成為預設 server,也就是 server_name localhost 這個配置。

有興趣了解 nginx-app.conf 大家也可以進去看看檔案內容,這邊先跳過。

觀念釐清

現在我們希望透過 nginx 的配置,讓我們的第二個網站可以被讀取到。
假設要建立一個 myblog.wowfuncode.com 為我的第二個網站。

  • 忘記怎麼架設第二個網站,可以參考此文章

記得要將 myblog 新增 A record 到自己的 VM。

  1. 透過 server 的配置,給予第二個網站資料的路徑。
  2. 讓我們設定的配置檔可以被引用。

這樣聽起來似乎簡單多了 ! 一起開始實作吧 !

實作

  • 此時建立第二個網站目錄底下會有個資料夾 htdocs,也就是上述提到的第一點網站資料的路徑。
  • 首先,建立一個 conf 資料夾對配置做管理
    sudo mkdir /opt/bitnami/apps/myBlog/conf
  • 將第一個網站的 nginx-app.conf 複製到新建的資料夾底下
    sudo cp /opt/bitnami/apps/wordpress/conf/nginx-app.conf /opt/bitnami/apps/myBlog/conf/nginx-app.conf
  • 建立 nginx-vhosts.conf
    sudo vim /opt/bitnami/apps/myBlog/conf/nginx-vhosts.conf
  • 加入 server 配置到 nginx-vhosts.conf
server {
    listen    80;
    root "/opt/bitnami/apps/myblog/htdocs/"; # 網站資料路徑
    server_name  myblog.wowfuncode.com; # 你的domain
    include "/opt/bitnami/apps/myblog/conf/nginx-app.conf"; 
}
  • 在 bitnami-apps-vhosts.conf 引用剛剛建立的 nginx-vhosts.conf
    sudo vim /opt/bitnami/nginx/conf/bitnami/bitnami-apps-vhosts.conf
  • 加入內容如下
include "/opt/bitnami/apps/myBlog/conf/nginx-vhosts.conf";

補充 :

  1. bitnami.conf 檔案的中間內容可以看到 include "/opt/bitnami/nginx/conf/bitnami/bitnami-apps-vhosts.conf"
  2. 而 bitnami-apps-vhosts.conf 引用了 /opt/bitnami/apps/myBlog/conf/nginx-vhosts.conf ,也就是我們要做的,將設定的配置檔可以被引用。
  • 修改 htdocs 權限
    sudo chown -R bitnami:daemon /opt/bitnami/apps/myBlog/htdocs/
    sudo chmod -R g+w /opt/bitnami/apps/myBlog/htdocs/

    最後,測試 Nginx 配置是否成功。

  • 測試成功內容如下
    sudo nginx -t

  • 重啟 nginx
    sudo nginx -s reload

開啟你的第二個網站(myblog.wowfuncode.com)來看看吧 !