nginx 配置反向代理
阿新 • • 發佈:2020-09-03
nginx 配置反向代理
基本概念
代理:代替處理
正向代理
正向代理方式是指用代理伺服器來代替內部網路中的計算機(配置好代理伺服器的 IP)發出 Internet 上的連線請求,然後將請求結果返回給他們。
反向代理
反向代理方式是指用代理伺服器來接受 Internet 上的連線請求,然後將請求轉發給內部網路中的上游伺服器,並將從上游伺服器得到的結果返回給 Internet 上請求連線的客戶端,此時代理伺服器對外的表現就是一個 Web 伺服器。充當反向代理伺服器也是 Nginx 的一種常見用法。
正向代理、反向代理區別
- 正向代理代理客戶端,反向代理代理服務端。
- 正向代理隱藏客戶端,反向代理隱藏服務端。
練習
下面練習配置 nginx 反向代理,讓 nginx 充當反向代理伺服器。
-
部署 travel 專案 到被代理伺服器 tomcat
刪除 tomcat 自帶專案 cd /usr/local/tomcat/apache-tomcat-7.0.57/webapps rm -rf ./* 將 travel 專案打包成 ROOT.war 修改 finalName <finalName>ROOT</finalName> 打包 mvn package 注:打成 ROOT.war 的好處是在 tomcat 中部署後,不需要去輸入專案名稱訪問。 上傳 ROOT.war cd /usr/local/tomcat/apache-tomcat-7.0.57/webapps rz 啟動 tomcat cd /usr/local/tomcat/apache-tomcat-7.0.57/bin ./startup.sh 訪問 ROOT 專案 本地火狐瀏覽器位址列輸入:192.168.214.128:8080
-
配置反向代理伺服器 nginx
在 nginx 配置檔案 nginx.conf 中: # upstream 定義了一個上游伺服器的叢集(這裡只有一個上游伺服器),便於反向代理中的 proxy_pass 使用 upstream tomcat-travel { server 192.168.214.128:8080; # 被代理伺服器的 ip 和埠 } server { listen 80; server_name www.hmtravel.com; location / { proxy_pass http://tomcat-travel; # 引用上面 upstream 中的 tomcat-travel index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
-
啟動反向代理伺服器 nginx
cd /usr/local/nginx/sbin ./nginx
-
訪問 travel 專案
直接訪問被代理伺服器上的 travel 專案 本地火狐瀏覽器位址列輸入 http://192.168.214.128:8080 通過反向代理伺服器訪問 travel 專案 本地火狐瀏覽器位址列輸入 http://wwww.hmtravel.com
nginx 基於反向代理/轉發的負載均衡
基本概念
伺服器叢集
多個 tomcat 上部署同一個專案,同時對外提供服務,就形成了 tomcat 的叢集。
好處:
增強併發能力
避免單點故障
負載均衡
如果伺服器叢集中的計算機效能都一樣,那麼應該做到每一個被訪問的機率一樣,這就是負載均衡。
練習
下面練習使用 nginx 實現基於反向代理/轉發的負載均衡。
部署 travel 專案到 3 個 tomcat
需要在 3 臺不同的機器上安裝 tomcat,部署同一個 travel 專案。
但是為了學習方便,現在將 3 個 tomcat 安裝在同一臺機器上。
這臺機器上之前已經通過解壓安裝了一份 tomcat,解壓在 /usr/local/tomcat/apache-tomcat-7.0.57,
並且已經上傳了 travel 專案,
因此再安裝 3 份 tomcat 並部署 travel 的做法如下:
1. 停止 tomcat
cd /usr/local/tomcat/apache-tomcat-7.0.57/bin
./shutdown.sh
2. 複製 3 份
cd /usr/local/tomcat
cp -r apache-tomcat-7.0.57 tomcat1
cp -r apache-tomcat-7.0.57 tomcat2
cp -r apache-tomcat-7.0.57 tomcat3
3. 修改埠
3.1 修改 tomcat1 埠
cd /usr/local/tomcat/tomcat1/conf
vim server.xml
設定忽略大小寫
:set ignorecase
查詢 port
/port
按 n 查詢下一個,按 N 查詢上一個
將查詢到的所有埠值 + 1(一共修改 5 個)
儲存退出
3.2 修改 tomcat2 埠
同樣的方法,將對應配置檔案中查詢到的埠值 + 2
3.3 修改 tomcat3 埠
同樣的方法,將對應配置檔案中查詢到的埠值 + 3
4. 啟動 3 個tomcat
cd /usr/local/tomcat/tomcat1/bin
./startup.sh
cd /usr/local/tomcat/tomcat2/bin
./startup.sh
cd /usr/local/tomcat/tomcat3/bin
./startup.sh
配置反向代理伺服器 nginx
nginx 配置檔案 nginx.conf 中:
# upstream 定義了一個上游伺服器的叢集
upstream tomcat-travel {
# 向這 3 臺上遊伺服器轉發的機率相同,都為 1/3
server 192.168.214.128:8081; # 被代理伺服器 tomcat1 的 ip 和埠
server 192.168.214.128:8082; # 被代理伺服器 tomcat2 的 ip 和埠
server 192.168.214.128:8083; # 被代理伺服器 tomcat3 的 ip 和埠
}
server {
listen 80;
server_name www.hmtravel.com;
location / {
proxy_pass http://tomcat-travel; # 引用上面 upstream 中的 tomcat-travel
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
啟動 nginx 或 重新載入 nginx 配置檔案
cd /usr/local/nginx/sbin
./nginx
或
cd /usr/local/nginx/sbin
./nginx -s reload
通過反向代理伺服器訪問 travel 專案
本地火狐瀏覽器位址列輸入 http://www.hmtravel.com,可以訪問到 travel 專案。
這個 travel 專案來自 tomcat1,也可能來自 tomcat2,還有可能來自 tomcat3,機率相等。
驗證負載均衡
-
區分 travel 專案
為了驗證訪問 3 個 tomcat 的機率相同,故意將部署在 3 個 tomcat 裡的 travel 專案變得不一樣。 將部署在 tomcat1 裡的travel 專案的首頁 index.html 的標題改為 tomcat1 將部署在 tomcat2 裡的travel 專案的首頁 index.html 的標題改為 tomcat2 將部署在 tomcat3 裡的travel 專案的首頁 index.html 的標題改為 tomcat3 注:html 的修改不必重啟 tomcat
-
再通過反向代理伺服器訪問 travel 專案
本地火狐瀏覽器位址列輸入 http://www.hmtravel.com,可以訪問到 travel 專案。 非常快地重新整理 n 次,能夠看出 tomcat1,tomcat2,tomcat3 的比例接近 1:1:1。
-
修改負載均衡配置
將來 tomcat1 tomcat2 tomcat3 會部署在不同的機器上。假設 tomcat3 所在機器是新買的,效能較好。希望 tomcat3 接受 50% 訪問量,tomcat1,tomcat2 分別接受 25% 訪問量。可以修改 nginx 配置檔案 nginx.conf 進行配置。
# upstream 定義了一個上游伺服器的叢集 upstream tomcat-travel { # 向這 3 臺上遊伺服器轉發的機率相同,都為 1/3 server 192.168.214.128:8081; # 被代理伺服器 tomcat1 的 ip 和埠 server 192.168.214.128:8082; # 被代理伺服器 tomcat2 的 ip 和埠 server 192.168.214.128:8083 weight=2; # 被代理伺服器 tomcat3 的 ip 和埠 } server { listen 80; server_name www.hmtravel.com; location / { proxy_pass http://tomcat-travel; # 引用上面 upstream 中的 tomcat-travel index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
-
重新載入 nginx 配置檔案
cd /usr/local/nginx/sbin ./nginx -s reload
-
通過反向代理伺服器訪問 travel 專案
本地火狐瀏覽器位址列輸入 http://www.hmtravel.com,可以訪問到 travel 專案。 非常快地重新整理 n 次,能夠看出 tomcat1,tomcat2,tomcat3 的比例接近 1:1:2。