Nginx

25

一、介绍Nginx

1.1 现存问题

单体架构搭建集群、分布式架构中,需要给客户端提供一个统一的入口。

  • 高并发
  • 平均分发客户端请求
  • 静态资源与动态资源分离

1.2 Nginx介绍

Nginx的架构:Nginx是一个多进程的服务,会有一个Master和多个Worker进程。

  • 让Master进程通过多路复用IO的epoll模型去接收客户端请求
  • Worker进程就是处理Master接收到的请求的,一个Nginx服务中,可以有多个Worker进程,一个Worker进程大概可以处理2500个请求,如果都是静态i资源,一个Worker甚至可以处理5000个请求。
  • Worker进程是一个争抢的模式,不需要Master去分配,自己努力抢活干。

二、安装Nginx

docker-compose.yml

version: '3.1'
services:
  nginx: 
    image: daocloud.io/library/nginx:1.9.1
    container_name: nginx
    ports:
      - 80:80

安装成功,访问首页

三、Nginx的配置文件

进入到了Nginx的容器内部,并且查看位于/etc/nginx下的nginx.conf文件

[wppay]

查看第④块中引入的*.conf文件

root 理解为路由的意思,将请求路由到指定目录,index 指定文件

修改Nginx的docker-compose.yml,映射数据卷。

version: '3.1'
services:
  nginx: 
    image: daocloud.io/library/nginx:1.9.1
    container_name: nginx
    ports:
      - 80:80
    volumes:
      - ./conf.d/:/etc/nginx/conf.d/

四、反向代理

4.1 正向代理&反向代理

正向代理服务器特点:

  • 正向代理服务器属于客户端的内容
  • 正向代理服务器可以突破访问权限,提升访问速度。
  • 对服务器隐藏真实客户端的地址信息

反向代理服务器特点:

  • 反向代理服务器属于服务端的内容
  • 反向代理服务器可以隐藏真实服务器的地址信息,客户端只需要直到反向代理服务器地址即可

4.2 实现Nginx的反向代理

实现准备好一台可以正常访问的Tomcat服务器

修改Nginx的配置文件,让Nginx接收到请求后,将请求转发给Tomcat

server{
listen 80;
server_name localhost;
​
# 将请求转发到Tomcat中
location / {
    proxy_pass http://192.168.41.41:8080/;
   }
}

4.3 Location映射规则

Location一般有五种映射方式

映射方式信息
location = 路径完全匹配的映射方式,如果映射上,直接走当前location。优先级高。
location ^~ 路径字符串前缀映射方式,如果映射上,直接走当前location。优先级高。
location ~ 正则正则表达式映射方式,如果映射上,会继续向下匹配,直到找到最佳匹配项。
location ~* 正则正则表达式映射方式,不区分大小写,映射上,会继续匹配,直到找到最佳匹配项。
location 路径字符串前缀映射方式,如果映射上,会继续向下匹配,直到找到最佳匹配项。

五、负载均衡

负载均衡就为让反向代理服务器根据一定的策略将请求分发给不同的服务器

Nginx提供了几种负载均衡的策略

  • 轮询(默认):轮询一般设置集群中每台服务器的配置基本一致的情况
# Nginx配置方式
# 指定8080和8081是集群
upstream tomcats{
 server 192.168.41.41:8080;
 server 192.168.41.41:8081;
}
server{
 listen 80;
 server_name localhost;
   # 将接收到的请求转发到tomcats集群中
location / {
 proxy_pass http://tomcats/;
}
}
  • 权重:如果集群中节点的服务器硬件条件不同,Tomcat容器处理的能力不一样,可以能力的差别给每台服务器设置一个接收请求的比例,这个比例就是权重。​
# Nginx配置方式
# 指定8080和8081是集群
 upstream tomcats{
    server 192.168.41.41:8080 weight=200;  
    server 192.168.41.41:8081 weight=100;  
  }
  server{
    listen 80;
    server_name localhost;
    # 将接收到的请求转发到tomcats集群中
    location / {
      proxy_pass http://tomcats/;
    }
  }
  • ip_hash:在搭建集群之后,Session域会失效,多台Tomcat之间的Session数据是无法同步的。导致用户每次登录后,都没有绑定到登录信息,要反复无限的去登录操作。ip_hash在客户端的ip地址没有改变时,始终会将请求转发到某一个Tomcat。
​  # Nginx配置方式
  # 指定8080和8081是集群
  upstream tomcats{
    ip_hash;
    server 192.168.41.41:8080;  
    server 192.168.41.41:8081;  
  }
​
  server{
    listen 80;
    server_name localhost;
      # 将接收到的请求转发到tomcats集群中
  location / {
       proxy_pass http://tomcats/;
    }
  }

六、动静分离

动静分离:就时让Nginx将动态资源和静态资源分开处理。

Nginx的并发能力公式:

  • worker_processor * worker_connection / 4 = 动态资源并发能力
  • worker_processor * worker_connection / 2 = 静态资源并发能力

有一些静态化的页面,可以避免访问Tomcat服务器,直接由反向代理服务器返回即可。

静态资源代理:

location / {
  root 本地静态资源绝对路径;
  index index.html;    # 默认访问的静态资源
  autoindex on;       # 默认展示静态资源列表
}

动态资源代理:

location / {
  proxy_pass 动态资源路径;
}

七、Nginx搭建集群

[/wppay]