• nginx的四层转发功能




    架构图


    配置过程

    配置web服务器

    # 1、配置web01,更改配置文件
    [root@web01 /etc/nginx/conf.d]# vi test1.conf 
    server {
            listen 8007;
            server_name test.gong.com;
            root /website/test;
            index index.html;
    }
    
    # 2、创建站点目录。
    [root@web01 /etc/nginx/conf.d]# mkdir -p /website/test
    
    # 2、添加主页
    [root@web01 /etc/nginx/conf.d]# echo 'This is <h1 style="color:red;">web01</h1> page!!' >/website/test/index.html
    
    # 4、重启nginx
    [root@web01 /etc/nginx/conf.d]# nginx -s reload
    
    # 用同样的方法配置web02
    ## web02监听的8008端口
    [root@web01 /etc/nginx/conf.d]# vi test1.conf 
    server {
            listen 8008;
            server_name test.gong.com;
            root /website/test;
            index index.html;
    }
    

    配置七层负载均衡

    # 1、配置负载均衡
    [root@lb01 /etc/nginx/conf.d]# vi upstream.conf 
    upstream test_gong {
            172.16.1.7:8007;
            172.16.1.8:8008;
    }
    
    server {
            listen 8005;
            server_name test.gong.com;
            location / {
                    proxy_pass http://test_gong;
                    include proxy_params;
            }
    }
    
    [root@lb01 /etc/nginx/conf.d]# nginx -s reload
    
    # 第二台也使用相同的配置
    ##
    [root@db01 /etc/nginx/conf.d]# vi upstream.conf 
    upstream test_gong {
            server 172.16.1.7:8007;
            server 172.16.1.8:8008;
    }
    
    server {
            listen 8051;
            server_name test.gong.com;
            location / {
                    proxy_pass http://test_gong;
                    include proxy_params;
            }
    }
    
    

    四层负载均衡概念

    四层负载均衡

    七层负载均衡:只识别域名,是http层。

    四层负载均衡:不识别域名,是tcp层,类似于端口转发。

    在nginx-1.9.0之前的版本没有四层负载均衡。

    ngx_stream_core_module

    用于四层负载均衡

    The ngx_stream_core_module module is available since version 1.9.0. This module is not built by default, it should be enabled with the --with-stream configuration parameter.

    “ngx_stream_core_”模块自1.9.0版起提供。默认情况下,此模块不是生成的,应使用“--with-stream”配置参数启用它。
    

    官方实例

    因为是四层的协议,所以不能写在http模块当中。

    stream {
        upstream backend {
            hash $remote_addr consistent;
    
            server backend1.example.com:12345 weight=5;
            server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
            server unix:/tmp/backend3;
        }
    
        upstream dns {
           server 192.168.0.1:53535;
           server dns.example.com:53;
        }
    
        server {
            listen 12345;
            proxy_connect_timeout 1s;
            proxy_timeout 3s;
            proxy_pass backend;
        }
    
        server {
            listen 127.0.0.1:53 udp reuseport;
            proxy_timeout 20s;
            proxy_pass dns;
        }
    
        server {
            listen [::1]:12345;
            proxy_pass unix:/tmp/stream.socket;
        }
    }
    

    四层负载作用

    端口转发

    做7层负载的高可用

    7层负载的端口限制

    四层转发的效率比七层的高,因为在tcp的第四层。

    大并发的场景会在,七层负载前面添加四层负载。

    动静分离

    不需要运维来做,开发做的。

    • 动态请求:该请求会调用数据库中的数据。

    • 静态请求:用户请求不会调用数据库。

    • 动态页面:后端开发写的需要调用数据库的页面(python、java、C、php)

    • 静态页面:前端开发写的不需要调用数据库。


    配置四层负载均衡

    四层负载均衡比七层的转发效率要高,在yum安装nginx的时候不带支持四层负载均衡的模块所以要使用源码编译安装。

    [root@nfs01 ~]# tar -xf nginx-1.16.1.tar.gz
    
    [root@nfs01 /application]# yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
    
    [root@nfs01 ~/nginx-1.16.1]# ./configure --prefix=/application/nginx-1.16.1 --user=www --group=www --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --with-stream
    
    [root@nfs01 ~/nginx-1.16.1]# make && make install
    
    [root@nfs01 ~]# vi /etc/profile.d/nginx.sh
    export PATH="/application/nginx/sbin:$PATH"
    
    [root@nfs01 ~]# ln -s /application/nginx-1.16.1/ /application/nginx
    [root@nfs01 ~]# source /etc/profile
    
    [root@nfs01 ~]# vi /application/nginx/conf/nginx.conf
    	...	
    events {
        worker_connections  1024;
    }
    # 加入它在指定的目录下配置单独的配配置文件
    include conf.c/*.conf;
    
    http {
    	...
    	
    	
    [root@nfs01 /application/nginx/conf/conf.c]# vi four_upstream.conf
    stream {
        upstream lb {
                server 172.16.1.5:8005;
                server 172.16.1.51:8051;
        }
    
        log_format  main '$remote_addr $remote_port - [$time_local] $status $protocol '
                         '"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"';
        
        server {
                listen 80;
                proxy_connect_timeout 3s;
                proxy_timeout 3s;
                proxy_pass lb;
    
    
                access_log  logs/access.log  main;
        }
    }
    
    



    FBI WARNING
    QQ:1402122292 认准原创sheldon 别人叫我晓东
    欢迎访问个人站点:shelldon.51vip.biz
  • 相关阅读:
    PHP正则表达式
    结构体
    golang 基础笔记一
    Goland常用快捷键
    接口和断言
    golang 案例分析
    Gun make可识别指示符
    makefile中SHELL变量的设置
    蓝牙耳机声音太大、太小调节
    查看SecureCRT会话中保存的密文
  • 原文地址:https://www.cnblogs.com/gshelldon/p/13332760.html
Copyright © 2020-2023  润新知