Nginx是一款高效能的開源Web伺服器,同時也充當反向代理伺服器和負載均衡器。它設計簡潔,效率出眾,以處理大量並行連線而聞名,成為許多網站和套用的首選伺服器軟體。在本文中,我們將深入介紹如何在Ubuntu 22.04上安裝、配置和管理Nginx,以便您能更好地利用其強大功能。
Nginx(發音為"engine x")是由俄羅斯開發者Igor Sysoev建立的一款輕量級、高效能的Web伺服器。它首次釋出於2004年,如今已成為全球最受歡迎的Web伺服器之一。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可以與其他工具和服務整合,以實作更廣泛的功能。例如:
整合Nginx與其他工具需要根據特定工具的文件進行配置。確保您詳細了解每個整合的步驟和配置選項。
透過探索Nginx的附加功能和整合方式,您可以更靈活地適應各種場景和需求。