Ubuntu 中安裝和配置 Nginx
原文:如何在 Ubuntu 20.04 中安裝和配置 Nginx - 卡拉雲 (kalacloud.com)
前言
Nginx 是全球使用最廣泛的 web servers 之一。它甚至負責託管網際網路上一些超級大流量的網站也不在話下。很多情況下,它比 Apache 佔用更少資源,並且可以使用它作為 Web 伺服器或反向代理來使用。
在本教程中,我們要學習如何在 Ubuntu 20.04 中安裝和配置 Nginx。
準備工作
要根據本教程學習,首先我們要有一臺安裝好 Ubuntu 20.04 的伺服器:
- 有 sudo 的 root 使用者許可權,大家可根據《Ubuntu 120.04初始伺服器設定》(撰寫中,稍後上線)指南來配置自己的伺服器。
第 1 步:安裝 Nginx
由於 Nginx 可以從 ubuntu 軟體源中獲得,因此我們可以使用 apt 來安裝 Nginx。
我們可以使用以下命令安裝 Nginx 到 Ubuntu 中。
sudo apt update
sudo apt install nginx
選擇 Y 來開始安裝,apt 會幫你把 Nginx 和它所必備的依賴安裝到我們的伺服器中。
第 2 步:調整防火牆
在測試 Nginx 之前,我們需要調整防火牆,讓他允許 Nginx 服務通過。Nginxufw
在安裝時會把他自身註冊成為服務。
sudo ufw app list
輸出結果:
kalacloud@chuan-server:~$ sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
你可以看到 Nginx 提供了三個配置檔案:
-
Nginx Full
開埠80 正常,未加密的網路流量
埠443 TLS / SSL加密的流量
-
Nginx HTTP
僅開啟埠80 正常,未加密
-
Nginx HTTPS
僅開啟埠443 TLS / SSL加密
我們使用 Nginx HTTP 來做本教程演示。
sudo ufw allow 'Nginx HTTP'
我們用以下命令來檢視更改結果
sudo ufw status
我們可以在輸出結果中看到
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 會啟動 Nginx 。 Web 伺服器應該已經在運行了。
我們可以通過systemd
來檢查 init 系統狀態,確保它正在執行:
systemctl status nginx
kalacloud@chuan-server:~$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset:>
Active: active (running) since Wed 2020-07-29 07:21:53 UTC; 23min ago
Docs: man:nginx(8)
Main PID: 3340 (nginx)
Tasks: 2 (limit: 2248)
Memory: 4.3M
CGroup: /system.slice/nginx.service
├─3340 nginx: master process /usr/sbin/nginx -g daemon on; master_>
└─3341 nginx: worker process
Jul 29 07:21:52 chuan-server systemd[1]: Starting A high performance web server>
Jul 29 07:21:53 chuan-server systemd[1]: Started A high performance web server >
lines 1-13/13 (END)
如上所示,這個服務已經成功啟動。接下來我們要直接來測試 Nginx 是否可以通過瀏覽器訪問。
首先我們執行以下命令:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
這可以讓我們在瀏覽器中檢視他們是否正常工作。
接著我們要找到伺服器在公網上的ip,我們可以使用這個命令
curl -4 icanhazip.com
獲得伺服器ip後,我們可以在瀏覽器輸入這個 ip 。當然除了公網,我們也可以輸入主機的內網 ip 通過區域網來訪問。
http://your_server_ip
開啟瀏覽器輸入ip 就能看到 Nginx 的預設頁面。這也說明伺服器執行起來了。
這裡推薦一下可與 Nginx 搭配使用的卡拉雲。卡拉雲是一套低程式碼開發工具,可接入常見的資料庫(MySQL、MongoDB等)及 RESTful API, 你無需懂會任何前端技術,只要會寫 SQL,就可以快速搭建屬於你自己的資料庫管理工具。>>深入瞭解卡拉雲<<
第 4 步:管理 Nginx
現在,您已啟動並運行了Web伺服器,讓我們回顧一些基本的管理命令。
上一步,我們已經啟動起來 Web 伺服器了。接下來,讓我們來學習一下 Nginx 的基本命令。
要停止Web伺服器,輸入:
sudo systemctl stop nginx
要在停止時,啟動Web伺服器,鍵入:
sudo systemctl start nginx
要停止,然後再次啟動該服務,鍵入:
sudo systemctl restart nginx
如果我們只是修改配置,Nginx 可以在不終端的情況下熱載入。我們可以鍵入:
sudo systemctl reload nginx
預設情況下,Nginx 會在伺服器啟動時,跟隨系統啟動,如果我們不想這樣,我們可以用這個命令來禁止:
sudo systemctl disable nginx
要重新讓系統啟動時引導 Nginx 啟動,那麼我們可以輸入:
sudo systemctl enable nginx
第5步:設定伺服器塊(Server block)
使用Nginx Web伺服器時,伺服器塊(類似於Apache中的虛擬主機)可用於封裝配置詳細資訊,並在一臺伺服器中託管多個域。我們將建立一個名為example.com的域,但我們可以用自己的域名替換它。
在 Ubuntu 上的 Nginx 預設情況下啟用了一個伺服器塊(server block),伺服器塊的配置是為給伺服器的目錄提供地址/var/www/html
。儘管這對於單個站點非常有效,但是如果我們在伺服器上託管多個站點,則可能變很臃腫。讓我們給/var/www/html
目錄新增上分站點目錄。
比如我們的網站是 example.com ,那我們建立一個對應的目錄 example.com 目錄:
sudo mkdir -p /var/www/example.com/html
接下來,使用$USER
環境變數分配目錄的所有權:
sudo chown -R $USER:$USER /var/www/example.com/html
如果我們沒有修改自己的umask
值,那麼 Web 根目錄的許可權應該正確,我們可以通過輸入以下命令來確認:
sudo chmod -R 755 /var/www/example.com
接下來,讓我們來編輯index.html
可以使用 nano 編輯器或其他你用這順手的編輯器:
nano /var/www/example.com/html/index.html
在其中,新增以下示例HTML:
/var/www/example.com/html/index.html
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com server block is working!</h1>
</body>
</html>
完成後儲存並關閉檔案。
接下來我們為 Nginx 來建立一個伺服器塊。與直接修改預設配置檔案不同,我們在以下位置建立一個新檔案:/etc/nginx/sites-available/example.com
sudo nano /etc/nginx/sites-available/example.com
貼上到以下內容新增到檔案中,這個塊的配置與預設塊的配置相似,但針對我們的新目錄和域名進行了更新:
/etc/nginx/sites-available/example.com
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
接下來,讓我們通過在sites-enabled
目錄新建一個連結,好讓 Nginx 在啟動過程中會讀取這個目錄:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
現在已啟用並配置了兩個伺服器塊,以及基於它們的listen
和server_name
指令響應請求:
example.com
: 將會響應example.com
和www.example.com
的請求default
: 將會響應 80 埠的請求,以及不能匹配到兩個伺服器塊上的請求
為避免可能由於新增其他伺服器名稱而引起的雜湊儲存區記憶體問題,有必要調整/etc/nginx/nginx.conf
檔案中的單個值。
開啟檔案:
sudo nano /etc/nginx/nginx.conf
找到server_names_hash_bucket_size
指令並刪除#
符號:
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
完成後儲存並關閉檔案。
接下來,測試以確保我們在 Nginx 檔案中的改動,沒有任何問題:
sudo nginx -t
如果沒有任何問題,請重新啟動 Nginx:
sudo systemctl restart nginx
Nginx 現在已經可以按照剛剛我們配置的方式來工作啦。當用戶通過http://example.com
域名訪問我們的伺服器時,Nginx 會將它指向我們剛剛建立的 Html 頁面。
第 6 步 學習 Nginx 檔案及目錄結構
到這一步,我們已經學會了如何在 Ubuntu 上安裝和配置 Nginx 服務。接下來,我們來學習 Nginx 的檔案及目錄結構。
內容
-
/var/www/html
預設的 Web 頁面。預設開啟可以看到 Nginx 頁面。 -
/var/www/html
實際的 Web 內容。預設請看下只有 Nginx 自己的原生頁面。我們可以通過更改 Nginx 配置來更改檔案。
伺服器配置
-
/etc/nginx
Nginx 配置目錄。所有 Nginx 的配置檔案都在這裡。 -
/etc/nginx/nginx.conf
Nginx 的配置檔案。大多數全域性配置可以通過這個檔案來修改。 -
/etc/nginx/sites-available/sites-enabled
用來儲存伺服器下每個站點伺服器塊的目錄。 預設情況下 Nginx 不會直接使用目錄下的配置檔案,需要我們更改配置來告訴 Nginx 來去讀。 -
/etc/nginx/sites-enabled/sites-available
這裡是儲存已經啟用站點伺服器塊的目錄。 -
/etc/nginx/snippets
這個目錄包含一些 Nginx 的配置檔案。可開啟詳細檢視這些配置檔案到文件進行學習。
伺服器日誌
/var/log/nginx/access.log
這裡是 Nginx 到日誌檔案,對 Web 伺服器的每個請求都會記錄在這個日誌中。/var/log/nginx/error.log
記錄 Nginx 執行過程中發生的錯誤日誌。