如何在 Ubuntu 20.04 上安裝 Nginx

Home 教學 如何在 Ubuntu 20.04 上安裝 Nginx
如何在 Ubuntu 20.04 上安裝 Nginx
Nginx

介紹

Nginx 是世界上最受歡迎的網路服務器之一,負責託管互聯網上一些最大和流量最高的網站。 這是一個輕量級的選擇,可以用作 Web 服務器或反向代理。

在本教學中,我們將討論如何在您的 Ubuntu 20.04 服務器上安裝 Nginx、調整防火牆、管理 Nginx 進程以及設置服務器區塊以從一台服務器託管多個網域。

先決條件

在開始本教學之前,您應該在您的服務器上配置一個具有 sudo 權限的常規非 root 用戶。 您還可以選擇在完成本教學的最後一步之前註冊一個域名。

當您有可用帳戶時,請以非 root 用戶身份登錄開始。

第 1 步 – 安裝 Nginx

因為 Nginx 有在 Ubuntu 的預設儲庫存之中,所以可以使用 apt 套件系統從儲存庫裡安裝它。

由於這是我們第一次與 apt 套件系統互動,我們將更新我們的本機的套件索引,以便我們可以訪問最新的套件列表。 之後,我們可以安裝 nginx

$ sudo apt update
$ sudo apt install nginx

在這之後,apt 會將 Nginx 和任何所需的相依軟體安裝到您的服務器。

第 2 步 – 調整防火牆

在測試 Nginx 之前,需要調整防火牆軟體以允許訪問該服務。 Nginx 在安裝時將自己註冊為 ufw 的服務,從而可以直接允許 Nginx 訪問。

通過輸入以下指令列出那些 ufw 知道如何使用的應用程序配置:

$ sudo ufw app list

您可以得得應用程式設定文件的列表:


Output
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

如輸出所示,Nginx 有三個可用的配置文件:

  • Nginx Full:此設定文件同時打開端口 80(正常、未加密的 Web 流量)和端口 443(TLS/SSL 加密流量)
  • Nginx HTTP:此設定文件僅打開端口 80(正常、未加密的網絡流量)
  • Nginx HTTPS:此設定文件僅打開端口 443(TLS/SSL 加密流量)
    建議您啟用最嚴格的設定文件,該設定文件仍將允許您設定的流量。 現在,我們只需要允許端口 80 上的流量。

您可以通過輸入以下內容啟用此功能:

$ sudo ufw allow 'Nginx HTTP'

您可以通過輸入以下內容來驗證更改:

$ sudo ufw status

輸出將指示允許哪些 HTTP 流量:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

第 3 步 – 檢查您的 Web 服務器

在安裝過程結束時,Ubuntu 20.04 啟動 Nginx。 Web 服務器應該已經啟動並運行。

我們可以通過輸入以下命令檢查 systemd init 系統以確保服務正在運行:

$ systemctl status nginx
Output
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-04-20 16:08:19 UTC; 3 days ago
     Docs: man:nginx(8)
 Main PID: 2369 (nginx)
    Tasks: 2 (limit: 1153)
   Memory: 3.5M
   CGroup: /system.slice/nginx.service
           ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─2380 nginx: worker process

正如所證實的那樣,服務已成功啟動。 然而,最好的測試方法是從 Nginx 實際請求一個頁面。

您可以訪問預設的 Nginx 登錄頁面,通過導航到您的服務器的 IP 地址來確認該軟體是否正常運行。 如果您不知道您的服務器的 IP 地址,您可以使用 icanhazip.com 工具找到它,該工具將為您提供從 Internet 上的其他位置所收到的公共 IP 地址:

$ curl -4 icanhazip.com

獲得服務器的 IP 地址後,將其輸入瀏覽器的地址欄中:

http://your_server_ip

您應該會收到預設的 Nginx 登錄頁面:

如果您在此頁面上,表示您的服務器運行正常並且可以進行管理。

第 4 步 – 管理 Nginx 程序

現在您已經啟動並運行了 Web 服務器,讓我們回顧一些基本的管理命令。

要停止您的 Web 服務器,請輸入:

$ sudo systemctl stop nginx

要在 Web 服務器停止時啟動它,請輸入:

$ sudo systemctl start nginx

要停止然後再次啟動服務,請輸入:

$ sudo systemctl restart nginx

如果您只是進行設定更改,Nginx 通常可以重新加載而無須斷開連接。為此,請輸入:

$ sudo systemctl reload nginx

預設情況下,Nginx 設定為在服務器啟動時自動啟動。 如果這不是您想要的,您可以通過輸入以下內容來禁止此行為:

$ sudo systemctl disable nginx

要重新啟用服務以在啟動時啟動,您可以輸入:

$ sudo systemctl enable nginx

您現在已經學習了基本的管理命令,並且應該準備好將此站點設定託管多個網域。

第 5 步 – 設置服務器區塊(推薦)

使用 Nginx Web 服務器時,服務器區塊(類似於 Apache 中的虛擬主機)可用於封裝設定細節並從單個服務器託管多個域。 我們將設置一個名為 your_domain 的域,但您應該將其替換為您自己的域名。

Ubuntu 20.04 上的 Nginx 預設啟用一個服務器區塊,該區塊被設定為從 /var/www/html 的目錄中提供文檔。 雖然這適用於單個站點,但如果您託管多個站點,它可能會變得笨拙。 代替 /var/www/html,讓我們在 /var/www 中為我們的 your_domain 站點建立一個目錄結構,如果客戶端請求無法匹配任何網站,則使用預設的 /var/www/html 目錄。

