Categories
程式開發

一篇文章搞定Nginx 反向代理與負載均衡


代理

  

要想弄明白反向代理,首先要知道啥是正向代理,要搞懂正向代理只需要知道啥是代理即可。代理其實就是一個中介,在不同事物或同一事物內部起到居間聯繫作用的環節。比如買票黃牛,房屋中介等等。

在互聯網中代理更多指的是代理服務器,代理服務器位於客戶端和服務器之間,它充當兩者之間的中介。這種代理在生活中是比較常見的,比如我們常說的搭個梯子上網,用到的就是代理技術。

  

正向代理

  

正向代理(forward proxy):是一個位於客戶端和目標服務器之間的服務器(代理服務器),為了從目標服務器取得內容,客戶端向代理服務器發送一個請求並指定目標,然後代理服務器向目標服務器轉交請求並將獲得的內容返回給客戶端。

比如國內訪問谷歌,直接訪問是不行的,我們可以通過一個能夠訪問谷歌的正向代理服務器,請求發到代理服務器,由代理去谷歌獲取數據並返回,這樣就變相的實現了訪問谷歌的需求。

一句話總結:正向代理,就是代理服務器代理了客戶端,去和目標服務器進行交互。

  

一篇文章搞定Nginx 反向代理與負載均衡 1

  

正向代理的用途:

突破IP 訪問限制通過緩存加速訪問資源隱藏客戶端真實IP客戶端訪問授權

  

反向代理

  

反向代理(Reverse Proxy):與正向代理正好相反,反向代理中的代理服務器,代理的是服務器那端。代理服務器接收客戶端請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給客戶端,此時代理服務器對外表現為一個反向代理服務器的角色。

反向代理服務器位於用戶與目標服務器之間,但是對於用戶而言,反向代理服務器就相當於目標服務器,即用戶直接訪問反向代理服務器就可以獲得目標服務器的資源。同時,用戶不需要知道目標服務器的地址,也無須在用戶端作任何設定。

一句話總結:反向代理,就是代理服務器代理了目標服務器,去和客戶端進行交互。

  

一篇文章搞定Nginx 反向代理與負載均衡 2

  

反向代理的用途:

隱藏服務器真實IP負載均衡通過緩存加速訪問資源提供安全保障

  

負載均衡

  

實際生產環境中,反向代理服務器代理的目標服務器可能不止一個。比如開發好的某個應用部署在一台Tomcat 服務器上,而Tomcat 的並發上限不優化情況下,默認只有兩百左右,這時候為了解決高並發的問題,就只能選擇更替服務器或者搭建多台服務器通過反向代理與負載均衡的技術解決並發問題。

  

一篇文章搞定Nginx 反向代理與負載均衡 3

  

負載均衡(Load Balance)是由多台服務器以對稱的方式組成一個服務器集群,每台服務器都具有等價的地位,都可以單獨對外提供服務而無須其他服務器的輔助。經過某種負載分管技術,將外部發送來的中央請求均勻分配到對稱結構中的某一台服務器上。

  

總結

  

正向代理,就是代理服務器代理了客戶端,去和目標服務器進行交互。現實生活中的場景:黃牛買票。

反向代理,就是代理服務器代理了目標服務器,去和客戶端進行交互。現實生活中的場景:房屋中介。

  

Nginx 反向代理與負載均衡

  

一篇文章搞定Nginx 反向代理與負載均衡 4

  

前面我們提到搭建多台服務器並通過反向代理與負載均衡的技術可以解決並發問題,那麼負載均衡的實現從哪來?為了避免重複造輪子,我們選擇現成已有的成熟工具幫助我們完成這項工作。 Nginx 就是一個不錯的選擇。

一篇文章搞定Nginx 反向代理與負載均衡 5

Nginx 是由Igor Sysoev(伊戈爾· 賽索耶夫)為俄羅斯訪問量第二的https://www.rambler.ru/ 站點開發的。 Nginx 是一個高性能的HTTP 和反向代理服務器,可以扛得住5W 左右的並發。 Ngnix 一方面可以做反向代理服務器,另外一方面還可以做靜態資源服務器。本文主要學習如何使用Nginx 實現反向代理與負載均衡。

官網:http://nginx.org/

  

環境

  

三台CentOS 7.8.2003 機器192.168.10.101 安裝Nginx 1.18.0192.168.10.102 和192.168.10.103 安裝Tomcat 9.0.38

  

