海外雲在線 海外雲在線 立即諮詢

阿里雲企業帳號代開 阿里雲ECS安裝配置Nginx集群

阿里雲國際 / 2026-05-14 16:59:19

前言:為什麼要搭建Nginx集群?別以為只是「多台機器疊在一起」

說到Nginx集群,別以為只是把幾台伺服器隨便擺一起。實際上,這就像讓一群同事組成「超級團隊」——有人接待客戶、有人處理數據、有人監控狀態,分工明確又緊密合作。當你的網站突然被熱門話題引爆,流量暴增十倍,單台伺服器肯定崩潰。這時候,Nginx集群就是你的「救火隊」,自動分配流量、快速切換備用機,讓你的網站穩如泰山!

準備工作:ECS環境配置

申請ECS實例

第一步,去阿里雲控制台創建兩個ECS實例(建議同一可用區,降低延遲)。系統選擇CentOS 7或Ubuntu 20.04,因為Nginx在這些系統上兼容性最好。記住選「按量付費」或「包年包月」,別一時手滑選了「按需付費」結果後面被驚到帳單!(開玩笑,實際上按量付費更適合測試環境)

重點來了:實例配置建議2核4G起步,畢竟集群需要處理更多請求。網路選擇「專有網路VPC」,這樣內網IP通訊更快更安全。創建完成後,記得記錄下兩個實例的內網IP(比如192.168.1.10和192.168.1.11),後面配置會用到。

安全組設置

安全組是ECS的「保鏢」,必須仔細設置。打開安全組規則,添加入站規則:

  • 允許80端口(HTTP)
  • 允許443端口(HTTPS,如果你有SSL證書)
  • 允許SSH(22端口,用來遠程連接)

重點提醒:千萬別開放所有IP(0.0.0.0/0)到22端口,除非你有強大的防火牆!建議只允許你的IP地址,避免被黑客掃描攻擊。設置好後,記得點「保存」,否則後悔莫及!

阿里雲企業帳號代開 系統更新與依賴安裝

連上兩台ECS的SSH,先更新系統:Ubuntu用sudo apt update && sudo apt upgrade -y,CentOS用sudo yum update -y。然後安裝必要工具,比如vim(編輯配置文件)、curl(測試連接)和net-tools(看端口狀態)。

這個步驟看似瑣碎,但省略的話後面配置會卡住。就像做飯前不洗菜,後面炒出來肯定有沙子!(別問我怎麼知道的)

安裝Nginx並配置基本服務

阿里雲企業帳號代開 單台ECS的Nginx安裝

在兩台ECS上都執行安裝Nginx。Ubuntu:sudo apt install nginx -y;CentOS:sudo yum install epel-release -y && sudo yum install nginx -y。安裝完後,啟動服務:sudo systemctl start nginx,並設為開機自啟:sudo systemctl enable nginx

現在測試一下:在瀏覽器輸入ECS的公網IP,應該能看到Nginx的預設歡迎頁面。如果顯示「403 Forbidden」,檢查/var/www/html的權限,通常用sudo chown -R nginx:nginx /var/www/html修正(CentOS)或sudo chown -R www-data:www-data /var/www/html(Ubuntu)。

測試Web服務

為了後續測試方便,我們在兩台伺服器上放個簡單的測試頁面。比如在/var/www/html/index.html中寫入:

<html>
<body>
  <h1>這是伺服器A(192.168.1.10)</h1>
</body>
</html>

另一台伺服器B則寫成「這是伺服器B(192.168.1.11)」。這樣後面測試負載均衡時,就能清楚看到請求被轉發到哪台機器。

搭建Nginx負載均衡集群

配置upstream模塊

現在選擇其中一台ECS作為「調度中心」(可以是任意一臺,但通常選性能較好的)。編輯Nginx配置文件/etc/nginx/nginx.conf,在http區塊中加入:

upstream backend {
    server 192.168.1.10:80;
    server 192.168.1.11:80;
    least_conn; # 使用最少連接數策略
    keepalive 32; # 保持長連接
}

這段配置的意思是:當有請求來臨,Nginx會根據後端伺服器的當前連接數,把流量分配給最閒的那臺。keepalive 32則是讓Nginx與後端保持32個長連接,減少TCP握手開銷。

反向代理設置

接下來,在server區塊中配置反向代理:

server {
    listen 80;
    server_name your_domain.com; # 改成你的域名或ECS公網IP
    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_pass指向我們剛剛定義的backend。另外,proxy_set_header是為了把客戶端真實IP傳給後端伺服器,避免後端看到的都是Nginx的IP。

保存後,用nginx -t檢查配置語法,如果顯示successful,就重啟Nginx:sudo systemctl restart nginx

健康檢查與會話保持

如果後端伺服器掛了,Nginx必須自動剔除它。在upstream中加入健康檢查:

upstream backend {
    server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:80 max_fails=3 fail_timeout=30s;
    check interval=3000 rise=2 fall=3 timeout=1000;
}

但注意:這需要安裝Nginx的ngx_http_upstream_check_module模組,標準Nginx不帶這個,可能需要編譯安裝。或者用更簡單的方式:在後端伺服器上部署一個健康檢查頁面,比如/health,然後在Nginx中配置:

upstream backend {
    server 192.168.1.10:80;
    server 192.168.1.11:80;
    check_http_send 'GET /health HTTP/1.0\r\n\r\n';
    check_expect_match '200 OK';
}

會話保持(Session Affinity)方面,如果應用需要保持用戶登錄狀態,可以在upstream中添加ip_hash;,這樣同一個IP的請求會被固定分配到同一臺伺服器。

驗證集群運行狀態

壓力測試

ab工具(Apache Benchmark)模擬高流量。比如ab -n 1000 -c 100 http://your_domain.com/,這會發送1000個請求,並發100個。觀察兩台後端伺服器的訪問日誌,應該看到請求被均勻分配。如果看到某台伺服器日誌幾乎沒有記錄,檢查Nginx配置是否正確。

還可以用curl -I your_domain.com多次,查看X-Forwarded-For頭部,確認真實IP是否正確傳遞。

故障模擬測試

關閉其中一台伺服器的Nginx服務:sudo systemctl stop nginx。然後快速刷新瀏覽器,看看是否請求自動切換到另一台。用curl多次請求,觀察返回的伺服器標識(伺服器A或B)。正常情況下,所有請求都應該由存活的伺服器處理,且不中斷服務。

這時候再開啓已關閉的伺服器,Nginx會自動恢復調度。這就是集群的「自我修復」能力!

常見問題與解決方案

端口衝突處理

如果重啟Nginx時報錯port 80 is already in use,可能是其他程序佔用了端口。用sudo netstat -tulnp | grep :80找出佔用者,然後殺掉進程或調整配置。

配置文件調試技巧

Nginx配置錯誤是常見問題。每次修改後,務必用nginx -t檢查語法。如果配置成功但服務不生效,檢查error.log(通常在/var/log/nginx/error.log),裡面會有詳細錯誤信息。另外,可以用nginx -s reload平滑重載配置,避免重啟導致短暫中斷。

結語:集群部署的關鍵點

搭好Nginx集群後,記住這幾點:

  • 定期檢查健康狀態,避免潛在故障
  • 備份Nginx配置文件,萬一改錯了可以快速恢復
  • 隨著流量增長,隨時擴容後端伺服器,Nginx能自動適應

最後,別忘了給你的伺服器加監控!用阿里雲的雲監控服務,或者開源工具如Prometheus,讓你知道何時需要擴容。畢竟,「防患於未然」永遠比「救火」更省心!

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系