Nginx 反向代理 負載均衡 虛擬主機配置

来源:http://www.cnblogs.com/itdragon/archive/2017/12/18/8059000.html
-Advertisement-
Play Games

Nginx 反向代理 負載均衡 虛擬主機配置 通過本章你將學會利用Nginx配置多台虛擬主機,清楚代理伺服器的作用,區分正向代理和反向代理的區別,搭建使用Nginx反向搭理和負載均衡,瞭解Nginx常用配置的說明。即學即用,你還在等什麼?一睹為快先瞭解Nginx的三大功能 Nginx 可以作為一臺h ...


Nginx 反向代理 負載均衡 虛擬主機配置

通過本章你將學會利用Nginx配置多台虛擬主機,清楚代理伺服器的作用,區分正向代理和反向代理的區別,搭建使用Nginx反向搭理和負載均衡,瞭解Nginx常用配置的說明。即學即用,你還在等什麼?一睹為快先瞭解Nginx的三大功能
Nginx 可以作為一臺http伺服器。可以做網站靜態伺服器,比如圖片伺服器,高效,減輕伺服器壓力。同時它也支持https服務。
Nginx 可以配置多台虛擬主機。可以實現在一臺伺服器虛擬出多個網站效果,省錢。
Nginx 最重要的是反向代理,負載均衡。在伺服器集群中,通過Nginx通過反向代理讓性能高的伺服器分擔更多的負載,從而實現負載均衡的效果,利用率高。

效果圖:包含基於ip的虛擬主機測試,基於功能變數名稱的虛擬主機測試,反向代理和負載均衡的測試

環境:CentOS 7 , nginx-1.13.6 ,
說明:Nginx 反向代理和負載均衡的操作前提都是基於功能變數名稱的虛擬主機。不同的tomcat模擬不同的伺服器,和生產環境最大的區別就是ip和port
Nginx 安裝:http://www.cnblogs.com/itdragon/p/7850985.html
Nginx http伺服器:http://www.cnblogs.com/itdragon/p/7864916.html

配置多台虛擬主機

虛擬主機是一種特殊的軟硬體技術,它可以將網路上的每一臺電腦分成多個虛擬主機,每個虛擬主機都可以獨立對外提供www服務。從而實現一臺主機能對外提供多個web服務,而且每個虛擬主機之間是互不影響的。
Nginx提供了三種虛擬主機配置方式,1、基於ip的虛擬主機,2、基於埠的虛擬主機,3、基於功能變數名稱的虛擬主機。最常用的是第三種,相對於 ip地址和埠號,功能變數名稱更方便記憶和使用。

基於ip的虛擬主機

[root@itdragon ~]# cd /etc/sysconfig/network-scripts/
[root@itdragon network-scripts]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 192.168.225.131/24 brd 192.168.225.255 scope global dynamic ens33
[root@itdragon network-scripts]# vim ifcfg-ens33    
# 添加
IPADDR1="192.168.225.132"
IPADDR2="192.168.225.133"
[root@itdragon network-scripts]# systemctl restart network
[root@itdragon network-scripts]# ip addr
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 192.168.225.131/24 brd 192.168.225.255 scope global dynamic ens33
    inet 192.168.225.132/24 brd 192.168.225.255 scope global secondary ens33
    inet 192.168.225.133/24 brd 192.168.225.255 scope global secondary ens33
[root@itdragon ~]# cd /usr/local/nginx
[root@itdragon nginx]# cp -r html/ html-131/
[root@itdragon nginx]# cp -r html/ html-132/
[root@itdragon nginx]# cp -r html/ html-133/
[root@itdragon nginx]# vim html-131/index.html
[root@itdragon nginx]# vim html-132/index.html
[root@itdragon nginx]# vim html-133/index.html
[root@itdragon nginx]# vim conf/nginx.conf
# 添加
server {
    listen       80;
    server_name  192.168.225.132;
    location / {
       root   html-132;
       index  index.html index.htm;
    }
}   
server {
    listen       80;
    server_name  192.168.225.133;
    location / {
       root   html-133;
       index  index.html index.htm;
    }
}
[root@itdragon nginx]# sbin/nginx -s reload

