Nginx反向代理和负载均衡项目实战

一. 反向代理

客户端访问一个网站,需要通过代理服务器才可以上网。客户端先将请求发给代理服务器,代理服务器再将请求转发给网站,网站的响应结果先发给代理服务器,然后再由代理服务器转发给客户端。这就是正向代理的过程。

相对于正向代理,反向代理服务器位于网站机房一侧,代理网站Web服务器接收HTTP请求,这样可以有效保护网站的安全,因为来自互联网的请求必须经过代理服务器才能到网站,这样就在Web服务器和外部的网络攻击之间建立了一道屏障。


反向代理

    By the way,反向代理还可以实现负载均衡的功能,借助于负载均衡构建的集群可以提高系统总体处理能力,从而提高网站高并发时的性能。

二.负载均衡

负载均衡(Load Balance) 由于访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担。这时需要将网站或系统部署到多台服务器上,并且随着压力的升高,服务器的台数也在增多,同时部署更多内容一致的服务器,将用户的访问在多台服务器之间分发,实现横向扩展,或者水平扩展。


Nginx负载均衡

实际上反向代理服务器处于Web服务器前面,这个位置正好是负载均衡服务器的位置,所以反向代理服务器可以同时提供负载均衡的功能,将请求根据负载均衡算法转发到不同的Web服务器上。

三. Nginx 负载均衡实践

1. 准备工作

准备两台 tomcat 服务器,一台 8081,一台 8082

2. 测试页面

http://localhost:8081/demo/index.jsp

8081服务

http://localhost:8082/demo/index.jsp

8082服务

3. 在 nginx 中进行负载均衡的配置

修改配置文件nginx.conf:

a). 配置服务器组,添加upstream配置

upstream demo {

    server 127.0.0.1:8081; #服务器地址1

    server 127.0.0.1:8082; #服务器地址2

}

b). 修改nginx监听的端口号80,改为8080

server {

    listen 8080;

    server_name localhost;

}

c). 在location中,利用proxy_pass配置反向代理地址

    location / {

            root html;

            index  index.html index.htm;

            proxy_pass http://demo; #配置方向代理地址

        }

d). 启动nginx和tomcat

4.测试

访问url:http://localhost:8080/demo/index.jsp

访问1
访问2

In a word,一个超酷的负载均衡就配置完成了,超级简单哦

四. nginx负载均衡策略

负载均衡将客户端访问分摊到不同的服务器,这样既能保证服务的可用性,又能保证性能。Nginx 提供了几种分配方式(策略):

1. 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream demo {

server 127.0.0.1:8081; #服务器地址1

server 127.0.0.1:8082; #服务器地址2

}

2. weight 权重

指定轮询的权重比,weight 代表权重, 默认为 1。权重越高被分配的客户端越多,主要用于后端服务器性能不均的情况。

upstream demo {

    server 127.0.0.1:8081 weight=2; #服务器地址1

    server 127.0.0.1:8082;#服务器地址2

}

3. 最少链接

web请求会被转发到连接数最少的服务器上。

upstream demo {

  least_conn;

  server 127.0.0.1:8081;  #服务器地址1

  server 127.0.0.1:8082;  #服务器地址2

}

4. ip_hash

ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器

upstream demo {

 ip_hash ;

  server 127.0.0.1:8081; #服务器地址1

  server 127.0.0.1:8082; #服务器地址2

}

5. fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream demo {

  server 127.0.0.1:8081; #服务器地址1

  server 127.0.0.1:8082; #服务器地址2

  fair;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容