zoukankan      html  css  js  c++  java
  • Linux学习120 nginx高级模块应用及优化思路

    一、相应模块

      1、ngx_stream_core_module

        a、查看此模块

    [root@www ~]# rpm -qa|grep nginx
    nginx-mod-stream-1.16.1-3.el7.x86_64
    nginx-filesystem-1.16.1-3.el7.noarch
    nginx-mod-http-perl-1.16.1-3.el7.x86_64
    nginx-mod-http-xslt-filter-1.16.1-3.el7.x86_64
    nginx-1.16.1-3.el7.x86_64
    nginx-all-modules-1.16.1-3.el7.noarch
    nginx-mod-mail-1.16.1-3.el7.x86_64
    nginx-mod-http-image-filter-1.16.1-3.el7.x86_64
    [root@www ~]# rpm -ql nginx-mod-stream-1.16.1-3.el7.x86_64
    /usr/lib64/nginx/modules/ngx_stream_module.so
    /usr/share/nginx/modules/mod-stream.conf
    [root@www ~]# cat /usr/share/nginx/modules/mod-stream.conf 
    load_module "/usr/lib64/nginx/modules/ngx_stream_module.so";

        b、对nginx来讲如果你不准备使用http服务就可以不用使用http而是使用stream即可。所有4层负载均衡及代理功能都应该放在stream上下文中。又因为在stream中由于其为伪四层代理因此面向客户端一侧所有功能依然需要使用server来表示,需要监听在哪个端口上来代理至具体的哪个后端主机。

          

          

        c、配置我们的四层代理

          (1)、创建配置文件并启动服务

    [root@www ~]# cat /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 nginx;
    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;
    }
    stream {
        server {
            listen 22922;
            proxy_pass 192.168.10.41:22; 
    }
    }
    [root@www ~]# nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    [root@www ~]# systemctl restart nginx
    [root@www ~]# netstat -anpt|grep 229
    tcp        0      0 0.0.0.0:22922           0.0.0.0:*               LISTEN      1436/nginx: master 

          (2)、尝试进行连接

    [root@www ~]# ssh -p22922 root@192.168.10.43
    root@192.168.10.43's password: 
    Last login: Wed Dec 16 04:06:30 2020 from 192.168.10.43
    [root@localhost ~]# ip a |grep 10.
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        inet 192.168.10.41/24 brd 192.168.10.255 scope global noprefixroute ens33

          (3)、配置80端口代理

    [root@www ~]# cat /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 nginx;
    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;
    }
    stream {
        server {
            listen 22922;
            proxy_pass 192.168.10.41:22; 
    }
        server {
            listen 80;
            proxy_pass 192.168.10.42:80;
    }
    }
    [root@www ~]# curl 192.168.10.43
    upstream server2:192.168.10.42

        d、配置负载均衡

          (1)、配置upstream:此处的upstream模块是我们stream模块中的upstream,与我们前面配置的http中的upstream很相似而已。

    [root@www ~]# cat /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 nginx;
    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;
    }
    stream {
        upstream sshsrvs {
            server 192.168.10.41:22;
            server 192.168.10.42:22;
    }
        upstream websrvs {
            server 192.168.10.41:80;
            server 192.168.10.42:80;
    }
        server {
            listen 22922;
            proxy_pass sshsrvs; 
    }
        server {
            listen 80;
            proxy_pass websrvs;
    }
    }
    [root@www ~]# for i in {1..4};do curl 192.168.10.43;done
    upstream server1:192.168.10.41
    upstream server2:192.168.10.42
    upstream server1:192.168.10.41
    upstream server2:192.168.10.42

          (2)、配置mysql的负载均衡

    [root@www ~]# cat /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 nginx;
    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;
    }
    stream {
        upstream sshsrvs {
            server 192.168.10.41:22;
            server 192.168.10.42:22;
    }
        upstream websrvs {
            server 192.168.10.41:80;
            server 192.168.10.42:80;
    }
        upstream mysrvs {
            server 192.168.10.41:3306;
            server 192.168.10.42:3306;
    }
        server {
            listen 22922;
            proxy_pass sshsrvs; 
    }
        server {
            listen 80;
            proxy_pass websrvs;
    }
        server {
            listen 3306;
            proxy_pass mysrvs;
    }
    }
    [root@www ~]# nginx -s reload
    [root@www ~]# netstat -anpt|grep 3306
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1436/nginx: master  

          (3)、我们也可以将来自同一个IP的请求转发至同一个后端主机。(此模块不支持ip_hash,不过支持hash)

            

        e、总结

    二、nginx编译安装

      1、编译示例

      2、nginx打补丁方式

      3、课外实践

  • 相关阅读:
    Spring Boot @DeleteMapping(转)
    白天和夜晚分类
    使用HSV色彩空间遮罩绿色区域
    HSV转换
    HSV 和 HLS颜色空间
    python 处理图像出现The lower bounary is neither an array of the same size and same type as src, nor a scalar in function inRange
    读取图片上一点的像素
    python 实现A*算法
    uda 4.C++面向对象编程
    uda 3.C++二维向量
  • 原文地址:https://www.cnblogs.com/Presley-lpc/p/14140706.html
Copyright © 2011-2022 走看看