如何在 Debian 10 上安裝 Nginx

介紹

Nginx是一款免費且開源的網頁伺服器,用於托管各種大小的網站和應用程式。該軟件以對內存資源的低影響、高可擴展性和模塊化、事件驅動的架構而聞名,可以提供安全、可預測的性能。Nginx不僅是一個網頁伺服器,還可以作為負載均衡器、HTTP緩存和反向代理。

在本指南中,您將在Debian 10伺服器上安裝Nginx。

先決條件

在開始本指南之前,您應該在伺服器上配置一個普通的非root用戶,並授予sudo權限。您還應該啟用防火牆。您可以通過遵循我們的Debian 10初始伺服器設置指南來了解如何設置。

步驟1 – 安裝Nginx

Nginx可在Debian的默認軟件存儲庫中找到,因此可以使用傳統的套件管理工具進行安裝。

首先更新本地套件索引以反映最新的上游更改:

  1. sudo apt update

然后安装nginx套件:

  1. sudo apt install nginx

确认安装,输入Y,然后按Enter继续。 apt然后会将Nginx及其所需的任何依赖项安装到您的服务器上。

第2步 – 调整防火墙

在测试Nginx之前,有必要修改防火墙设置以允许外部访问默认的Web端口。假设您已经按照先决条件中的说明进行了操作,您应该已经配置了一个UFW防火墙来限制对您的服务器的访问。

在安装过程中,Nginx会向UFW注册自身,以提供一些应用程序配置文件,可以使用这些配置文件来通过防火墙启用或禁用对Nginx的访问。

通过键入以下命令列出ufw应用程序配置文件:

  1. sudo ufw app list

您应该会得到一个应用程序配置文件的列表:

Output
Available applications: ... Nginx Full Nginx HTTP Nginx HTTPS ...

如您所见,Nginx有三个可用的配置文件:

  • Nginx全局:此配置文件打开端口80(正常的,未加密的Web流量)和端口443(TLS/SSL加密流量)
  • Nginx HTTP:此配置文件仅打开端口80(正常的,未加密的Web流量)
  • Nginx HTTPS:此配置僅開啟端口443(TLS/SSL加密流量)

建議您啟用最嚴格的配置文件,只允許您配置的流量。由於在本指南中尚未為您的伺服器配置TLS/SSL,因此您只需要允許端口80上的HTTP流量。

您可以通過輸入以下命令來啟用此功能:

  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伺服器

在安裝過程結束時,Debian 10會啟動Nginx。Web伺服器應該已經啟動並運行。

您可以使用systemd init系統檢查服務是否正在運行,方法是輸入以下命令:

  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 Tue 2022-06-28 18:42:58 UTC; 49s ago Docs: man:nginx(8) Main PID: 2729 (nginx) Tasks: 2 (limit: 1167) Memory: 7.2M CGroup: /system.slice/nginx.service ├─2729 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─2730 nginx: worker process

此輸出顯示服務已成功啟動。但是,測試的最佳方法是實際從Nginx請求頁面。

您可以訪問預設的Nginx登錄頁面,以確認軟件是否正常運行,方法是訪問您伺服器的IP地址。如果您不知道伺服器的IP地址,可以在伺服器的命令提示字元中輸入以下命令:

  1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

您將會收到幾行返回信息。您可以在網絡瀏覽器中嘗試每個地址以查看其是否有效。

當您得到了伺服器的IP地址後,請在瀏覽器的地址欄中輸入它:

http://your_server_ip

預設的Nginx登陸頁面應該會顯示在您的瀏覽器中:

此頁面包含在Nginx中,以顯示您的服務器正確運行。

步驟4 – 管理Nginx進程

現在您的網頁伺服器已經運行,您可以查看一些基本的管理命令。

要停止您的網頁伺服器,輸入:

  1. sudo systemctl stop nginx

要在停止時啟動網頁伺服器,輸入:

  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

步驟5 – 設置伺服器塊(可選)

使用Nginx Web服务器時,可以使用服務器塊(類似於Apache中的虛擬主機)來封裝配置細節並在單個服務器上托管多個域。在以下命令中,將your_domain替換為您自己的域名。要了解有關在DigitalOcean上設置域名的更多信息,請參閱我們的介紹到DigitalOcean DNS

Debian 10上的Nginx默認啟用了一個服務器塊,配置為從/var/www/html目錄提供文檔。雖然這對於單個站點效果很好,但如果您托管多個站點,它可能變得不易管理。請勿修改/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值,則您的Web根目錄的權限應該正確,但您可以通過輸入以下命令確保:

  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! Your Nginx server is successfully configured for <em>your_domain</em>. </h1>
<p>This is a sample page.</p>
    </body>
</html>

完成後請保存並關閉文件。在 nano 中,您可以按 CTRL + X,然後按 Y,然後按 ENTER 進行此操作。

為了讓 Nginx 來提供此內容,您必須創建一個帶有正確指令的服務器塊,指向您的自定義 Web 根目錄。而不是直接修改默認配置文件,請在 /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 更新為您的域名。請記得用您的實際域名替換 your_domain

接下來,通過在 sites-enabled 目錄內創建符號鏈接以啟用此服務器塊,Nginx 在啟動期間會從中讀取:

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

您的服務器現在啟用了兩個服務器塊並配置為根據它們的 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指令,刪除#符號以取消註釋該行:

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

完成後保存並關閉文件。

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

  1. sudo nginx -t

如果沒有任何問題,以下是輸出:

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

一旦配置測試通過,重新啟動Nginx以啟用更改:

  1. sudo systemctl restart nginx

現在,Nginx應該正在提供您的域名。您可以通過訪問http://your_domain來測試這一點。您在/var/www/your_domain/html/index.html文件夾中創建的自定義HTML應該在這裡呈現:

步驟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配置為其他,否則此日誌文件記錄對您的Web伺服器的每個請求。
  • /var/log/nginx/error.log:任何Nginx錯誤都將在此日誌中記錄。

結論

現在您已經安裝了您的Web伺服器,您有許多選擇可以為您的用戶提供各種內容和使用技術創建更豐富的體驗。

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-debian-10