當前位置: 首頁>>技術教程>>正文


如何在Ubuntu 18.04 Bionic Beaver Linux上設置Nginx Web服務器

, ,

目的

了解如何在Ubuntu 18.04 Bionic Beaver上安裝和配置Nginx Web服務器

要求

  • 根權限

困難

簡單

約定

  • -要求linux命令可以直接以root用戶身份或通過使用root特權以root特權執行sudo命令
  • $-要求linux命令以普通非特權用戶身份執行

介紹

nginx-logoNginx Web服務器與Apache一起,是世界上最知名和使用最多的Web服務器之一。通常,它比Apache少resource-hungry,也可以用作reverse-proxy。

在本教程中,我們將看到如何在Ubuntu 18.04 Bionic Beaver上安裝和配置Nginx Web服務器。

第1步-安裝

在Ubuntu 18.04上安裝Nginx非常容易,我們隻需要使用apt-get

$ sudo apt-get update && sudo apt-get install nginx

第一個命令將我們的計算機與ubuntu存儲庫同步,而第二個命令實際上安裝了nginx軟件包。幾秒鍾後,服務器將安裝在我們的係統上。安裝腳本還將負責啟動Nginx服務。

我們可以使用以下方法輕鬆地驗證服務是否正在運行linux命令

$ sudo systemctl is-active nginx

上麵的命令將返回active如果服務已啟動:實際上,如果我們將瀏覽器指向服務器地址或localhost如果我們從機器本身進行操作,則應該可視化nginx歡迎頁麵:

Nginx welcome page

Nginx歡迎頁麵



第2步-防火牆設置

為了使我們的服務器能夠向其他計算機提供頁麵,我們必須設置防火牆以允許通過端口的傳入流量80(默認)和端口443如果我們想使用https協議。要執行此操作的確切命令取決於計算機上使用的防火牆管理器,但是在此我將假定ufw正在運行,因為它是Ubuntu上的默認設置。

首先,我們驗證防火牆是否處於活動狀態:

$ sudo ufw status

如果不是,您可以通過執行以下命令來激活它linux命令

$ sudo ufw enable

但是,請小心,因為係統會通知您,激活防火牆可能會破壞當前存在的連接。要允許通過端口80的傳入連接,我們應該運行:

$ sudo ufw allow 80/tcp

要允許端口443,請執行以下操作:

$ sudo ufw allow 443/tcp

最後,為了可視化防火牆的當前狀態,我們可以運行:


$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 443/tcp                    ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp (v6)               ALLOW IN    Anywhere (v6)
[ 4] 80/tcp (v6)                ALLOW IN    Anywhere (v6)

如您所見,上麵的命令將為我們提供已配置規則的概述,並按數字索引。

Nginx服務器塊(虛擬主機)

Nginx服務器塊等效於Apache VirtualHost,用於在同一服務器計算機上運行多個站點。在標準安裝的Nginx上,我們可以找到默認的server block/etc/nginx/sites-available/default。讓我們看一下:

# Default server configuration
#
server {
  listen 80 default_server;
  listen [::]:80 default_server;

  [...]
  root /var/www/html;

  # Add index.php to the list if you are using PHP
  index index.html index.htm index.nginx-debian.html;

  server_name _;

  location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
  }

  [...]

}

上麵的一個是Ubuntu 18.04上默認Nginx服務器塊的簡化版本(我剛剛刪除了注釋)。如您所見,每個指令以分號結尾。我們在裏麵看到的第一件事Server一節4-5行,是listen指令。第一個是ipv4而第二個ipv6。實際上,這可以縮短為listen [::]:80 ipv6only=off

default_server指令將此服務器塊設置為默認服務器塊,這意味著如果沒有其他配置與請求的名稱匹配,將使用該服務器塊。一次隻能在一個服務器塊上使用此偽指令。

root指令8號線將路徑設置為該塊將服務的站點的根目錄的路徑:它基本上等同於Apache的DocumentRoot

index指令11行定義可用作索引的文件。將按順序檢查文件。

13號線server_name偽指令用於定義要分配給配置的服務器名稱,並確定將處理請求的服務器塊。定義服務器名稱時,可以使用通配符和正則表達式。在這種情況下,提供的值為_:之所以使用它,是因為它是一個無效值,並且永遠不會與任何真實主機名匹配(請記住,此配置是catch-all)。

最後,我們有location指令15號線:更改服務器塊中處理請求的方式。在這種情況下,要進行指令匹配的路徑是/。 uri要匹配的部分是主機段之後的部分。

在位置”stanza”內,位於18號線我們可以觀察到另一個指令,try_files:使用找到的第一個文件滿足請求,它以指定的順序檢查文件是否存在。在這種情況下,如本節中的注釋所建議,它首先嘗試匹配文件而不是目錄。如果沒有任何內容可以滿足要求,則會向用戶顯示404頁麵。請注意,該請求表示為$uri變量,並將其定義為目錄的是斜杠。



定義自定義服務器塊

