Docker基于Docker-cpmpose搭建Nginx实现反向代理、负载均衡

1,首先聊聊什么Nginx?

Nginx 是一个高性能的HTTP和反向代理web服务器,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx部署在性能较好的服务器上,并发能力可以达到5W以上。

Nginx完全开源,并且有很多基于Nginx二次开发的工具,性能更强。


Nginx是一个反向代理的web服务器,就是作为客户端请求入口的存在


Nginx提供了非常丰富的负载均衡策略


Nginx提供了动静分离策略,可以将动态资源转发给Tomcat,静态资源直接去本地找


Nginx最大的特点就是并发能力强,占用内存低,并且可以实现7*24小时不间断运行

2,为什么要用Nginx,如果不用Nginx的现存问题是什么?

在上面介绍了Nginx的好处之后,对Nginx优势有了解了,在企业中实际项目如果不用Nginx会存在的问题大体如下:

  • 在单体架构服务搭建集群后,客户端请求没有统一的入口

  • 在单体架构服务搭建集群后,如果尽量打散客户端的请求

  • Tomcat中既部署静态资源,又部署动态资源,导致Tomcat压力太大

  • Tomcat作为处理业务的服务器,并发能力比较差

3,了解了Nginx之后,接下来就是实际搭建Nginx并且演示Nginx的反向代理和负载均衡两大功能。

这里采用Docker搭建Nginx,用docker-compose.yml文件进行管理

docker-compose.yml 简单配置一下 

注意,添加数据卷,映射容器内部的/etc/nginx/conf.d目录,方便修改路由规则配置

version: '3.1'
services:
  nginx:
    image: nginx:1.22
    container_name: nginx
    ports:
      - 80:80
    volumes:
      - ./conf.d/:/etc/nginx/conf.d/

4,了解一下Nginx的配置文件:

 

5,接下来需要在映射的文件中conf.d创建一个后缀名为 .conf的文本,主要是在这个文本中配置代理和集群,注意在文本中要搭建集群就得在upstream中配置

upstream  minios{
  server 120.76.159.196:8081;
  server 120.76.159.196:8082;
}

server{
  listen 80;
  server_name localhost;

  location /  {
    root /usr/share/nginx/html/;
    index index.html;
  }

  location /read  {
    proxy_pass http://minios;
    proxy_redirect default;
  }

  location /up  {
    proxy_pass http://120.76.159.196/8083;
  }

}

 

6,了解一下:Nginx中的路径匹配规则

7,配置完文本之后,启动容器,接下来就直接演示集群环境下,这里启动了2个Springboot的(端口号不同)项目,

相端口号为8081,8082。

如图所示:

1,SpringBoot项目注意打成jar包,并且需要在maven里配置如下所示

<build>
    <finalName>serve2</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <executable>true</executable>
            </configuration>
        </plugin>
    </plugins>
</build>

2,在linux上项目后台运行,执行日志存储在一个文本中,指令如下:

nohup java -jar serve2.jar >output2.log 2>&1 &

3,启动过程中遇到端口号占用情况,则需要关闭端口,指令如下:

  netstat -ntlp | grep 8082    (找到端口对应的进程号)
  kill  -9   366721                 (杀掉进程)

测试: http://120.76.159.196/read (这里不用写端口号) 不停的请求这个地址,集群默认采用轮询策略,效果如下:可以看到是一个轮询访问的状态

第一次请求

第二次请求

8,Nginx的集权下的访问策略很多,默认是采用轮询策略,基本上实际工作当中也是采用默认的轮询策略,接下来了解一下Nginx的轮询策略

1,轮询策略:默认情况下,Nginx的负载均衡策略就是轮询,不需要添加额外的配置。

轮询权重:在服务器配置不一致时,应当选择轮询权重策略,根据服务器配置的不同,或者应用的处理能力不同,设置不同的权重值,设置请求分发的比例。

upstream tomcats {
  server 192.168.41.41:8081 weight=200;
  server 192.168.41.41:8082 weight=50;
}

2,ip_hash:根据客户端请求的ip地址,确定请求转发到哪台服务器,只要ip不变,路由的服务器就不变。但是很多JVM缓存同步的问题,依然无法处理

upstream tomcats {
  ip_hash;
  server 192.168.41.41:8081;
  server 192.168.41.41:8082;
}

3,fair:根据响应时间权重,根据服务器的响应时间决定请求转发的策略

upstream tomcats {
  fair;
  server 192.168.41.41:8081;
  server 192.168.41.41:8082;
}

4,url_hash:根据请求路径转请求转发

upstream tomcats {
  hash $request_uri; hash_method crc32;
  server 192.168.41.41:8081;
  server 192.168.41.41:8082;
}

9,Nginx配置使用https过程?

具体详细参考传送门:https://blog.csdn.net/qq_30665009/article/details/121434442

总结需要做的事儿:

1,nginx需要安装ssl模块

2,需要ssl证书,分别是ssl证书的pem文件和key文件,后缀分别为 ( .crt  )(  .key )

3, 将证书在nginx.con文件中引起即可,注意监听443端口

