其實Nginx官方文檔有一篇文章專門介紹如何配置負載均衡,見: Using nginx as HTTP load balancer, 非常詳細。這篇博客主要結合前后端異構項目(Asp.Net Core WebApi + Angular/Vue/React等),簡單總結一下Nginx使用及心得。
1. 下載安裝啟動Nginx
從官方網站https://nginx.org/en/download.html下載Nginx,需要注意的是:Nginx提供Mainline, Stable, Legacy三個分類版本,學習最新特性用Mainline,生產環境一般用Stable,如有具體版本要求(老版本),可以在Legacy中找到需要的版本,關於版本的更多細參考: NGINX Versioning Explained。至於安裝啟動,可以參考官方文檔:Linux安裝,Windows安裝及啟動
2. 前端項目配置負載均衡
使用Angular/Vue/React等作為前台項目, 可以使用Nginx作為Web服務器,對同一個項目多部署幾個實例,然后按照官方文檔配置負載均衡即可。
2-1. 簡單創建兩個發布目錄,每個目錄只放置簡單Html標簽及內容的index.html文件,模擬Angular/Vue/React等作為前台發布。為了便與觀察,兩個目錄下的index.html稍有不同。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Web Pages - 1</title> 7 </head> 8 <body> 9 <h1>Web Pages - 1</h1> 10 </body> 11 </html>
2-2. 打開Nginx配置文件,修改如下(已刪除其他與本主題不相干配置項),重啟Nginx, 將兩個網站發布一下。
1 server { 2 listen 8081; 3 server_name localhost; 4 location / { 5 # 請注意,雖然Window目錄路徑使用反斜杠(\),但配置文件中的路徑必須替換為UNIX樣式的正斜杠(/) 6 root c:/wwwroot/webpage-1; 7 index index.html index.htm; 8 } 9 } 10 11 server { 12 listen 8082; 13 server_name localhost; 14 location / { 15 root c:/wwwroot/webpage-2; 16 index index.html index.htm; 17 } 18 }
2-3. 配置Nginx負載均衡(在以上配置文件基礎上增加以下配置)
1 upstream Webpages { 2 server localhost:8081; 3 server localhost:8082; 4 } 5 6 server { 7 listen 8080; 8 server_name localhost; 9 location / { 10 proxy_pass http://Webpages; 11 } 12 }
3. 后端項目配置負載均衡
后端項目(Asp.Net Core WebApi) 不能直接使用Nginx作為Web服務器,需要先使用IIS、Kestrel部署多個實例,或者把項目部署成服務,然后才能使用Nginx配置負載均衡。
3-1. 假設我們已經使用IIS部署了三個Web API,分別為:localhost:8087,localhost:8088,localhost:8089。和上面類似的,只需在配置文件中相應增加upstream節點和Server節點即可。
upstream WebApi { server localhost:8087; server localhost:8088; server localhost:8089; } server { listen 8090; server_name localhost; location / { proxy_pass http://WebApi; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
4. Nginx官方文檔中的一些其他常用參考
4. nginx books
5. FAQ