欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

nginx的反向代理和负载均衡

程序员文章站 2022-07-12 19:17:53
...

一 概述

反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。
nginx的反向代理和负载均衡

nginx+tomcat反向代理
nginx的反向代理和负载均衡

1、启动tomcat

2nginx反向代理配置
根据上边的需求在nginx.conf文件中配置反向代理,如下:

//配置一个代理及tomcat1服务器
upstream tomcat1_Server {
server 192.168.1.103:8180; #这里是tomcat的访问地址
}
//配置一个代理及tomcat2服务器
upstream tomcat2_Server {
server 192.168.1.103:8180; #这里是tomcat的访问地址
}

//配置一个虚拟主机

server {
    listen 80;
    server_name aaa.mysite.com;
    location / {
        #域名aaa.mysite.com的请求全部转发到tomcat1_Server服务上
        proxy_pass http://tomcat1_Server ;//
    index index.html index.htm;
    }
}

server {
    listen 80;
    server_name bbb.mysite.com;
    location / {
        #域名bbb.mysite.com的请求全部转发到tomcat2_Server服务上
        proxy_pass http://tomcat2_Server ;//
    index index.html index.htm;
    }
}

3.测试
分别修改两个tomcat下的webapps/ROOT/index.jsp的内容以示区别.
分别访问aaa.mysite.com、bbb.mysite.com测试反向代理

二、负载均衡

1.nginx负载均衡

  网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时候来自web前端的压力,也能让人十分头痛。怎样将同一个域名的访问分散到两台或更多的机器上呢?这其实就是另一种负载均衡了,nginx自身就可以做到,只需要做个简单的配置就行。
  nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。
Nginx负载均衡一些基础知识:
nginx 的 upstream目前支持 4 种方式的分配
1)、轮询(默认)
  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
  指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、ip_hash
  每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、fair(第三方)
  按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4)、url_hash(第三方)

2.nginx负载均衡配置,主要是proxy_pass,upstream的使用

根据上边的需求在nginx.conf文件中配置负载均衡,如下:

upstream tomcat_Server_pool {
    #这里是tomcat集群,将流量分算到每一个tomcat上,避免某一个tomcat压力过大
    server 192.168.1.103:8180 weight=2; #
    server 192.168.1.103:8280 weight=3; #
    server 192.168.1.103:8380 weight=2; #
    #weight 为访问权重,越大接收的流量越多

server {
    listen 80;
    server_name bbb.mysite.com;
    location / {
        #域名bbb.mysite.com的请求全部转发到tomcat2_Server服务上
        proxy_pass http://tomcat_Server_pool;//
    index index.html index.htm;
    }
}
}

nginx的权重方式有五种,默认为轮询(默认),此处即为默认的方式