10,Nginx处理高并发原理

1,Nginx通过使用异步非阻塞I/O模型来实现大量并发连接的处理,异步非阻塞I/O模型则通过使用事件驱动的方式,让服务器在等待I/O操作完成时同时处理其他连接。当某个I/O操作完成时,服务器会收到一个事件通知,然后再处理该连接。这种模型可以让服务器在同一时间内处理多个连接,从而提高并发性能。

11,Nginx选择异步非阻塞的方式来处理请求,主要是基于以下几个原因:

1,高并发性能:异步非阻塞的方式可以让Nginx同时处理多个请求,而不是按顺序逐个处理。这种方式可以大大提高服务器的并发性能,使其能够处理更多的并发连接。在高并发场景下,Nginx能够高效地处理请求,保持较低的延迟和响应时间。

2,资源利用率:异步非阻塞的处理方式可以有效地利用服务器资源。在传统的阻塞模型中,每个请求都需要等待I/O操作完成,这会导致服务器资源(如CPU、内存)的浪费。而异步非阻塞模型可以让服务器在等待I/O操作完成时同时处理其他请求,提高了资源利用率。

3,可扩展性:异步非阻塞模型具有更好的可扩展性。在传统的阻塞模型中,服务器处理请求的能力受限于单个线程或进程的处理能力。而在异步非阻塞模型中,Nginx可以通过增加worker进程数或调整事件循环机制来提高并发处理能力,以适应更高负载的需求。

4,可靠性:异步非阻塞模型还有助于提高系统的可靠性。在阻塞模型中,如果某个请求长时间等待I/O操作完成,会导致整个服务器线程或进程被阻塞,从而影响其他请求的处理。而在异步非阻塞模型中,即使某个请求出现阻塞,也不会影响到其他请求的处理,提高了系统的可靠性。

多路复用IO:

1,多路复用IO是指利用单个线程来同时监听多个文件描述符(socket连接等),并在某个文件描述符可读、可写时得到通知,从而避免无效的等待CPU资源。它主要用于网络编程中对多个客户端连接的处理,可以提高服务器的吞吐能力。

2,在实际应用中,多路复用IO的实现需要使用一些系统调用,如Linux中的epoll等。这些系统调用将多个文件描述符集合起来,并使用一个统一的数据结构(例如红黑树等)来管理这些文件描述符的状态,以便在需要时能够快速地找到可用的文件描述符。

3,多路复用IO可以有效地解决大量连接的问题,它通过减少线程切换和系统调用的次数,提高了程序的效率和响应速度。同时,多路复用IO也使得程序可以更好地利用多核CPU的并行计算能力,从而提高了服务器的整体性能。

好啦,Nginx的基本了解和应用就到此结束了...

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本教程将介绍如何使用Docker搭建Nacos集群,并通过Nginx进行反向代理实现负载均衡。 准备工作: 1. 安装DockerDocker Compose 2. 准备三台服务器,分别作为Nacos集群的三个节点 步骤一:下载Nacos镜像 在每个服务器上执行以下命令下载Nacos镜像: ``` docker pull nacos/nacos-server:latest ``` 步骤二:创建Docker Compose文件 在任意一台服务器上创建一个文件夹,命名为nacos,进入该文件夹并创建docker-compose.yml文件,内容如下: ``` version: '3' services: nacos1: image: nacos/nacos-server:latest container_name: nacos1 ports: - "8848:8848" environment: - MODE=cluster - NACOS_SERVER_IP=192.168.1.11 restart: always nacos2: image: nacos/nacos-server:latest container_name: nacos2 ports: - "8849:8848" environment: - MODE=cluster - NACOS_SERVER_IP=192.168.1.12 restart: always nacos3: image: nacos/nacos-server:latest container_name: nacos3 ports: - "8850:8848" environment: - MODE=cluster - NACOS_SERVER_IP=192.168.1.13 restart: always ``` 其中,nacos1、nacos2、nacos3分别对应三个节点,分别监听的端口分别为8848、8849、8850。NACOS_SERVER_IP指定了当前节点的IP地址,这个需要根据实际情况进行修改。 步骤三:启动Nacos集群 在nacos文件夹下执行以下命令启动Nacos集群: ``` docker-compose up -d ``` 执行完毕后,可以通过以下命令查看容器启动情况: ``` docker-compose ps ``` 步骤四:配置Nginx反向代理 在任意一台服务器上安装Nginx,并修改配置文件/etc/nginx/nginx.conf,增加如下内容: ``` http { upstream nacos { server 192.168.1.11:8848; server 192.168.1.12:8849; server 192.168.1.13:8850; } server { listen 80; server_name nacos.example.com; location / { proxy_pass http://nacos; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } ``` 其中,nacos.example.com为Nacos的访问域名,需要根据实际情况进行修改。配置中创建了一个名为nacos的upstream,包括三个节点的IP地址和端口号。在server块中,通过proxy_pass将请求转发到nacos upstream。 重启Nginx生效。 至此,Nacos集群和Nginx反向代理已经搭建完成,可以通过访问http://nacos.example.com:80/进行验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值