第一步:執行命令ip addr 列印協議地址,得知網卡名是ens33,ip地址是192.168.225.131
第二步:進入到/etc/sysconfig/network-scripts/ 修改ifcfg-ens33 文件添加兩個ip地址
第三步:重啟網路,並檢查配置是否生效,發現ens33對應三個ip地址
第四步:進入到/usr/local/nginx/ 目錄下,拷貝三份html目錄,並分別修改index.html 文件便於區分測試
第五步:修改Nginx配置文件,監聽的埠不變,修改server_name為對應ip地址,修改root為對應的html目錄
第六步:重啟Nginx服務,在瀏覽器上分別訪問三個ip地址,觀察頁面變化
若你發現不同的ip地址列印不同頁面,和效果圖相似,則代表配置成功。

基於埠的虛擬主機和基於ip的虛擬主機配置幾乎一樣,只是在修改Nginx配置文件時,只修改監聽的埠和root對應的目錄,其他的沒有變。這裡就不貼命令了。

基於功能變數名稱的虛擬主機

這是Nginx比較常用的配置,也是有利於人類使用的配置方式。這裡通過修改window系統下的host文件來模擬DNS伺服器。

# Windows
C:\Windows\System32\drivers\etc\hosts文件
# nginx 功能變數名稱配置虛擬主機
192.168.225.131 www.itdragon.com
192.168.225.131 picture.itdragon.com
192.168.225.131 search.itdragon.com

# CentOS
[root@itdragon nginx]# cp -r html/ html-search
[root@itdragon nginx]# cp -r html/ html-picture
[root@itdragon nginx]# vim html-search/index.html 
[root@itdragon nginx]# vim html-picture/index.html
[root@itdragon nginx]# vim conf/nginx.conf
server {
    listen       80;
    server_name  search.itdragon.com;
    location / {
       root   html-search;
       index  index.html index.htm;
    }
}
server {
    listen       80;
    server_name  picture.itdragon.com;
    location / {
       root   html-picture;
       index  index.html index.htm;
    }
}
[root@itdragon nginx]# sbin/nginx -s reload

第一步:在window環境中,修改host文件,添加ip 功能變數名稱映射關係,用來模擬DNS伺服器
第二步:進入到/usr/local/nginx/ 目錄下,拷貝兩份html目錄,分別修改index.html 文件便於區分測試
第三步:修改Nginx配置文件,監聽的埠不變,修改server_name為對應功能變數名稱地址,修改root為對應的html目錄
第四步:重啟Nginx服務,在瀏覽器上分別訪問兩個功能變數名稱地址,觀察頁面變化
若你發現不同的功能變數名稱地址列印不同頁面,和效果圖相似,則代表配置成功。

Nginx 反向代理

在瞭解Nginx 反向代理之前,我們先熟悉一下什麼是代理伺服器
代理伺服器:是一個夾在客戶機和目標主機中間的伺服器。能提高客戶機訪問響應速度,還能設置防火牆過濾不安全信息。
響應速度快:客戶機發送請求,代理伺服器接收請求後,再轉發給目標主機。目標主機接收請求並將數據返回給代理伺服器,代理伺服器將數據返回給客戶機同時也會保存數據到本地。若客戶機下次有相同的請求,則直接從本地數據返回。從而提高了響應的速度。
設置防火牆:因為代理伺服器夾在客戶機和目標主機中間。客戶機所有的請求都會經過代理伺服器,所以如果在代理伺服器上設置防火牆,則可以過濾一些不安全的信息,同時也方便管理。

清楚了代理伺服器後,我們再來瞭解正向代理和反向代理的區別
正向代理:顧客:"服務員,我就要廚師A做的七彩紅燒肉"; 服務員:"好嘞,我這就安排廚師A給您做!"
反向代理:顧客:"服務員,我要一份七彩紅燒肉"; 服務員:"好嘞,我們的廚師B炒菜賊好吃!"
不知道大家看懂沒有。顧客就是客戶機,服務員就是代理伺服器,廚師們就是目標主機。正向代理就相當於客戶機明確指定目標主機提供服務(目標主機被動接收請求)。反向代理就相當於客戶機提供需求,代理伺服器從一群目標主機中找一臺去實現該需求(目標主機主動接收請求)。