如下為 your_domain 建立目錄,使用 -p 標誌建立任何必要的父目錄:

$ sudo mkdir -p /var/www/your_domain/html

接下來,使用 $USER 環境變量分配目錄的所有權:

$ sudo chown -R $USER:$USER /var/www/your_domain/html

如果您沒有修改設定預設文件權限的 umask 值,則您的 Web 根目錄的權限應該是正確的。 為確保您的權限正確,並允許所有者讀取、寫入和執行文件,而只授予組和其他人讀取和執行權限,您可以輸入以下命令:

$ sudo chmod -R 755 /var/www/your_domain

接下來,使用 nano 或您喜歡的編輯器建立範例 index.html 頁面:

$ sudo nano /var/www/your_domain/html/index.html

在裡面,加入以下示範 HTML:

<html>
    <head>
        <title>Welcome to your_domain!</title>
    </head>
    <body>
        <h1>Success!  The your_domain server block is working!</h1>
    </body>
</html>

Ctrl+X 退出保存並關閉文件,然後在提示保存時按 Y,然後按 Enter

為了讓 Nginx 提供這些內容,需要使用正確的指令建立一個服務器區塊。 與其直接修改預設配置文件,不如在 /etc/nginx/sites-available/your_domain 新建一個:

$ sudo nano /etc/nginx/sites-available/your_domain

貼上以下配置區塊,與預設設定類似,但針對我們的新目錄和域名做調整:

server {
        listen 80;
        listen [::]:80;

        root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

        location / {
                try_files $uri $uri/ =404;
        }
}

請注意,我們已將 root 設定更新為我們的新目錄,並將 server_name 更新為我們的域名。

接下來,讓我們通過建立從該文件在 site-enabled 目錄裡的連結,好讓 Nginx 在啟動時能讀取:

$ sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

注意:Nginx 使用一種稱為符號連接的常見做法來跟蹤啟用了哪些服務器區塊。 建立符號連接就像在硬碟上建立一個捷徑,之後您可以從 sites-enabled 目錄中刪除該捷徑,然而卻不永久刪除原本的服務器區塊。好處是您可以再次啟用它,因為服務器區塊仍保留在 sites-available 目錄裡。

現在啟用並設定了兩個服務器區塊,以根據它們的 listenserver_name 指令回應請求(您可以在此處閱讀有關 Nginx 如何處理這些指令的更多信息):

  • your_domain:將回應對 your_domainwww.your_domain 的請求。
  • default:將回應端口 80 上與其他兩個區塊不匹配的任何請求。

為了避免添加額外的服務器名稱可能導致的 hash bucket 記憶體問題,需要調整 /etc/nginx/nginx.conf 文件中的數值。打開文件:

$ sudo nano /etc/nginx/nginx.conf

找到 server_names_hash_bucket_size 指令並刪除 # 符號以取消該行的註釋。 如果您使用的是 nano,您可以通過按 CTRLw 快速搜索文件中的單詞。

注意:註釋掉代碼行——通常是在行首加上#——是另一種禁用它們而不需要實際刪除它們的方法。 許多設定文件附帶了多個註釋掉的選項,以便可以通過在活動中代碼和文檔之間切換來啟用或禁用它們。

...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

完成後保存並關閉文件。

接下來,測試以確保您的任何 Nginx 文件中都沒有語法錯誤:

$ sudo nginx -t

如果沒有任何問題,請重新啟動 Nginx 以啟用您的更改:

$ sudo systemctl restart nginx

Nginx 現在應該為您的域名提供服務。 您可以通過導航到 http://your_domain 來進行測試,您應該會看到如下內容:

第 6 步 – 熟悉重要的 Nginx 文件和目錄

現在您已經知道如何管理 Nginx 服務本身,您應該花幾分鐘時間熟悉一些重要的目錄和文件。

內容

  • /var/www/html:實際的 Web 內容,預設情況下僅包含您之前看到的預設 Nginx 頁面,是從 /var/www/html 目錄提供的。 這可以通過更改 Nginx 配置文件來更改。

服務器設定

  • /etc/nginx:Nginx 設定目錄。 所有 Nginx 設定文件都駐留在此處。
  • /etc/nginx/nginx.conf:主要的 Nginx 設定文件。 可以對其進行修改以更改 Nginx 全域設定。
  • /etc/nginx/sites-available/:可以儲存每個站點服務器區塊的目錄。 Nginx 不會使用在該目錄中找到的設定文件,除非它們連接到 /etc/nginx/sites-enabled/ 目錄。 通常,所有服務器區塊設定都在此目錄中完成後通過連接到另一個目錄來啟用。
  • /etc/nginx/sites-enabled/:儲存啟用的每個站點服務器區塊的目錄。 通常,這些是通過 /etc/nginx/sites-available/ 目錄中的設定文件來建立的。
  • /etc/nginx/snippets:這個目錄包含設定片段,可以包含在 Nginx 設定的其他地方。 潛在可重複的設定段是重構片段的良好候選者。

服務器日誌

  • /var/log/nginx/access.log:對您的 Web 服務器的每個請求都記錄在此日誌文件中,除非 Nginx 配置為不這樣做。
  • /var/log/nginx/error.log:任何 Nginx 錯誤都將記錄在此日誌中。

相關文章