nginx 相关概念

159 阅读6分钟

概念

反向代理,就是将前端发送的动态请求由nginx转发到后端服务器

优势

提高访问速度

nginx 可以做缓存,如果请求了相同的地址,无需请求服务器

负载均衡

将大量的请求,均衡的分配给集群的服务器

保证后端服务的安全

后端服务部署在公司内部局域网,并不会对外开放,外部不能直接请求到后端。

请求nginx服务器 -- > 转发给后端的服务

配置反向代理

修改nginx.cnof配置

upstream  heima-app-gateway{
    server localhost:51601;
}

server {
	listen 8801;
	location / {
		root C:/soteware/nginx/nginx-1.18.0/html/heima/app-web;
		index index.html;
	}
	
	location ~/app/(.*) {
		proxy_pass http://heima-app-gateway/$1;
		proxy_set_header HOST $host;  # 不改变源请求头的值
		proxy_pass_request_body on;  #开启获取请求体
		proxy_pass_request_headers on;  #开启获取请求头
		proxy_set_header X-Real-IP $remote_addr;   # 记录真实发出请求的客户端IP
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  #记录代理信息
	}
}

servr:代表一个虚拟主机

listen:服务器监听端口

location:处理特定的一些请求,如请求路径带有app

proxy_pass: 反向代理,它的作用是指定Nginx需要代理的目标服务器的地址。当Nginx接收到客户端请求后,根据proxy_pass的值,将请求转发给指定的目标服务器,并将目标服务器的响应返回给客户端。

作用说明

这段Nginx配置定义了一个服务器监听端口8801,并配置了两个位置(location)。

第一个位置指示当访问根路径(/)时,使用C:/soteware/nginx/nginx-1.18.0/html/heima/app-web目录下的index.html文件作为默认响应。

第二个位置是一个正则表达式匹配,当访问URL路径中含有/app/的时候,会将请求转发(代理)到名为heima-app-gateway的服务器。同时,Nginx会保留原始请求头和请求体,并添加一些新的请求头,其中包括记录请求的真实IP地址和代理信息。

*在上述的location中, ~表示后面的字符串是正则表达式,在此处表示开头是”/app/“。因此,此location指令将匹配以”/app/“开头的URL。

对于正则表达式的其它两个符号:“.*”表示0或更多个任意字符,“()” 表示正则表达式中的一个分组,可以被用于匹配URL中的一部分字符串并在后续使用。* * 因此,在此location中,“(. *)”表示匹配请求URL的任意字符,它被用作分组,可以在后续的配置中使用这个变量。 *

配置负载均衡

修改conf配置

http {
    upstream backend {
        server backend1.example.com weight=5;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend; # 负载均衡
        }
    }
}

作用说明

上述配置中,upstream指令定义了一组代理服务器列表,包含了多个后端服务器的地址和权重(可选),其中后端服务器的地址可以是IP地址或者域名。权重用于指定不同服务器的请求处理分配比例,如果不指定,默认权重为1。

在server指令中,listen指令指定了监听的端口,server_name指令定义了主机名,location指令指定了代理的URL路径,通过proxy_pass指令将请求转发到upstream中的服务器,以实现负载均衡。

负载均衡策略

名称说明
轮询默认
weight权重方式,默认为1,权重越高,被分配的客户端请求就越多
ip_hash依据ip分配方式,这样每个访客可以固定访问一个后端服务
least_conn依据最少连接方式,把请求优先分配给连接数少的后端服务
url_hash依据url分配方式,这样相同的url会被分配到同一个后端服务
fair依据响应时间方式,响应时间短的服务将会被优先分配

配置示例

轮询和最少连接方式

http {
  upstream backend {
    # 轮询策略
    server backend1.example.com;
    server backend2.example.com;

    # 最少连接策略
    least_conn;
    server backend3.example.com;
    server backend4.example.com;
  }

  server {
    listen 80;
    location / {
      proxy_pass http://backend;
    }
  }
}