現在開始配置Nginx的反向代理

[root@itdragon ~]# vim /usr/local/solr/tomcat1/webapps/ROOT/index.jsp 
[root@itdragon ~]# vim /usr/local/solr/tomcat2/webapps/ROOT/index.jsp
[root@itdragon ~]# cd /usr/local/nginx
[root@itdragon nginx]# vim conf/nginx.conf
upstream searchserver {
    server 192.168.225.133:8081;
}
upstream pictureserver {
    server 192.168.225.133:8082;
}
server {
    listen       80;
    server_name  search.itdragon.com;
    location / {
       proxy_pass   http://searchserver;
       index  index.html index.htm;
    }
}
server {
    listen       80;
    server_name  picture.itdragon.com;
    location / {
       proxy_pass   http://pictureserver;
       index  index.html index.htm;
    }
}
[root@itdragon nginx]# sbin/nginx -s reload

第一步:準備兩個tomcat伺服器,埠分別是8081和8082,並分別修改index.jsp 文件便於區分測試
第二步:進入到/usr/local/nginx/ 目錄下,修改Nginx配置文件。upstream 定義每個設備的狀態,server 配置服務,server_name 指定功能變數名稱,proxy_pass 代理轉發到那台設備上
第三步:重啟服務,在瀏覽器上輸入不同的功能變數名稱,會跳到對應的頁面
Nginx的反向代理其實是在做請求的轉發,後臺有多個http伺服器提供服務,Nginx的功能就是把請求轉發給後面的伺服器,並決定把請求轉發給哪台伺服器。

反向代理流程
瀏覽器訪問search.itdragon.com,通過本地host文件功能變數名稱解析,找到192.168.225.131 Nginx虛擬主機,Nginx接收客戶機請求,找到server_name為search.itdragon.com的節點,再根據proxy_pass對應的http路徑,將請求轉發到upstream searchserver上,即埠號為8081的tomcat伺服器。
客戶機訪問 ---> search.itdragon.com ---> host ---> Nginx ---> server_name ---> proxy_pass ---> upstream---> tomcat
反向代理流程

Nginx 負載均衡

負載均衡 在高性能的主機上分配更多的負載,在性能低的主機分配少一些的負載,充分利用主機的性能,將其伺服器的總壓力。Nginx的 upstream預設是以輪詢的方式實現負載均衡,也可以分配權值。

[root@itdragon ~]# vim /usr/local/solr/tomcat3/webapps/ROOT/index.jsp 
[root@itdragon ~]# vim /usr/local/solr/tomcat4/webapps/ROOT/index.jsp
[root@itdragon ~]# cd /usr/local/nginx
[root@itdragon nginx]# vim conf/nginx.conf
upstream pictureserver {
    server 192.168.225.133:8082 weight=2;
    server 192.168.225.133:8083 weight=1;
    server 192.168.225.133:8084 weight=1;
}
[root@itdragon nginx]# sbin/nginx -s reload

第一步:新增兩個tomcat伺服器,埠分別為8083和8084,並分別修改index.jsp 文件便於區分測試
第二步:進入到/usr/local/nginx/ 目錄下,修改Nginx配置文件,在pictureserver 內新增兩個server
第三步:重啟服務
負載均衡的配置是在反向代理的基礎上修改的,所以請先完成反向代理的配置。

常用配置說明

events {                                        # 工作模式
    worker_connections  1024;                   # 最大連接數
}
http {                                          # 配置http伺服器
    include       mime.types;                   # 定義mime的文件類型
    default_type  application/octet-stream;     # 預設文件類型
    sendfile        on;                         # 開啟 sendfile 函數(zero copy 方式)輸出文件
    keepalive_timeout  65;                      # 連接超時時間,單位秒
    
    upstream pictureserver {                    # 定義負載均衡設備的ip和狀態
        server 192.168.225.133:8081 ;           # 預設權重值為一
        server 192.168.225.133:8082 weight=2;   # 值越高,負載的權重越高
        server 192.168.225.133:8083 down;       # 當前server 暫時不參與負載
        server 192.168.225.133:8084 backup;     # 當其他非backup狀態的server 不能正常工作時,才請求該server,簡稱熱備
    }
    server {                                    # 設定虛擬主機配置
        listen  80;                             # 監聽的埠
        server_name  picture.itdragon.com;      # 監聽的地址,多個功能變數名稱用空格隔開
        location / {                            # 預設請求 ,後面 "/" 表示開啟反向代理,也可以是正則表達式
           root     html;                       # 監聽地址的預設網站根目錄位置
           proxy_pass   http://pictureserver;   # 代理轉發
           index  index.html index.htm;         # 歡迎頁面
           deny 127.0.0.1;                      # 拒絕的ip
           allow 192.168.225.133;               # 允許的ip
        }
        error_page   500 502 503 504  /50x.html;# 定義錯誤提示頁面     
        location = /50x.html {                  # 配置錯誤提示頁面
            root   html;
        }
    }
    

具體配置詳情可以參考:http://blog.csdn.net/happydream_c/article/details/54943802

總結

1 Nginx 通過修改nginx.conf server_name配置,達到配置多台基於ip,基於功能變數名稱的虛擬主機
2 Nginx 通過修改nginx.conf upstream 和 proxy_pass配置,達到反向代理效果
3 Nginx 通過修改nginx.conf upstream server 狀態,達到負載均衡效果
4 代理伺服器有提高客戶端獲取數據的速度,和方便管理設置防火牆的功能

到這裡Nginx的多虛擬主機,反向代理和負載均衡就結束了,感謝閱讀!歡迎點贊!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Vue Vue近幾年來特別的受關註,三年前的時候angularJS霸占前端JS框架市場很長時間,接著react框架橫空出世,因為它有一個特性是虛擬DOM,從性能上碾軋angularJS,這個時候,vue1.0悄悄 的問世了,它的優雅,輕便也吸引了一部分用戶,開始收到關註,16年中旬,VUE2.0問世 ...
  • 剩下一個watch模塊,這個模塊比較深,先大概過一下整體涉及內容再分部講解。 流程圖如下: NodeWatchFileSystem 除去細節代碼,該模塊大體如下; 1、引入Watchpack模塊 2、接受一個inputFileSystem作為構造函數的參數 3、根據配置選項實例化一個Watchpac ...
  • 1. 引入 lightbox.css 和 lightbox.js 2.檢查 CSS 並確定調用的 prev.gif 和 next.gif 文件在正確的位置. 同樣要確定調用的 loading.gif 和 close.gif 文件及 lightbox.js 文件在正確的位置. 3. 激活 1、添加 r ...
  • var timestamp = (Date.parse(new Date())).toString(); var tt = parseInt(timestamp.substring(0, 10)); function t(){now=new Date((tt+i+28800)*1000);i++;d... ...
  • Download Video: Closed Format: "MP4" Open Format: "Ogg" ...
  • background: -webkit-linear-gradient(top,#ffffff,#f5f5f5); background: -moz-linear-gradient(top,#ffffff,#f5f5f5); background: -webkit-gradient(linear, ... ...
  • --> ...
  • 單列模式是設計模式中使用最為普遍的模式之一,它是一種對象創建模式,用於產生一個對象的實例,它可以確保一個類只產生一個實例。 單例模式的兩大好處: 1.對於頻繁使用的對象,可以省略創建對象花費的時間。 2.因為new減少,所以對記憶體使用頻率降低,可以減少gc壓力,縮短jc停頓時間。 單例類實現方式:使 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 微服務架構已經成為搭建高效、可擴展系統的關鍵技術之一,然而,現有許多微服務框架往往過於複雜,使得我們普通開發者難以快速上手並體驗到微服務帶了的便利。為瞭解決這一問題,於是作者精心打造了一款最接地氣的 .NET 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...