Nginx代理及负载均衡

目录

一、Nginx正向代理(客户端 <一> 代理 一>服务端)

二、Nginx反向代理(客户端 一>代理 <一> 服务端)

反向代理实例:

1、修改代理服务器配置设置请求转发。

2、启动nginx代理服务器

3、验证

三、基于反向代理实现的负载均衡

1、利用nginx负载均衡后端服务器配置块upstream 组成服务集群

2、通过客户端向负载均衡服务器发送请求,模拟并发环境

3、验证


一、Nginx正向代理(客户端 <一> 代理 一>服务端)

        正向代理是代理服务器位于客户端和目标服务器之间,客户端发送请求时需先将请求发送至代理服务器,代理服务器再将请求转发给目标服务器,并将响应返回给客户端。这种配置可以用于代理客户端访问受限制的内容或保护客户端的身份信息。(服务端不知道客户端的真实IP,都是通过代理服务器转发的请求和响应)

正向代理,对于服务端来讲,来源地址是一个整体(代理服务器)

二、Nginx反向代理(客户端 一>代理 <一> 服务端)

        当外部请求进入系统时,K代理服务器把该请求转发到系统中的某台服务器上,对外部请求来说,与之交互的只有代理服务器,此时代理服务器实现的是反向代理。

        其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。(客户端不知道服务端的真实IP)

反向代理,对于客户端来讲,后端地址是一个整体(代理服务器)

正向代理和反向代理的区别:

1、正向代理是为了代理客户端发送请求,而反向代理是为了代理服务器接收请求。

2、正向代理的主体是客户端,而反向代理的主体是服务器

反向代理实例:

目的:在客户端无法直接连接目标服务器的情况下,通过客户端向代理服务器发送请求并转发给目标服务器接收到响应结果

目标服务器:

A:127.0.0.1:8000/API

代理服务器:

B:127.0.0.2:8889

客户端:

C:127.0.0.3

1、修改代理服务器配置设置请求转发。

默认配置文件路径一般在/etc/nginx/conf.d/default.conf,特例情况下通过开源社区拉取的项目可根据/etc/nginx/nginx.conf全局配置文件中的include查看配置文件

nginx.conf 

user  nginx;

worker_processes  auto;

error_log  /var/log/nginx/error.log notice;

pid        /var/run/nginx.pid;

events {

    worker_connections  1024;

}

http {

    include       /etc/nginx/mime.types;

    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

}

配置项

解释

备注

server

定义虚拟主机的配置项,一个Nginx服务器可以有多个server块来处理不同的域名或IP地址的请求

listen 8080

监听8080端口

listen [::]:8080

设置服务器监听的IPv6地址和端口

server_name

设置虚拟主机的域名或IP地址

location

匹配请求的URL路径,并指定相应的配置块

proxy_pass

用于将请求反向代理到指定的后端服务器

proxy_set_header

用于设置转发到后端服务器的HTTP请求头

可设置是否将客户端IP地址写入请求头,从而实现隐藏真实客户端IP

server backend1.example.com;

默认的负载均衡策略。Nginx按照请求的顺序将请求分发给后端服务器,每个服务器依次接收请求

ip_hash;

Nginx根据客户端的IP地址将请求分发给后端服务器。这样可以确保同一个客户端的请求始终发送到同一个服务器,有助于保持会话的一致性

least_conn;

Nginx将请求发送到当前连接数最少的后端服务器。这个策略可以确保负载均衡,使得连接数相对均匀地分布在后端服务器上

server backend1.example.com weight=3;

Nginx根据服务器的权重分配请求。权重越高的服务器将接收到更多的请求

server backend1.example.com weight=3;

least_conn;

Nginx根据服务器的权重和当前连接数将请求分发给后端服务器。权重越高且连接数越少的服务器将接收到更多的请求

2、启动nginx代理服务器

docker-compose.yml 

version: '2.0'

services:

  web: #入口程序

    image: nginx:1.20.1

    container_name: nginx

    ports:

     - "8889:8080"

    volumes:

     - /home/nginx/nginx.conf:/etc/nginx/nginx.conf

     - /home/nginx/default.conf:/etc/nginx/conf.d/default.conf

    ulimits:

      core: 0

3、验证

客户端请求:

curl http://127.0.0.2:8889/API

Request received. Check server console for client IP.

服务端响应:

Client IP:127.0.0.2

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

三、基于反向代理实现的负载均衡

       将网络流量在多个后端服务器之间分配的技术,以提高系统的可伸缩性、可靠性和性能

例:比如共有15个请求,通过nginx将这些请求平均分发(理想状态下)到下面三个服务器上,每个服务器上有5个请求

服务端:

A:127.0.0.1:8000

B:127.0.0.1:8001

C:127.0.0.1:8002

客户端:

D:127.0.0.3

负载均衡服务器:

E:127.0.0.2:8889

具体实现:

1、利用nginx负载均衡后端服务器配置块upstream 组成服务集群

nginx代理配置 

upstream test_api {

           server 127.0.0.1:8000;

           server 127.0.0.1:8001;

           server 127.0.0.1:8002;

}

server {

    listen       8080;

    listen  [::]:8080;

    server_name  localhost;

    # access_log  /var/log/nginx/host.access.log  main;

    location / {

        proxy_pass http://test_api;

        proxy_set_header Host $host;

        #proxy_set_header X-Real-IP $remote_addr;

    }

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {

        root   /usr/share/nginx/html;

    }

}

2、通过客户端向负载均衡服务器发送请求,模拟并发环境

bash request.sh 

#!/bin/bash



TARGET_SERVER="http://127.0.0.2:8889/API"

CONCURRENT_REQUESTS=15



for ((i=1; i<=CONCURRENT_REQUESTS; i++)); do

    curl -s "$TARGET_SERVER" >/dev/null &

done



wait



echo "All requests sent"

3、验证

A服务端:127.0.0.1:8000

Client IP:127.0.0.1

Client IP:127.0.0.1

Client IP:127.0.0.1

Client IP:127.0.0.1

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

Client IP:127.0.0.1

B服务端:127.0.0.1:8001

Client IP:127.0.0.1

Client IP:127.0.0.1

Client IP:127.0.0.1

Client IP:127.0.0.1

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

Client IP:127.0.0.1

C服务端:127.0.0.1:8002

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

Client IP:127.0.0.1

Client IP:127.0.0.1

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

127.0.0.2 -   -  [11/Aug2023 10:58:33]  "GET  /API HTTP/1.0"  200 -

Client IP:127.0.0.1

Client IP:127.0.0.1

Client IP:127.0.0.1

  • 29
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打一年工搬一年砖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值