ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

代理与负载均衡

2022-01-06 20:02:21  阅读:164  来源: 互联网

标签:负载 conf 代理 server nginx lb01 均衡 80 root


一、代理的两种方式

    正向代理

      正向代理类似一个跳板机,代理访问外部资源,找完代理之后,还需要找服务器。

      比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了

      作用:

      (1)访问原来无法访问的资源,如google

           (2) 可以做缓存,加速访问资源

      (3)对客户端访问授权,上网进行认证

      (4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

    反向代理

      反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器,只需要找代理,不需要找服务器。

      作用:    

      (1)保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网

      (2)负载均衡,通过反向代理服务器来优化网站的负载

 

 

 

二、Nginx代理服务支持的协议

ngx_http_uwsgi_module Python
ngx_http_fastcgi_module PHP
ngx_http_scgi_module Java
ngx_http_v2_module Golang
ngx_http_proxy_module HTTP

 

 

 

 

 

 

 

三、实现简易反向代理

    部署服务端web01(详细步骤可看之前的博客)

[root@web01 conf.d]# cat game5.conf 
server {
    listen 80;
    server_name test.mario.com;
    location / {
        root /code/html-mario;
	index index.html;
    }

}

    部署代理端lb01

      ① 编译安装nginx

# 下载Nginx源代码包
[root@lb01 ~]# wget https://nginx.org/download/nginx-1.20.2.tar.gz

# 解压
[root@lb01 ~]# tar -xf nginx-1.20.2.tar.gz

# 进入源代码目录
[root@lb01 ~]# cd nginx-1.20.2

# 安装依赖包
[root@lb01 nginx-1.20.2]# yum install openssl openssl-devel zlib zlib-devel -y

# 设置编译参数
[root@lb01 nginx-1.20.2]# ./configure  --with-http_gzip_static_module    --with-stream     --with-http_ssl_module

# 编译
[root@lb01 nginx-1.20.2]# make 

# 安装
[root@lb01 nginx-1.20.2]# make install 

# 优化
[root@lb01 nginx]# mkdir /etc/nginx
[root@lb01 nginx]# mv /usr/local/nginx/conf/* /etc/nginx/
[root@lb01 nginx]# mkdir /etc/nginx/conf.d
[root@lb01 nginx]# groupadd www -g 666
[root@lb01 nginx]# useradd www -u 666 -g 666 -M -r -s /sbin/nologin
[root@lb01 nginx]# vim /etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user www;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2;
#        listen       [::]:443 ssl http2;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

[root@lb01 nginx]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"

[Install]
WantedBy=multi-user.target

[root@lb01 sbin]# ln -s /etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
[root@lb01 sbin]# mv /usr/local/nginx/sbin/nginx /usr/sbin/
[root@lb01 sbin]# mkdir /var/log/nginx
[root@lb01 sbin]# systemctl start nginx 

      ② 编辑代理配置

[root@lb01 conf.d]# vim /etc/nginx/conf.d/game.conf 
server {
    listen 80;
    server_name _; # _代表本机公网和内网ip都可以登录
    location / {
        proxy_pass http://172.16.1.7:80;  # 服务端的ip
    }
}

      ③ 重启nginx服务

 

 

[root@lb01 sbin]# systemctl start nginx 

 

 

 

 

 

四、配置代理优化文件

     ① 编辑代理优化配置

[root@lb01 ~]# vim /etc/nginx/proxy_params 
proxy_set_header Host $http_host;  # 用户请求的时候HOST的值是linux.proxy.com, 那么代理服务会像后端传递请求的还是linux.proxy.com
proxy_set_header X-Real-IP $remote_addr; # 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
proxy_connect_timeout 10s; #设置nginx代理与后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 10s; #设置nginx代理等待后端服务器的响应时间
proxy_send_timeout 10s; #设置后端服务器数据回传给nginx代理超时时间
proxy_buffering on; #开启缓冲区,nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
proxy_buffer_size 8k; #设置nginx代理保存用户头信息的缓冲区大小
proxy_buffers 8 8k; # 设置有几个缓冲区

    ② 在nginx配置文件中加载优化文件

[root@lb01 conf.d]# vim game.conf 
server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://172.16.1.7:80;
        include /etc/nginx/proxy_params;
    }
}

  可以在web01服务器中的访问日志中查看修改的信息,如果有便是加载成功了

 

 

 

五、负载均衡

    简介

      负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。

 

 

    负载均衡的实现

      实现负载均衡需要将后端服务打包成一个连接池,然后使用反向代理访问  

      连接池格式:

        upstream [连接池名称] {
               server [ip]:[port];
          server [ip]:[port];
          server [ip]:[port];
        }

      反向代理格式: 

        server {
          listen 80;
          server_name _;
          location / {
          proxy_pass http://[连接池];
          }
        }

      实例:将三个web服务器作为后端服务,使用lb01当作代理访问

[root@lb01 conf.d]# vim game.conf 
upstream mario {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
}

server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://mario;
        include /etc/nginx/proxy_params;
    }
}

      通过查看每一台后端服务器nginx的访问日志,我们可以发现每一台后端服务器上都会有该代理的访问的记录

tail -f /var/log/nginx/access.log

  

    负载均衡给每台服务器分配的比例

      负载均衡分配比例时有三种算法

        ① 轮询(Nginx负载均衡默认是轮询分配)

upstream supermarie {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
}

        ② 权重 (Nginx中的权重分为0-100,数字越大,分配到的比例越大)

upstream supermarie {
    server 172.16.1.7:80 weight=20;
    server 172.16.1.8:80 weight=10;
    server 172.16.1.9:80 weight=5;
}

        ③ ip_hash (每一个ip固定访问一个后端)

upstream supermarie {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
    ip_hash;
}

 

    负载均衡后端状态

 

 

状态概述
down 当前的server暂时不参与负载均衡
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后, 服务暂停时间

标签:负载,conf,代理,server,nginx,lb01,均衡,80,root
来源: https://www.cnblogs.com/892572624A/p/15772557.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有