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 服務通過。Nginx ufw 在安裝時會把他自身注冊成為服務。

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)

Nginx

第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 Server

這里推薦一下可與 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
  • nginx重啟報錯:nginx: [error] invalid PID number "" in "/run/nginx.pid"
  • 問題描述:執行 nginx -t 是OK的,然而在執行 nginx -s reload 的時候報錯

    nginx: [error] invalid PID number “” in “/run/nginx.pid”

  • 解決辦法

    需要先執行

    nginx -c /etc/nginx/nginx.conf

    nginx.conf文件的路徑可以從nginx -t的返回中找到。

    nginx -s reload

 

第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/

現在已啟用並配置了兩個服務器塊,以及基於它們的listenserver_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 頁面。

Nginx教程

第 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 運行過程中發生的錯誤日志。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM