nginx的反向代理及负载均衡

来源:互联网 发布:国际软件学院合并 编辑:程序博客网 时间:2024/05/22 03:29

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将检测到


原创粉丝点击