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

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

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

效果圖:包含基於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.htmlnginx

配置多臺虛擬主機

虛擬主機是一種特殊的軟硬件技術,它能夠將網絡上的每一臺計算機分紅多個虛擬主機,每一個虛擬主機均可以獨立對外提供www服務。從而實現一臺主機能對外提供多個web服務,並且每一個虛擬主機之間是互不影響的。
Nginx提供了三種虛擬主機配置方式,一、基於ip的虛擬主機,二、基於端口的虛擬主機,三、基於域名的虛擬主機。最經常使用的是第三種,相對於 ip地址和端口號,域名更方便記憶和使用。web

基於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對應的目錄,其餘的沒有變。這裏就不貼命令了。vim

基於域名的虛擬主機

這是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服務,在瀏覽器上分別訪問兩個域名地址,觀察頁面變化
若你發現不一樣的域名地址打印不一樣頁面,和效果圖類似,則表明配置成功。tomcat

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的多虛擬主機,反向代理和負載均衡就結束了,感謝閱讀!歡迎點贊!

相關文章
相關標籤/搜索