如何在 Ubuntu 20.04 上安裝 Nginx

介紹

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

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

使用DigitalOcean應用平台簡化應用程式部署。在幾分鐘內直接從GitHub部署。

先決條件

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

您可能还想在完成本教程的最后步骤之前注册一个域名。要了解如何在DigitalOcean上设置域名,请参阅我们的《DigitalOcean DNS入门》

当您有可用账户时,请使用非root用户登录开始操作。

步骤1 – 安装Nginx

由于Nginx可在Ubuntu的默认软件库中获取,因此可以使用apt包管理系统从这些软件库安装它。

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

  1. sudo apt update
  2. sudo apt install nginx

接受该过程后,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(正常的非加密网页流量)和端口 443(TLS/SSL 加密流量)
  • Nginx HTTP: 此配置文件仅打开端口 80(正常的非加密网页流量)
  • 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 20.04 会启动 Nginx。Web 服务器应已启动并运行。

我們可以使用 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 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 工具找到它,該工具將給您您從互聯網上其他位置收到的公共 IP 地址:

  1. curl -4 icanhazip.com

當您有了您服務器的 IP 地址後,輸入到您瀏覽器的地址欄中:

http://your_server_ip

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

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

步驟 4 – 管理 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 20.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. sudo 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 使用一種稱為符號連結或符號鏈接的常見做法來追蹤您的伺服器塊中啟用了哪些。創建符號連結就像在磁盤上創建捷徑一樣,這樣您以後可以從 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 20.04 上安裝 Linux、Nginx、MySQL、PHP(LEMP 堆棧)

為了為您的域名設置免費 SSL 憑證的 HTTPS,使用 Let’s Encrypt,您應該繼續閱讀 如何在 Ubuntu 20.04 上使用 Let’s Encrypt 保護 Nginx

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