安裝Nginx

  

下載資源

  

下載Nginx 並解壓。

# 下载 nginx 压缩包
wget -P /usr/local/src http://nginx.org/download/nginx-1.18.0.tar.gz
# 解压
tar -zxvf /usr/local/src/nginx-1.18.0.tar.gz -C /usr/local/src

  

安裝依賴

  

Nginx 是基於C 語言開發的,HTTP 模塊使用了pcre 來解析正則表達式,且可以使用zlib 對HTTP 包的內容進行gzip 壓縮,Nginx 不僅支持HTTP 協議,還支持HTTPS,HTTPS 需要openssl 提供支持,所以安裝Nginx 之前必須先安裝它所依賴的環境。

yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl-devel

  

安裝Nginx

  

編譯並安裝。

# 切换至 nginx 的解压目录
cd /usr/local/src/nginx-1.18.0
# 创建 nginx 的安装目录
mkdir -p /usr/local/nginx
# 指定 nginx 的安装路径
./configure --prefix=/usr/local/nginx/
# 编译并安装
make && make install

  

常用命令

  

# 切换目录
cd /usr/local/nginx

# 启动
sbin/nginx

# 重启
sbin/nginx -s reload

# 停止
sbin/nginx -s quit

  

訪問

  

啟動Nginx 以後,瀏覽器訪問:http://192.168.10.101:80/ 結果如下:

一篇文章搞定Nginx 反向代理與負載均衡 6

  

安裝Tomcat

  

下載資源

  

下載Tomcat 並解壓。

# 下载 tomcat 压缩包
wget -P /usr/local/src https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.38/bin/apache-tomcat-9.0.38.tar.gz
# 创建目录
mkdir -p /usr/local/tomcat
# 解压
tar -zxvf /usr/local/src/apache-tomcat-9.0.38.tar.gz -C /usr/local/tomcat

  

修改頁面

  

修改Tomcat 自帶ROOT 項目中的index.jsp 頁面。

# 编辑 index.jsp
vim /usr/local/tomcat/apache-tomcat-9.0.38/webapps/ROOT/index.jsp

在body 標籤中隨便添加點內容用於區分不同的服務器。

192.169.10.102:8080

192.169.10.103:8080

一篇文章搞定Nginx 反向代理與負載均衡 7

一篇文章搞定Nginx 反向代理與負載均衡 8

  

啟動訪問

  

/usr/local/tomcat/apache-tomcat-9.0.38/bin/startup.sh 啟動Tomcat。

啟動Tomcat 以後,瀏覽器訪問:http://192.168.10.102:8080/ 和http://192.168.10.103:8080/ 結果如下:

一篇文章搞定Nginx 反向代理與負載均衡 9

一篇文章搞定Nginx 反向代理與負載均衡 10

配置Nginx

  

vim /usr/local/nginx/conf/nginx.conf 編輯配置文件。

在http 節點下,添加upstream 節點。使用upstream name{} 語法定義一組服務器。

然後在server 節點的80 端口下添加下圖中的內容。默認情況下,Nginx 是按加權輪詢的方式將請求分發到各個服務器,當權重weight 不指定時,各服務器weight 相同。關於Nginx 啟動用戶的問題請根據自身實際環境進行配置。

一篇文章搞定Nginx 反向代理與負載均衡 11

  

反向代理負載均衡

  

通過上面的流程,我們已經完成基於Nginx 實現反向代理Tomcat 服務器集群與負載均衡的需求。重啟Nginx 以後,此時再訪問Nginx 則會被路由到被代理的Tomcat 服務器上,並且採用了輪詢方式(默認)的負載均衡算法。客戶端請求到Nginx 的中央請求會每台一次的平均分配至Tomcat 每個機器上。關於Nginx 更多詳細的配置及負載均衡算法我們後面再另開文章細說。

一篇文章搞定Nginx 反向代理與負載均衡 12

本文采用 知識共享「署名-非商業性使用-禁止演繹4.0 國際」許可協議“。

大家可以通過 分類” 查看更多關於 Nginx的” 的文章。

🤗 您的點贊和轉發是對我最大的支持。

📢 掃碼關注哈嘍沃德先生「文檔+ 視頻」每篇文章都配有專門視頻講解,學習更輕鬆噢 ~

一篇文章搞定Nginx 反向代理與負載均衡 13

一篇文章搞定Nginx 反向代理與負載均衡 14