當前位置: 華文世界 > 數位

如何在 Ubuntu 22.04 上安裝、配置、使用 Nginx?

2024-02-16數位

Nginx是一款高效能的開源Web伺服器,同時也充當反向代理伺服器和負載均衡器。它設計簡潔,效率出眾,以處理大量並行連線而聞名,成為許多網站和套用的首選伺服器軟體。在本文中,我們將深入介紹如何在Ubuntu 22.04上安裝、配置和管理Nginx,以便您能更好地利用其強大功能。

Nginx(發音為"engine x")是由俄羅斯開發者Igor Sysoev建立的一款輕量級、高效能的Web伺服器。它首次釋出於2004年,如今已成為全球最受歡迎的Web伺服器之一。Nginx以其卓越的效能和靈活性而聞名,適用於靜態和動態內容的服務,以及負載均衡和反向代理等多種套用場景。

為什麽選擇Nginx?

Nginx之所以備受青睞,有以下幾個顯著的優勢:

  • 高效能: Nginx的事件驅動架構使其在處理大量並行連線時表現出色。
  • 低資源消耗: 相較於傳統伺服器軟體,Nginx的記憶體消耗較低,能夠高效利用系統資源。
  • 可延伸性: Nginx支持模組化架構,可以透過添加模組來擴充套件其功能,滿足各種需求。
  • 負載均衡: Nginx作為負載均衡器,能夠平衡多個伺服器之間的流量,提高系統的可用性和穩定性。
  • 反向代理: Nginx可以作為反向代理伺服器,將請求轉發到後端伺服器,隱藏真實伺服器的細節,提高安全性。
  • 安裝Nginx

    在開始安裝Nginx之前,確保您已經完成了一些必要的準備工作。這包括更新系統軟體包列表和安裝所需的依賴項。

    在終端中執行以下命令,以確保您的系統軟體包列表是最新的:

    sudo apt update

    升級系統以套用最新的安全更新和功能改進:

    sudo apt upgrade

    在安裝Nginx之前,您可能需要安裝一些依賴項,以確保Nginx能夠正常執行。一般來說,這些依賴項已經在Ubuntu系統中安裝,但為了確保完整性,您可以執行以下命令:

    sudo apt install -y curl gnupg2 ca-certificates lsb-release

    透過這些步驟,您的系統將會是最新的,並且具備了安裝Nginx所需的基本條件。

    使用apt安裝Nginx

    現在,我們將透過apt包管理器在Ubuntu 22.04上安裝Nginx。apt是Ubuntu系統中用於管理軟體包的強大工具,使得安裝和更新軟體變得非常簡便。

    執行以下命令以安裝Nginx:

    sudo apt install -y nginx

    這會下載並安裝Nginx及其相關元件。 -y 選項表示在安裝過程中不詢問任何確認,直接進行安裝。

    安裝完成後,可以使用以下命令啟動Nginx服務:

    sudo systemctl start nginx

    確保Nginx在系統啟動時自動啟動,可以執行以下命令:

    sudo systemctl enable nginx

    現在,Nginx已成功安裝並正在執行。您可以透過在瀏覽器中輸入伺服器的IP地址或網域名稱來驗證Nginx是否正常工作。如果一切正常,您將看到Nginx的歡迎頁面。

    Nginx配置

    Nginx的配置檔位於 /etc/nginx 目錄下,其中最主要的配置檔是nginx.conf 。我們將學習如何修改預設網站配置並添加新的虛擬主機。

    開啟 /etc/nginx/nginx.conf 檔,了解Nginx的主要配置結構。Nginx的配置檔采用塊結構,主要分為events 、http 和servers 等塊。在http 塊中,會包含全域的HTTP配置,而servers 塊包含了虛擬主機的配置。

    user www-data;worker_processes auto;...http { ... server { listen 80; server_name example.com; ... } ...}

    預設情況下,Nginx配置檔中包含一個預設的虛擬主機配置,監聽80埠。您可以透過修改此配置來更改預設網站的行為。開啟 /etc/nginx/sites-available/default 檔:

    sudo nano /etc/nginx/sites-available/default

    您可以修改配置中的內容,如更改根目錄、添加或修改 server_name 等選項。保存並結束後,重新載入Nginx以套用更改:

    sudo systemctl reload nginx

    要添加新的虛擬主機,首先在 /etc/nginx/sites-available/ 目錄下建立一個新的配置檔。例如,建立一個名為mywebsite 的配置檔:

    sudo nano /etc/nginx/sites-available/mywebsite

    在新檔中,可以定義新虛擬主機的配置,例如:

    server { listen 80; server_name mywebsite.com www.mywebsite.com; location / { root /var/www/mywebsite; index index.html; }}

    保存並結束後,建立配置檔的符號連結到 /etc/nginx/sites-enabled/ 目錄:

    sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/

    最後,重新載入Nginx以套用更改:

    sudo systemctl reload nginx

    現在,您已經學會了如何修改預設網站配置和添加新的虛擬主機。

    管理Nginx服務

    了解如何管理Nginx服務是非常重要的,包括啟動、停止和重新開機服務,以及檢視Nginx的狀態和日誌。

    使用以下命令啟動Nginx服務:

    sudo systemctl start nginx

    停止Nginx服務:

    sudo systemctl stop nginx

    重新啟動Nginx服務:

    sudo systemctl restart nginx

    要檢視Nginx服務的當前狀態,可以使用以下命令:

    sudo systemctl status nginx

    Nginx的日誌檔位於 /var/log/nginx/ 目錄下。可以使用以下命令檢視錯誤日誌:

    sudo tail -f /var/log/nginx/error.log

    透過這些命令,您可以輕松地啟動、停止和重新開機Nginx服務,並檢視相關的狀態和日誌資訊。

    靜態站點部署

    首先,建立一個存放靜態網站檔的目錄。以 /var/www/mywebsite 為例:

    sudo mkdir -p /var/www/mywebsite

    將您的靜態網站檔復制到剛剛建立的目錄。例如,如果您有一個簡單的HTML頁面:

    sudo cp /path/to/your/website/* /var/www/mywebsite/

    開啟Nginx配置檔:

    sudo nano /etc/nginx/sites-available/mywebsite

    在 server 塊中添加以下配置,指向剛剛建立的靜態網站目錄:

    server { listen 80; server_name mywebsite.com www.mywebsite.com; location / { root /var/www/mywebsite; index index.html; }}

    保存配置檔後,建立配置檔的符號連結並重新載入Nginx:

    sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/sudo systemctl reload nginx

    現在,您可以透過在瀏覽器中輸入您的伺服器IP地址或網域名稱來存取您的靜態網站。

    動態站點部署

    使用以下命令安裝PHP和相關元件:

    sudo apt install -y php-fpm

    開啟Nginx的虛擬主機配置檔:

    sudo nano /etc/nginx/sites-available/mywebsite

    在 server 塊中添加以下配置,以啟用PHP處理:

    server { listen 80; server_name mywebsite.com www.mywebsite.com; location / { root /var/www/mywebsite; index index.php index.html; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}

    保存配置檔後,建立配置檔的符號連結並重新載入Nginx:

    sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/sudo systemctl reload nginx

    現在,您可以在 /var/www/mywebsite/ 目錄下建立一個簡單的index.php 檔,並透過瀏覽器存取。例如:

    <?phpphpinfo();?>

    透過存取您的網域名稱或IP地址,您應該能夠看到PHP資訊頁面,這表示Nginx已成功配置為支持PHP。

    HTTPS配置

    使用Let's Encrypt提供的Certbot工具可以輕松申請和管理SSL證書。首先,安裝Certbot:

    sudo apt install -y certbot

    然後,執行Certbot來獲取SSL證書:

    sudo certbot certonly --nginx -d mywebsite.com -d www.mywebsite.com

    Certbot將引導您完成SSL證書的獲取過程,並將證書檔保存在 /etc/letsencrypt/live/mywebsite.com/ 目錄中。

    開啟Nginx虛擬主機配置檔:

    sudo nano /etc/nginx/sites-available/mywebsite

    在 server 塊中添加以下配置,啟用SSL:

    server { listen 80; server_name mywebsite.com www.mywebsite.com; # Redirect HTTP to HTTPS return 301 https://$host$request_uri;}server { listen 443 ssl; server_name mywebsite.com www.mywebsite.com; ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/mywebsite.com/chain.pem; location / { root /var/www/mywebsite; index index.php index.html; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}

    保存配置檔後,建立配置檔的符號連結並重新載入Nginx:

    sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/sudo systemctl reload nginx

    現在,透過瀏覽器存取您的網域名稱或IP地址,您應該能夠透過HTTPS存取您的網站,且瀏覽器位址列中顯示安全的鎖圖示。

    負載均衡配置

    開啟Nginx虛擬主機配置檔:

    sudo nano /etc/nginx/sites-available/mywebsite

    在 server 塊中添加以下負載均衡配置:

    upstream backend { server backend1.example.com weight=3; server backend2.example.com; server backend3.example.com;}server { listen 80; server_name mywebsite.com www.mywebsite.com; # Redirect HTTP to HTTPS return 301 https://$host$request_uri;}server { listen 443 ssl; server_name mywebsite.com www.mywebsite.com; ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/mywebsite.com/chain.pem; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}

    在上述配置中,我們透過 upstream 塊定義了三個後端伺服器,其中一個具有更高的權重(weight=3 )。然後,location / 塊使用proxy_pass 將請求轉發到這個負載均衡組。您可以根據實際需求調整權重和後端伺服器的數量。

    保存配置檔後,建立配置檔的符號連結並重新載入Nginx:

    sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/sudo systemctl reload nginx

    現在,您可以透過瀏覽器存取您的網域名稱或IP地址,Nginx將會以負載均衡的方式將請求分發到後端伺服器。可以透過檢視後端伺服器的存取日誌來確認負載均衡是否正常工作。

    安全性加固

    使用 ufw 工具配置防火墻規則,只允許必要的流量透過。首先,安裝ufw :

    sudo apt install -y ufw

    然後,配置防火墻規則:

    sudo ufw default deny incomingsudo ufw default allow outgoingsudo ufw allow sshsudo ufw allow httpsudo ufw allow httpssudo ufw enable

    這將禁止所有傳入的流量,僅允許SSH、HTTP和HTTPS的流量透過。

    在Nginx的配置檔中,禁用不必要的模組可以減少系統的攻擊面。開啟Nginx的主配置檔:

    sudo nano /etc/nginx/nginx.conf

    在檔中找到並註釋掉不必要的模組:

    # 例如,禁用Nginx的autoindex模組# load_module modules/ngx_http_autoindex_module.so;

    定期更新Nginx和系統是保持系統安全的關鍵步驟。使用以下命令更新軟體包:

    sudo apt updatesudo apt upgrade

    可以設定定期自動更新,以確保系統和軟體包保持最新。

    效能調優

    開啟Nginx的主配置檔:

    sudo nano /etc/nginx/nginx.conf

    根據伺服器的硬體配置和實際需求,可以調整一些效能相關的參數。例如:

    # 提高工作行程數量worker_processes auto;# 提高每個工作行程的最大連線數events { worker_connections 1024;}# 調整連線超時時間http { ... keepalive_timeout 30s; ...}

    根據伺服器的負載和效能表現,可以逐步調整這些參數以達到最佳效能。

    Nginx可以使用緩存來儲存靜態資源,提高網站的響應速度。添加以下配置到虛擬主機配置中:

    server { ... location / { try_files $uri $uri/ =404; proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 開啟緩存 proxy_cache my_cache; proxy_cache_valid 200 1h; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; proxy_ignore_headers Cache-Control Expires; } location ~ \.php$ { ... # 禁用緩存 fastcgi_no_cache $cookie_PHPSESSID; fastcgi_cache_bypass $cookie_PHPSESSID; fastcgi_cache my_cache; fastcgi_cache_valid 200 1h; }}

    以上配置啟用了Nginx的緩存功能,可以根據實際需要進行調整。確保在使用緩存時仔細考慮緩存的時間、更新策略和儲存位置。

    附加功能

    使用Nginx擴充套件模組

    Nginx提供了許多擴充套件模組,可以透過添加模組來擴充套件Nginx的功能。例如,您可以使用 ngx_http_geoip_module 模組來實作基於地理位置的存取控制,或者使用ngx_pagespeed 模組來最佳化網站效能。

    要使用擴充套件模組,首先需要編譯Nginx時包含這些模組。可以使用 nginx -V 命令檢視Nginx的編譯配置,確保包含了您需要的模組。

    然後,可以透過下載原始碼,編譯並安裝包含特定擴充套件模組的Nginx版本。詳細的步驟取決於您選擇的擴充套件模組。

    整合Nginx與其他工具

    Nginx可以與其他工具和服務整合,以實作更廣泛的功能。例如:

  • 與Let's Encrypt一起使用: 整合Let's Encrypt證書自動續期功能,確保您的SSL證書始終有效。
  • 與Content Delivery Network (CDN) 整合: 將Nginx與CDN服務一起使用,以提高全球使用者存取您網站的速度。
  • 與監控工具整合: 整合監控工具,如Prometheus和Grafana,以即時監控Nginx的效能和狀態。
  • 與Web Application Firewall (WAF) 整合: 使用WAF來增強Nginx的安全性,保護您的網站免受惡意攻擊。
  • 整合Nginx與其他工具需要根據特定工具的文件進行配置。確保您詳細了解每個整合的步驟和配置選項。

    透過探索Nginx的附加功能和整合方式,您可以更靈活地適應各種場景和需求。