現在,我們應該創建一個自定義服務器塊來提供html站點。首先,我們將創建一個目錄,該目錄將用作該塊的文檔根目錄,我們將其稱為示例:

$ sudo mkdir /var/www/example

我們還需要創建一個index.html頁麵以在到達該站點時顯示:

$ echo "Welcome to example!" | sudo tee /var/www/example/index.html > /dev/null

完成後,我們可以在/etc/nginx/sites-available目錄,為了保持一致性,我們將其命名為”example”:

server {
    listen 80;
    root /var/www/example;
    index index.html;
    server_name www.example.lan;
}

要測試我們的配置正確並且不包含任何語法錯誤,我們可以運行以下命令linux命令

$ sudo nginx -t

現在,由於我們沒有dns服務器,因此要將請求發送到具有指定名稱的服務器,我們必須在/etc/hosts客戶端計算機的文件。在這種情況下,我用作服務器(在虛擬主機環境中)的計算機的地址為192.168.122.89,因此:

# The client /etc/hosts file
[...]
192.168.122.89 www.example.lan

在激活新服務器塊之前,我們有機會驗證默認配置確實可以作為default-catchall使用。如果現在從剛剛添加了hosts條目的客戶端計算機導航到”www.example.lan”,則可以看到服務器將使用默認的nginx頁麵響應我們的請求(因為尚未激活新塊)。

要激活我們的服務器塊,我們必須從我們編寫的配置中創建一個符號鏈接/etc/nginx/sites-available/etc/nginx/sites-enabled

$ sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled

之後,我們需要重啟Nginx:

$ sudo systemctl restart nginx

在這一點上,如果我們導航到”www.example.lan”,我們應該看到不是很複雜的頁麵:

Example default page

默認頁麵示例


使用ssl

要使用ssl,我們基本上有兩種選擇:從證書頒發機構獲取證書,或使用self-signed證書。在第一個示例中,我們將自行生成證書。運行以下命令linux命令繼續:

$ sudo openssl req -x509 \
  -days 365 \
  -sha256 \
  -newkey rsa:2048 \
  -nodes \
  -keyout /etc/ssl/private/example.key \
  -out /etc/ssl/certs/example-cert.pem

使用此命令,我們生成了一個有效期為365天的自簽名證書和一個2048位rsa密鑰。證書和密鑰將保存在/etc/ssl/certs/example-cert.pem/etc/ssl/private/example.key文件。隻需回答將要問到的問題,輸入時請特別注意FQDN:它必須與將使用證書的域匹配才能正常工作。


You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:Milan
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Damage Inc.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.example.lan
Email Address []:

現在我們有了證書和密鑰,我們必須修改我們的服務器塊配置,以使其變為:

server {
    listen 443 ssl;
    server_name www.example.lan;
    ssl_certificate /etc/ssl/certs/example-cert.pem;
    ssl_certificate_key /etc/ssl/private/example.key;
    root /var/www/example;
    index index.html;
}

如您所見,我們修改了listen指令在2號線,使用端口443並啟用ssl參數,然後我們在以下位置添加了兩個新的指令4-5行ssl_certificatessl_certificate_key,分別指向證書和證書密鑰位置。

重新啟動nginx服務後,如果我們現在導航到https://www.example.lan由於證書為self-signed,因此我們應該看到瀏覽器發出的警告。盡管如此,我們的配置仍然有效,並且我們使用的是加密連接:

Invalid certificate warning

無效的證書警告



使用讓我們加密

self-signed證書的替代方案是由經過驗證的第三方頒發的證書。雖然我們可以從證書頒發機構購買證書,但也可以選擇使用“讓我們加密!”。

“讓我們加密”本身就是一個自由開放的證書頒發機構,它使我們可以使用以下方法自動獲取瀏覽器信任的證書:ACME協議和在服務器上運行的證書管理代理。唯一的條件是能夠證明我們可以控製要使用證書的域。

要使用該服務,首先要做的是安裝certbotACME客戶端和nginx-specific插件:

$ sudo apt-get update && apt-get install certbot python-certbot-nginx

獲得證書非常簡單:

$ sudo certbot --nginx -m <administrator-email> -d <domain>

顯然,要使其正常工作,該域必須正確指向我們的公共可訪問服務器IP。 Certbot會提示我們回答一些問題以調整站點配置,如果一切順利,證書和密鑰將保存到/etc/letsencrypt/live/目錄。 Certbot還將把所需的更改應用於服務器塊並重新加載服務。

結論

我們在Ubuntu 18.04上安裝了Nginx Web服務器,了解了如何打開所需的防火牆端口,檢查了默認的Ubuntu服務器塊並創建了自定義配置。最後,我們生成了self-signed證書,並對服務器塊進行了必要的修改以使用https協議。

作為替代方案,我們考慮實現“讓我們加密!”,它可以免費為我們提供公認的證書。請隨時提出任何問題,並訪問Nginx官方文檔以獲取更多詳細信息。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/10368.html,未經允許,請勿轉載。