资讯专栏INFORMATION COLUMN

Nginx 反向代理 负载均衡 虚拟主机配置

godlong_X / 3045人阅读

摘要:反向代理负载均衡虚拟主机配置通过本章你将学会利用配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用反向搭理和负载均衡,了解常用配置的说明。最重要的是反向代理,负载均衡。

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/itdrag...
Nginx http服务器:http://www.cnblogs.com/itdrag...

配置多台虚拟主机

虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机都可以独立对外提供www服务。从而实现一台主机能对外提供多个web服务,而且每个虚拟主机之间是互不影响的。
Nginx提供了三种虚拟主机配置方式,1、基于ip的虚拟主机,2、基于端口的虚拟主机,3、基于域名的虚拟主机。最常用的是第三种,相对于 ip地址和端口号,域名更方便记忆和使用。

基于ip的虚拟主机
[root@itdragon ~]# cd /etc/sysconfig/network-scripts/
[root@itdragon network-scripts]# ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1
2: ens33:  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:  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:WindowsSystem32driversetchosts文件
# 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/happydre...

总结

1 Nginx 通过修改nginx.conf server_name配置,达到配置多台基于ip,基于域名的虚拟主机
2 Nginx 通过修改nginx.conf upstream 和 proxy_pass配置,达到反向代理效果
3 Nginx 通过修改nginx.conf upstream server 状态,达到负载均衡效果
4 代理服务器有提高客户端获取数据的速度,和方便管理设置防火墙的功能

到这里Nginx的多虚拟主机,反向代理和负载均衡就结束了,感谢阅读!欢迎点赞!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39717.html

相关文章

  • Nginx反向代理负载均衡

    摘要:负载均衡严格来说,仅仅是作为反向代理的使用的,但是因为这个反向代理功能表现的效果是负载均衡机器的效果,因此负载均衡是特殊的反向代理。 反向代理 反向代理指的是以代理服务器接收用户的的访问请求,代理用户向内部服务器重新发起请求,最后把内部服务器的响应信息返回给用户。这样,代理服务器对外就表现为一台服务器,而访问内部服务器的客户端用的就是代理服务器,而不是真实网站访问用户。 为什么使用反向...

    fai1017 评论0 收藏0
  • PHP-FPM,Nginx,FastCGI 之间的关系

    摘要:本文介绍三者之间的关系,以及反向代理和负载均衡的配置。先使用负载均衡模块找到一台主机,再使用模块实现与这台主机的交互。负载均衡配置该例定义了一个的负载均衡配置,通过反向代理指令应用这个配置。 本文介绍 PHP-FPM,Nginx,FastCGI 三者之间的关系,以及 Nginx 反向代理和负载均衡的配置。 PHP-FPM,Nginx,FastCGI 之间的关系 FastCGI 是一个协...

    sumory 评论0 收藏0
  • [新手]nginx反向代理负载均衡配置

    摘要:今天无聊,把上几天自己测试的作反向代理负载均衡的步骤记录下来,以供学习记录。反向代理,我个人理解是通过一台反向代理服务器,把客户端的把有请求按照一定的规则分发给后台的服务器。 今天无聊,把上几天自己测试的nginx作反向代理负载均衡的步骤记录下来,以供学习记录。反向代理,我个人理解是通过一台反向代理服务器,把客户端的把有请求按照一定的规则分发给后台的服务器。nginx作反向代理服务器的...

    kbyyd24 评论0 收藏0

发表评论

0条评论

godlong_X

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<