在Ubuntu 22.04上安装Nginx的方法

介紹

Nginx是世界上最流行的網頁伺服器之一,負責托管一些互聯網上最大和流量最高的網站。它是一個輕量級的選擇,可以用作網頁伺服器或反向代理。

在本指南中,我們將討論如何在您的Ubuntu 22.04伺服器上安裝Nginx,調整防火牆,管理Nginx進程,並設置伺服器區塊以從單個伺服器托管多個域名。

使用DigitalOcean App Platform從GitHub部署您的應用程式。讓DigitalOcean專注於擴展您的應用程式。

先決條件

在開始本指南之前,您應該在您的伺服器上配置了一個常規的非root使用者,該使用者具有sudo特權。您可以通過遵循我們的Ubuntu 22.04初始伺服器設置指南來了解如何配置常規使用者帳戶。

您可能还希望在完成本教程的最后步骤之前选择注册一个域名。要了解如何使用DigitalOcean设置域名,请参阅我们的《介绍DigitalOcean DNS》

当您有可用的帐户时,请以非root用户登录以开始。

步骤1 – 安装Nginx

由于Nginx可在Ubuntu的默认存储库中找到,因此可以使用apt打包系统从这些存储库安装它。

由于这是我们在此会话中首次与apt打包系统互动,我们将更新本地软件包索引,以便访问最新的软件包列表。之后,我们可以安装nginx

  1. sudo apt update
  2. sudo apt install nginx

在提示时按Y确认安装。如果提示重新启动任何服务,请按ENTER接受默认设置并继续。apt将安装Nginx及其所需的任何依赖项到您的服务器。

步骤2 – 调整防火墙

在測試 Nginx 之前,需要配置防火牆軟體以允許訪問服務。安裝時,Nginx 會向 ufw 註冊自己作為服務,因此可以輕鬆地允許 Nginx 訪問。

輸入以下命令列出 ufw 知道如何處理的應用程式配置:

  1. 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 端口(正常、未加密的 Web 流量)
  • Nginx HTTPS: 此配置檔僅打開 443 端口(TLS/SSL 加密流量)

建議您啟用最具限制性但仍允許您配置的流量的配置檔。現在,我們只需要允許 80 端口上的流量。

您可以通過輸入以下命令啟用此配置:

  1. sudo ufw allow 'Nginx HTTP'

您可以通過輸入以下命令驗證更改:

  1. 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 22.04 會啟動 Nginx。網頁伺服器應已運行。

我們可以使用 systemd 初始化系統來確保服務正在運行,方法如下:

  1. 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 2022-03-01 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 工具查找,該工具將給您從互聯網上的其他位置接收到的公共 IP 地址:

  1. curl -4 icanhazip.com

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

http://your_server_ip

您應該會收到默認的 Nginx 登錄頁面:

如果您看到這個頁面,則您的服務器正確運行並且已準備好被管理。

第四步 – 管理 Nginx 進程

現在您的 Web 服務器已經運行起來了,讓我們來查看一些基本的管理命令。

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

  1. sudo systemctl stop nginx

當服務器停止時,要啟動 Web 服務器,輸入:

  1. sudo systemctl start nginx

要停止然後重新啟動服務,輸入:

  1. sudo systemctl restart nginx

如果您僅在進行配置更改,Nginx 可以在不斷開連接的情況下重新加載。要執行此操作,輸入:

  1. sudo systemctl reload nginx

預設情況下,Nginx 被配置為在伺服器啟動時自動啟動。如果這不是你想要的,你可以通過輸入以下命令來禁用此行為:

  1. sudo systemctl disable nginx

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

  1. sudo systemctl enable nginx

你現在已經學會了基本的管理命令,應該準備好配置網站以托管多個域名。

在使用 Nginx 網絡伺服器時,服務器塊(類似於 Apache 中的虛擬主機)可用於封裝配置詳細信息,並從單個伺服器上托管多個域名。我們將設置一個名為 your_domain 的域,但你應該 用你自己的域名替換它

Ubuntu 22.04 上的 Nginx 默認啟用了一個服務器塊,配置為從目錄 /var/www/html 提供文檔。雖然這對於單個站點很有效,但如果你托管多個站點,這可能變得難以管理。我們將在 /var/www 內創建一個目錄結構,為我們的 your_domain 站點保留 /var/www/html 作為預設目錄,如果客戶端請求與其他站點不匹配,則提供服務。

請按照以下步驟創建 your_domain 的目錄,使用 -p 標誌創建任何必要的父目錄:

  1. sudo mkdir -p /var/www/your_domain/html

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

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

如果您沒有修改umask值,則您的網站根目錄的權限應該是正確的,因為它設置了默認文件權限。為確保您的權限正確並允許所有者讀取、寫入和執行文件,同時僅授予群組和其他人讀取和執行權限,您可以輸入以下命令:

  1. sudo chmod -R 755 /var/www/your_domain

接下來,使用nano或您喜歡的編輯器創建一個示例index.html頁面:

  1. nano /var/www/your_domain/html/index.html

在內部添加以下示例HTML:

/var/www/your_domain/html/index.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創建一個新的配置文件:

  1. sudo nano /etc/nginx/sites-available/your_domain

粘貼以下配置塊,它類似於默認配置,但針對我們的新目錄和域名進行了更新:

/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更新為我們的域名。

接下來,讓我們通過創建一個從該文件到sites-enabled目錄的鏈接來啟用文件,Nginx在啟動期間從該目錄中讀取:

  1. sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

注意: Nginx 使用一種常見的做法,稱為符號連結,或稱為符號鏈接(symlinks),來跟踪您的服務器塊中啟用了哪些。創建符號連結就像在磁盤上創建快捷方式一樣,這樣您以後就可以從 sites-enabled 目錄中刪除快捷方式,同時保留 sites-available 中的服務器塊,如果您想要啟用它。

現在啟用了兩個服務器塊,並配置為根據它們的 listenserver_name 指令來響應請求(您可以在這裡閱讀更多關於 Nginx 如何處理這些指令的信息 這裡):

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

為了避免由於添加額外的服務器名稱而可能引起的哈希桶內存問題,有必要調整 /etc/nginx/nginx.conf 文件中的單個值。打開文件:

  1. sudo nano /etc/nginx/nginx.conf

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

注意:註釋掉程式碼行 – 通常是在行的開頭加上 # – 是另一種禁用它們而無需實際刪除它們的方法。許多配置文件都附帶了多個被註釋掉的選項,這樣它們就可以通過在活動代碼和文檔之間切換來啟用或禁用。

/etc/nginx/nginx.conf
...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

完成後保存並關閉文件。

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

  1. sudo nginx -t

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

  1. sudo systemctl restart nginx

現在,Nginx 應該正在提供您的域名。您可以通過導航到 http://your_domain 來測試,您應該看到類似以下的內容:

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

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

內容

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

伺服器配置

  • /etc/nginx:Nginx 配置目錄。所有的 Nginx 配置文件都位於此處。
  • /etc/nginx/nginx.conf:主要的 Nginx 配置文件。可以修改此文件以對 Nginx 全局配置進行更改。
  • /etc/nginx/sites-available/:存儲每個站點服務器塊的目錄。除非將其鏈接到 sites-enabled 目錄,否則 Nginx 將不使用此目錄中找到的配置文件。通常,所有的服務器塊配置都在此目錄中完成,然後通過鏈接到其他目錄來啟用。
  • /etc/nginx/sites-enabled/:存儲已啟用的每個站點服務器塊的目錄。通常,這些是通過鏈接到 sites-available 目錄中找到的配置文件創建的。
  • /etc/nginx/snippets:此目錄包含可以在 Nginx 配置的其他地方包含的配置片段。可重複使用的配置段落是重構為片段的良好候選者。

伺服器日誌

  • /var/log/nginx/access.log: 除非 Nginx 配置了其他方式,否則每個對網絡伺服器的請求都會記錄在此日誌文件中。
  • /var/log/nginx/error.log: 任何 Nginx 錯誤都將記錄在此日誌中。

結論

現在您已經安裝了您的網絡伺服器,您有很多選擇可以提供的內容類型,以及您想要使用的技術來創建更豐富的體驗。

如果您想要構建一個更完整的應用程式堆棧,請查看文章在 Ubuntu 22.04 上安裝 Linux、Nginx、MySQL、PHP(LEMP 堆棧)

為了使用免費的 SSL 憑證通過 Let’s Encrypt 為您的域名設置 HTTPS,您應該轉到 如何在 Ubuntu 22.04 上使用 Let’s Encrypt 保護 Nginx

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-22-04