Nginx 是世界上最受歡迎的網路服務器之一,負責託管互聯網上一些最大和流量最高的網站。 這是一個輕量級的選擇,可以用作 Web 服務器或反向代理。
在本教學中,我們將討論如何在您的 Ubuntu 20.04 服務器上安裝 Nginx、調整防火牆、管理 Nginx 進程以及設置服務器區塊以從一台服務器託管多個網域。
在開始本教學之前,您應該在您的服務器上配置一個具有 sudo 權限的常規非 root 用戶。 您還可以選擇在完成本教學的最後一步之前註冊一個域名。
當您有可用帳戶時,請以非 root 用戶身份登錄開始。
因為 Nginx 有在 Ubuntu 的預設儲庫存之中,所以可以使用 apt
套件系統從儲存庫裡安裝它。
由於這是我們第一次與 apt 套件系統互動,我們將更新我們的本機的套件索引,以便我們可以訪問最新的套件列表。 之後,我們可以安裝 nginx
:
$ sudo apt update
$ sudo apt install nginx
在這之後,apt
會將 Nginx 和任何所需的相依軟體安裝到您的服務器。
在測試 Nginx 之前,需要調整防火牆軟體以允許訪問該服務。 Nginx 在安裝時將自己註冊為 ufw
的服務,從而可以直接允許 Nginx 訪問。
通過輸入以下指令列出那些 ufw
知道如何使用的應用程序配置:
$ sudo ufw app list
您可以得得應用程式設定文件的列表:
Output
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
如輸出所示,Nginx 有三個可用的配置文件:
您可以通過輸入以下內容啟用此功能:
$ 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)
在安裝過程結束時,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 登錄頁面:
如果您在此頁面上,表示您的服務器運行正常並且可以進行管理。
現在您已經啟動並運行了 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
您現在已經學習了基本的管理命令,並且應該準備好將此站點設定託管多個網域。
使用 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
目錄裡。
現在啟用並設定了兩個服務器區塊,以根據它們的 listen
和 server_name
指令回應請求(您可以在此處閱讀有關 Nginx 如何處理這些指令的更多信息):
your_domain
:將回應對 your_domain
和 www.your_domain
的請求。default
:將回應端口 80 上與其他兩個區塊不匹配的任何請求。為了避免添加額外的服務器名稱可能導致的 hash bucket 記憶體問題,需要調整 /etc/nginx/nginx.conf
文件中的數值。打開文件:
$ sudo nano /etc/nginx/nginx.conf
找到 server_names_hash_bucket_size
指令並刪除 #
符號以取消該行的註釋。 如果您使用的是 nano,您可以通過按 CTRL
和 w
快速搜索文件中的單詞。
注意:註釋掉代碼行——通常是在行首加上#
——是另一種禁用它們而不需要實際刪除它們的方法。 許多設定文件附帶了多個註釋掉的選項,以便可以通過在活動中代碼和文檔之間切換來啟用或禁用它們。
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
完成後保存並關閉文件。
接下來,測試以確保您的任何 Nginx 文件中都沒有語法錯誤:
$ sudo nginx -t
如果沒有任何問題,請重新啟動 Nginx 以啟用您的更改:
$ sudo systemctl restart nginx
Nginx 現在應該為您的域名提供服務。 您可以通過導航到 http://your_domain
來進行測試,您應該會看到如下內容:
現在您已經知道如何管理 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 錯誤都將記錄在此日誌中。© Copyrights 從想像到創造. All Rights Reserved.