IP散列策略

frontend http-in
  bind *:80
  mode http

  acl host_mywebsite hdr(host) -i mywebsite.com
  use_backend backend_servers if host_mywebsite

backend backend_servers
  balance source
  hash-type consistent
  server backend1 10.0.0.1:80 check
  server backend2 10.0.0.2:80 check
  server backend3 10.0.0.3:80 check

以下是代码中的关键部分的解释:

frontend http-in:定义了一个前端http-in,用于监听80端口上的HTTP请求。

bind *:80:绑定前端到所有可用的IP地址和80端口。

mode http:设置前端模式为HTTP。

acl host_mywebsite hdr(host) -i mywebsite.com:定义一个访问控制列表(ACL),根据请求的host头部信息匹配mywebsite.com域名。

use_backend backend_servers if host_mywebsite:如果匹配ACL,则使用名为backend_servers的后端。

backend backend_servers:定义了一个名为backend_servers的后端,用于处理来自前端的请求。

balance source:使用源IP地址进行负载均衡。

hash-type consistent:使用一致性哈希算法实现负载均衡。

server backend1 10.0.0.1:80 check:定义一个名为backend1的服务器,并指定其IP地址和端口号为10.0.0.1:80

server backend2 10.0.0.2:80 check:定义一个名为backend2的服务器,并指定其IP地址和端口号为10.0.0.2:80

server backend3 10.0.0.3:80 check:定义一个名为backend3的服务器,并指定其IP地址和端口号为10.0.0.3:80

总体来说,这段配置文件的作用是将来自mywebsite.com域名的HTTP请求通过负载均衡分发给后端服务器backend_servers。后端服务器使用源IP地址和一致性哈希算法进行负载均衡。

加权轮询和加权最少连接策略

virtual_server 192.168.1.100 80 {
  persistence_timeout 50
  lb_algo wlc

  # 加权轮询策略
  real_server 192.168.1.101 80 {
    weight 10
    TCP_CHECK {
      connect_timeout 10
      retry 3
      delay_before_retry 3
    }
  }
  real_server 192.168.1.102 80 {
    weight 20
    TCP_CHECK {
      connect_timeout 10
      retry 3
      delay_before_retry 3
    }
  }

  # 加权最少连接策略
  fallback real_server 192.168.1.103 80 {
    weight 5
    TCP_CHECK {
      connect_timeout 10
      retry 3
      delay_before_retry 3
    }
  }
}

这段代码是一个基本的LVS(Linux Virtual Server)配置文件,用于实现基于IP地址和端口的负载均衡。以下是代码中的关键部分的解释:

virtual_server 192.168.1.100 80:定义了一个名为192.168.1.100:80的虚拟服务器(Virtual Server),用于监听IP地址192.168.1.100和端口80上的TCP连接请求。

persistence_timeout 50:设置会话保持的超时时间为50秒(如果需要会话保持的话)。

lb_algo wlc:使用加权最少连接策略(Weighted Least Connection,wlc)进行负载均衡。

real_server 192.168.1.101 80:定义一个名为192.168.1.101:80的实际服务器(Real Server),用于处理来自虚拟服务器的TCP连接请求。

weight 10:将该实际服务器的权重设置为10。

TCP_CHECK:使用TCP检测方式进行健康检查,以确保该实际服务器的可用性。

real_server 192.168.1.102 80:定义一个名为192.168.1.102:80的实际服务器。

weight 20:将该实际服务器的权重设置为20。

TCP_CHECK:使用TCP检测方式进行健康检查。

fallback real_server 192.168.1.103 80:定义一个备用(Fallback)实际服务器,表示如果其他实际服务器不可用,则将流量转发给该实际服务器。

weight 5:将该实际服务器的权重设置为5。

TCP_CHECK:使用TCP检测方式进行健康检查。

总体来说,这段配置文件的作用是将来自IP地址192.168.1.100和端口80的TCP连接请求通过负载均衡分发给多个实际服务器。