• nginx


    概念:

    正向代理:需要客户端进行配置,例如fiddler客户端配置。

    反向代理:在服务端配置。例如nginx。

    nginx的下载安装

    一、下载:wget http://nginx.org/download/nginx-1.9.9.tar.gz
    
    二、配置nginx安装所需的环境:
    
      1、yum install gcc-c++
    
      2、yum install -y pcre pcre-devel
    
      3、yum install -y zlib zlib-devel 
    
      4、yum install -y openssl openssl-devel 
    
    三、解压:tar -zxvf nginx-1.9.9.tar.gz 
    
    四、进入解压文件 cd nginx-1.9.9
    
    五、使用默认配置 ./configure
    
    六、编译安装:make && make install

    注:默认安装路径:/usr/local/nginx。

    nginx常用命令

    nginx命令必须在安装目录的sbin目录下执行

    查看版本 ./nginx -v 查看进程 ps -ef|grep nginx 停止 ./nginx -s stop 启动 ./nginx 热部署重加载 ./nginx -s reload

      

    配置文件

    路径:/usr/local/nginx/conf/nginx.conf

    #user  nobody;
    worker_processes  1;#并发处理的任务数
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024; #每个worker_processes支持与客户最大连接数
    }
    
    
    http {
        include       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  logs/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
            #负载均衡配置,平均分配访问
            #默认策略:轮询,服务器挂了就自动剔除
            #weight策略:权重策略,权重越高,被分配的越多,默认为1。weight是weight策略才加
            #ip_hash策略:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
            #fair策略:根据响应时间来分配,响应时间短的优先分配
            upstream myserver{
                ip_hash
                fair
                server 192.168.110.128:8080  weight=5;
                server 192.168.110.128:8081  weight=10;
            }
            
            #反向代理配置
        server {
            listen       80; #对外接口
            server_name  192.168.110.128; #主机名称,客户端访问的ip
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / { #跳转配置
                root   html;#动静分离时,静态资源的路径 /data/
                autoindex on; #列出访问目录列表
                proxy_pass http://127.0.0.1:8080; #跳转路径
                # proxy_pass http://myserver:8080; #跳转路径(负载均衡)
                index  index.html index.htm;
            }
            
            location ~/edu/ { #跳转配置,路径中包含edu的进,区分大小写。~路径中包含正则表达式,区分大小写。~*路径中包含正则表达式,不区分大小写。=不包含正则表达式,一旦匹配停止往下搜寻。
                root   html;
                proxy_pass http://127.0.0.1:8081; #跳转路径
                index  index.html index.htm;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ .php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ .php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /.ht {
            #    deny  all;
            #}
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;
    
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
    
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }

    反向代理配置步骤

    1、在windos系统的hosts文件里配置域名与ip的映射关系。(网络上可以DNS配置)
    2、在ngin配置中修改配置
      http server 中加 【proxy_pass  转发路径(http://127.0.0.1:8080)】
    3、重启nginx

    负载均衡配置

    动静分离:是把动态请求与静态请求分开,而不只是单纯的把动态页面与静态页面分开请求。nginx处理静态页面,tomcat处理动态页面

    策略

    1、默认策略:轮询,服务器挂了就自动剔除
    2、weight策略:权重策略,权重越高,被分配的越多,默认为1。weight是weight策略才加
    3、ip_hash策略:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
    4、fair策略:根据响应时间来分配,响应时间短的优先分配

    高可用集群(防止nginx挂掉)

    安装keepalived

    命令:yum install keepalived -y

    验证显示版本:rpm -q -a keepalived 

    配置文件    /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL #相当于域名 在host中配置
    }
    
    #检测脚本与权重参数
    vrrp_script chk_http_port{
        script "/usr/local/src/nginx_check.sh"
        interval 2 #(检测脚本执行的间隔,2秒)
        weight -2 # 一旦挂了,本机权重降低2
    }
    
    
    
    vrrp_instance VI_1 {
        state MASTER  # 备份服务器上将MASTER改为BACKUP
        interface eth0 // 网卡 eth0、ens33。keepalived安装时就设置好了。linux查网卡,ifconfig。对应ip地址的那个就是
        virtual_router_id 51 # 主、备机的virtual_router_id必须相同
        priority 100 # 主、备机取不同的优先级,主机值较大,备机值较小
        advert_int 1 #每1秒发心跳
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress { //VRRP H虚拟地址。配一个就行
            192.168.200.16
            192.168.200.17
            192.168.200.18
        }
    }
    
    virtual_server 192.168.200.100 443 {
        delay_loop 6
        lb_algo rr
        lb_kind NAT
        nat_mask 255.255.255.0
        persistence_timeout 50
        protocol TCP
    
        real_server 192.168.201.100 443 {
            weight 1
            SSL_GET {
                url {
                  path /
                  digest ff20ad2481f97b1754ef3e12ecd3a9cc
                }
                url {
                  path /mrtg/
                  digest 9b3a0c85a887a256d6939da88aabd8cd
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    
    virtual_server 10.10.10.2 1358 {
        delay_loop 6
        lb_algo rr 
        lb_kind NAT
        persistence_timeout 50
        protocol TCP
    
        sorry_server 192.168.200.200 1358
    
        real_server 192.168.200.2 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl3/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    
        real_server 192.168.200.3 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334c
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334c
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    
    virtual_server 10.10.10.3 1358 {
        delay_loop 3
        lb_algo rr 
        lb_kind NAT
        nat_mask 255.255.255.0
        persistence_timeout 50
        protocol TCP
    
        real_server 192.168.200.4 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl3/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    
        real_server 192.168.200.5 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl3/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }

    配置文件解析

    虚拟服务器virtual_server定义块
    virtual_server:定义一个虚拟服务器,这个ip是virtual_ipaddress中定义的其中一个,后面一个空格,然后加上虚拟服务的端口号。 
    1> delay_loop:健康检查时间间隔,单位:秒 
    2> lb_algo:负载均衡调度算法,互联网应用常用方式为wlc或rr 
    3> lb_kind:负载均衡转发规则。包括DR、NAT、TUN 3种,一般使用路由(DR)转发规则。 
    4> persistence_timeout:http服务会话保持时间,单位:秒 
    5> protocol:转发协议,分为TCP和UDP两种
    
    real_server:真实服务器IP和端口,可以定义多个 
    1> weight:负载权重,值越大,转发的优先级越高 
    2> notify_down:服务停止后执行的脚本 
    3> TCP_CHECK:服务有效性检测 
    * connect_port:服务连接端口 
    * connect_timeout:服务连接超时时长,单位:秒 
    * nb_get_retry:服务连接失败重试次数 
    * delay_before_retry:重试连接间隔,单位:秒

    脚本文件nginx_check.sh

    #!/bin/bash
    A='ps -C nginx -no-header |wc -l'
    if [ $A -eq 0 ];then
        /usr/local/nginx/sbin/nginx
        sleep 2
        if [ 'ps -C nginx --no-header |wc -l' -eg 0 ];then
            killall keepalived
        fi
    fi    

    keepalived启动命令:

    linux7.x:systemctl start keepalived.service 

    linux6.x:service keepalived start/stop

    验证命令:ip a

    nginx原理

  • 相关阅读:
    Android自己主动升级框架
    一句话说清楚啥是delegate
    C#
    MySQL Community Server 5.6和MySQL Installer 5.6
    仿htc sense的弹性listView!
    双向队列(STL做法)
    余承东:未来5年中国大部分智能手机厂商消失
    P3808 【模版】AC自动机(简单版)
    P1103 书本整理
    P2580 于是他错误的点名开始了
  • 原文地址:https://www.cnblogs.com/cowshed/p/12484986.html
Copyright © 2020-2023  润新知