12.06 nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)

正向代理

Nginx 不僅可以做反向代理,實現負載均衡。還能用作正向代理來進行上網等功能。 正向代理:如果把局域網外的 Internet 想象成一個巨大的資源庫,則局域網中的客戶端要訪 問 Internet,則需要通過代理服務器來訪問,這種代理服務就稱為正向代理。

  • 簡單一點:通過代理服務器來訪問服務器的過程 就叫 正向代理。
  • 需要在客戶端配置代理服務器進行指定網站訪問


nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)


反向代理

反向代理,其實客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問。

我們只 需要將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取數據後,在返 回給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器 地址,隱藏了真實服務器 IP 地址。

nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)

nginx反向代理配置實例

1. 實現效果

打開瀏覽器,在瀏覽器地址欄輸入地址 www.123.com,跳轉到 liunx 系統 tomcat 主頁 面中

2. 準備工作

(1)在 liunx 系統安裝 tomcat,使用默認端口 8080,我這裡8080被其他應用佔用,所以我已修改端口為8081。在conf目錄下的server.xml配置文件中,如下,將port改為 8081,其實下面也有類似的Connector 標籤,但是要看protocol協議為HTTP/1.1的標籤修改即可。

<connector> connectionTimeout="20000"
redirectPort="8443" />/<connector>

tomcat 安裝文件放到 liunx 系統中,解壓。
Tomcat的路徑:/usr/feng/apach-tomcat/tomcat8081下

進入 tomcat 的 bin 目錄中,./startup.sh 啟動 tomcat 服務器。

(2)對外開放訪問的端口 (我這裡不需要)

firewall-cmd --add-port=8080/tcp --permanent

firewall-cmd –reload

查看已經開放的端口號 firewall-cmd --list-all

(3)在 windows 系統中通過瀏覽器訪問 tomcat 服務器


別忘了開啟tomcat,在bin目錄下,使用 命令:

./startup.sh


nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)

3. 訪問過程的分析


nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)

4、具體配置

a. 第一步 在 windows 系統的 host 文件進行域名和 ip 對應關係的配置

nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)

添加內容在 host 文件中

nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)

b . 第二步 在 nginx 進行請求轉發的配置(反向代理配置)


nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)

5、最終測試

如上配置,我們監聽 80 端口,訪問域名為 www.123.com,不加端口號時默認為 80 端口,故 訪問該域名時會跳轉到 127.0.0.1:8081 路徑上。在瀏覽器端輸入 www.123.com 結果如下:


nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)


負載均衡

增加服務器的數量,然後將請求分發到各個服務器上,將原先請求集中到單個服務器上的 情況改為將請求分發到多個服務器上,將負載分發到不同的服務器,也就是我們所說的負 載均衡

客戶端發送多個請求到服務器,服務器處理請求,有一些可能要與數據庫進行交互,服 務器處理完畢後,再將結果返回給客戶端。

這種架構模式對於早期的系統相對單一,併發請求相對較少的情況下是比較適合的,成 本也低。但是隨著信息數量的不斷增長,訪問量和數據量的飛速增長,以及系統業務的複雜 度增加,這種架構會造成服務器相應客戶端的請求日益緩慢,併發量特別大的時候,還容易 造成服務器直接崩潰。很明顯這是由於服務器性能的瓶頸造成的問題,那麼如何解決這種情 況呢?

我們首先想到的可能是升級服務器的配置,比如提高 CPU 執行頻率,加大內存等提高機 器的物理性能來解決此問題,但是我們知道摩爾定律的日益失效,硬件的性能提升已經不能 滿足日益提升的需求了。最明顯的一個例子,天貓雙十一當天,某個熱銷商品的瞬時訪問量 是極其龐大的,那麼類似上面的系統架構,將機器都增加到現有的頂級物理配置,都是不能 夠滿足需求的。那麼怎麼辦呢?上面的分析我們去掉了增加服務器物理配置來解決問題的辦法,也就是說縱向解決問題 的辦法行不通了,那麼橫向增加服務器的數量呢?這時候集群的概念產生了,單個服務器解 決不了,我們增加服務器的數量,然後將請求分發到各個服務器上,將原先請求集中到單個服務器上的情況改為將請求分發到多個服務器上,將負載分發到不同的服務器,也就是我們 所說的負載均衡


nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)


nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)

Nginx 負載均衡 配置實例

1. 實現效果

瀏覽器地址欄輸入地址 http://208.208.128.122/edu/a.html,負載均衡效果,平均 8081 和 8082 端口中

2. 準備工作

a.準備兩臺 tomcat 服務器

準備兩臺 tomcat 服務器,一臺 8081,一臺 8082

上面的反向代理第二個實例中已經配置成功了。但是需要添加點東西,如下哦。

b. 修改一處

在兩臺 tomcat 裡面 webapps 目錄中,創建名稱是 edu 文件夾,在 edu 文件夾中創建 頁面 a.html,用於測試。

由於第二個實例中,8082中有了 edu 的文件夾,所以只在8081 文件夾下創建即可。
然後使用在vod文件下使用命令:

cp a.html ../edu/

即可完成,
查看命令

cd ../edu/ # 進入到 edu 目錄下 

cat a.html #查看內容

c. 測試頁面

測試URL

http://208.208.128.122:8081/edu/a.html


nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)

http://208.208.128.122:8082/edu/a.html


nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)


3. 在 nginx 的配置文件中進行負載均衡的配置

修改了第一個示例的 配置

nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)

4. 最終測試

測試url

http://208.208.128.122/edu/a.html


nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)


nginx使用學習之正向代理、反向代理、負載均衡(配置實例詳解)

5. nginx 分配服務器策略

隨著互聯網信息的爆炸性增長,負載均衡(load balance)已經不再是一個很陌生的話題, 顧名思義,負載均衡即是將負載分攤到不同的服務單元,既保證服務的可用性,又保證響應 足夠快,給用戶很好的體驗。快速增長的訪問量和數據流量催生了各式各樣的負載均衡產品, 很多專業的負載均衡硬件提供了很好的功能,但卻價格不菲,這使得負載均衡軟件大受歡迎, nginx 就是其中的一個,在 linux 下有 Nginx、LVS、Haproxy 等等服務可以提供負載均衡服 務,而且 Nginx 提供了幾種分配方式(策略):

a. 輪詢(默認)

每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器 down 掉,能自動剔除。
配置方式:

b. weight

weight 代表權重, 默認為 1,權重越高被分配的客戶端越多

 upstream myserver {
server 208.208.128.122:8081 weight=10; # 在這兒
server 208.208.128.122:8082 weight=10;
}
server {
listen 80;
server_name 208.208.128.122;
location / {

root html;
proxy_pass http://myserver;
index index.html index.htm;
}

c. ip_hash

ip_hash 每個請求按訪問 ip 的 hash 結果分配,這樣每個訪客固定訪問一個後端服務器

 upstream myserver {
\tip_hash;\t\t\t\t\t\t\t// 在這兒
server 208.208.128.122:8081 ;
server 208.208.128.122:8082 ;
}
server {
listen 80;
server_name 208.208.128.122;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}

d. fair(第三方)

fair(第三方),按後端服務器的響應時間來分配請求,響應時間短的優先分配。

 upstream myserver {\t\t\t\t\t
server 208.208.128.122:8081 ;
server 208.208.128.122:8082 ;
fair; \t\t\t\t\t\t\t\t\t\t\t\t\t\t# 在這兒
}
server {
listen 80;
server_name 208.208.128.122;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}

注:需要C/C++ Linux服務器開發學習資料私信“資料”(資料包括C/C++,Linux,golang技術,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協程,DPDK,ffmpeg等),免費分享


分享到:


相關文章: