您的位置:首页 > 运维架构 > 反向代理

nginx的反向代理及负载均衡

2017-07-28 16:18 246 查看

1.1  Nginx实现虚拟机

可以实现在同一台服务运行多个网站,而且网站之间互相不干扰。
 
同一个服务器可能有一个ip,网站需要使用80端口。网站的域名不同。
区分不同的网站有三种方式:
1、ip区分
2、端口区分
3、域名区分

1.1.1   Ip区分虚拟主机

1、将/etc/sysconfig/network-scripts/ifcfg-eth0文件复制一份,命名为ifcfg-eth0:1



修改其中内容:
DEVICE=eth0:1
IPADDR=192.168.25.103
其他项不用修改
2、重启系统



1.1.2   配置nginx基于ip地址的虚拟主机

1.1.1.2      Nginx的配置文件

editplus 连接ftp 编辑比较方便



编辑 nginx.conf 配置文件
 server {
        listen       80;
        server_name  192.168.238.129;

       location / {
            root  html;
            index  index.html index.htm;
        }

server {
        listen       80;
        server_name   192.168.238.100;
                location / {
            root  html-100;
            index  index.html index.htm;
        }
  一个Server 就是一个虚拟主机
配置完以后,重启服务器  重启nginx



重启nginx



启动nginx







1.1.1.3        基于ip的虚拟主机配置

server {
       listen       81;

server {
       listen       82;

1.1.3   基于域名的虚拟主机



修改window的hosts文件:(C:\Windows\System32\drivers\etc)

修改虚拟主机的配置

server {
        listen       80;
        server_name   www.liyang.com;

 location / {
            root  html-www;
            index  index.html index.htm;
        }

网页html-www 在nginx 目录下



修改配置文件后,需要nginx重新加载配置文件。

** 穿插 添加订单时bug ,没有录入用户昵称等信息页面没有传递用户信息


创建订单时却 用户信息,创建订单会经过一个拦截器,判断用户是否登录,所以能够创建订单,用户一定是登录了,先经过拦截器,判断登录进入创建请求,是同一个请求,所以1、在拦截器中将获取到的user信息 设置到attabuite中2.、在controller中 getAttrbute 信息 取到user  方案:





方案2 因为用户有购物车,购物车信息存在在cookie中,可以从cookie中取用户token , 然后调用sso服务,根据toekn取用户信息

2.1.1   反向代理



 
 

2.1  使用nginx实现反向代理

Nginx只做请求的转发,后台有多个http服务器提供服务,nginx的功能就是把请求转发给后面的服务器,决定把请求转发给谁。
 

2.2.1   安装tomcat

在一个虚拟机上创建两个tomcat实例,模拟多个服务器。





2.2.2   需求

通过访问不同的域名访问运行在不同端口的tomcat
 
 


2.2.3   Nginx的配置

 
 upstream tomcatserver1 {
server 192.168.238.129:8080;
server 192.168.238.129:8081;        // 负载均衡  访问tomcatserver1 1次访问进入8080 另外一次进入8081
    }
    upstream tomcatserver2 {
server 192.168.238.129:8081;
    }

    server {
        listen       80;
        server_name  8080.www.liyang.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://tomcatserver1;      转发
            index  index.html index.htm;
        }

        
    }
    server {
        listen       80;
        server_name  8081.www.liyang.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://tomcatserver2;             index  index.html index.htm;
        }

        
    }
 
如果在同一个域名下有多台服务器提供服务,此时需要nginx负载均衡。
 

3.1  什么是负载均衡

       负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
       负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

3.2  需求

       nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至 tomcat服务器。
       nginx负载均衡服务器:192.168.238.129
       tomcat1服务器:192.168.238.129:8080
       tomcat2服务器:192.168.238.129:8081
 
 upstream tomcatserver1 {
server 192.168.238.129:8080;
server 192.168.238.129:8081;            增加一台服务器  // 负载均衡  访问tomcatserver1 1次访问进入8080 另外一次进入8081
    }



节点说明:
在http节点里添加:
 
#定义负载均衡设备的 Ip及设备状态
upstream myServer {  
 
   server 127.0.0.1:9090 down;
   server 127.0.0.1:8080 weight=2;
   server 127.0.0.1:6060;
   server 127.0.0.1:7070 backup;
}
 
在需要使用负载的Server节点下添加
 
proxy_pass http://myServer;  
upstream 每个设备的状态:
 
down 表示单前的server暂时不参与负载
weight 默认为1.weight越大,负载的权重就越大。
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
fail_timeout:max_fails 次失败后,暂停的时间。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

1   Nginx的高可用

解决高可用的方案就是添加冗余。
nginx的高可用使用keepalived+nginx实现

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
 Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: