• Nginx配置--静态代理&反向代理&负载均衡&动静分离&虚拟主机


    一、静态代理

      Nginx静态代理是指将所有的静态资源,例如,css、js、html、jpg等资源存放到Nginx服务器,而不存放在应用服务器Tomcat中,当客户端发出的请求是对这些静态资源的请求时,Nginx直接将这些静态资源响应给客户端,而无需提交给应用服务器处理,这样就减轻了应用服务器的压力。

    (一)扩展名拦截

      1、修改配置文件

    location ~ .*.(css|js|html|png|jpg)$ {
                    root /opt/statics;
            }

      2、创建文件夹

    [root@lcl-aliyun ~]# vi /usr/local/nginx/conf/nginx.conf
    [root@lcl-aliyun ~]# mkdir /opt/statics
    [root@lcl-aliyun ~]# cd /opt/statics/
    [root@lcl-aliyun statics]# mkdir css js html images

      3、上传jpg图片到image文件夹  

          

      4、重启Nginx

    ./nginx -s reload

      5、访问

      

       这里有个问题要说一下,当配置文件有问题时,reload命令并不会真正的使用新的配置文件,而是仍然使用老的配置,当配置检查没问题时,如果reload后还是不生效,可以重启一下试一试。 

    (二)目录名拦截

      1、修改配置文件并重启nginx

    location ~ .*(css|js|html|images).+ {
                    root /opt/static;
            }

      2、访问地址:http://***/images/123.jpg

    (三)页面压缩  

      1、浏览器常见的压缩协议

    压缩协议 说明
    deflate 是一种过时的压缩算法,是huffman编码的一种加强
    gzip 是目前大多数浏览器都支持的一种压缩算法,是对deflate的改进
    sdch 是谷歌开发的一种压缩算法,一种全新的压缩思路,deflate与gzip的压缩思想是,修改传输数据的编码格式以达到减少体量的目的,其最终的传输数据并没有减少,而sdch压缩算法的思想是,让冗余的数据仅出现一次,其最终的传输数据减少了。
    Zopfli 谷歌开发的一种压缩算法,Deflate压缩算法的改进,比标准的gzip-9要小3%-8%,但压缩用时是gzip-9的80多倍。
    br 即Brotli,谷歌开发的一种压缩算法,是一种全新的数据格式,与Zopfli相比,压缩率能够降低20%-26%,Brotli-1有着与Gzip-9相近的压缩比和更快的压缩解压速度。

      2、常用设置

        gzip  on;          #开启gzip压缩,默认为off
        gzip_min_length 5k;    #指定最小启用压缩的文件大小
        gzip_comp_level 4;     #指定压缩级别,取值为1-9,数字越大,压缩比越高,但压缩所用时间越长,默认为1,建议使用4
        gzip_buffers 4 16k;    #4表示的是缓存颗粒数量,而16k表示的是缓存颗粒大小。
        gzip_vary on;        #开启动态压缩,默认为off
        gzip_types text/html text/css test/xml application/x-javascriptg;          #通过MIME类型来指定要压缩的文件类型,默认值为text/html
    
        server {
            listen       80;

      说明,新版不需要配置text/html,因为zgip默认就会对该格式进行压缩。

    二、反向代理

      通过在location{}中添加代理proxy_pass可以指定当前Nginx所要代理的真正服务器。

    location /api/ {
             proxy_pass       http://192.168.31.31:8080;
        }

      其相关配置内容如下:

        client_max_body_size 100k;       Nginx允许客户端请求的单文件最大大小,单为是字节。

        cllient_body_buffer_size 80k;        Nginx为客户端请求设置的缓存大小。

        proxy_buffering on;                     开启从后端被代理服务器的响应内容缓冲区,默认为on

          proxy_buffers 4 8k;                        该指令用于设置缓冲区的数量与大小,从被代理的后端服务器取的的响应内容会缓存到这里

                  proxy_busy_buffers_size 16k;       高负荷下缓存大小,其默认值一般为单个proxy_buffers的2倍。

                  proxy_connect_timeout 60s;          Nginx跟后端服务器连接超时时间,默认为60秒。

                  proxy_read_timeout 60s;               Nginx发出请求后等待后端服务器响应的最长时限,默认60秒。

    三、负载均衡

      1、负载均衡简述

        硬件负载使用F5、Array、深信服、梭子鱼等,软件可以使用LVS、HAProxy、Nginx等。

        负载均衡在生产应用层面分为两类:七层负载均衡和四层负载均衡,同时,为四层负载均衡提供更为底层实现的,还有三层负载和两层负载

          七层负载均衡:应用层,基于HTTP协议,通过虚拟URL将请求分配到真实服务器,一般用于B/S架构,Nginx就是七层负载均衡。

          四层负载均衡:传输层,基于TCP协议,通过 ”虚拟IP + 端口号“将请求分配到真实的服务器。 一般用于C/S架构系统,例如LVS、F5、Nginx Plus都属于四层负载均衡。

          三层负载均衡:网络层,基于IP协议,通过虚拟IP将请求分配到真实服务器。

          二层负载均衡:链路层,基于虚拟MAC地址将请求分配到真是服务器。

      2、负载均衡配置

        主要是在location中使用proxy_pass进行配置,然后使用upstream进行配置负载均衡。

        upstream lcldemo {
            192.168.1.105:8080 weight=1;
            192.168.1.106:8080 weight=1;
            192.168.1.107:8080 weight=1;
        }
    
        server {
    .......
            location /lcl/nginx {
                    proxy_pass http://lcldemo/;
            }

      3、负载均衡策略

        Nginx内置了三种负载均衡策略:轮询、ip哈希、最小连接数。另外,其还支持第三方的负载均衡。

        根据负载策略的不同,又可以设置很多性能相关的属性。

        (1)轮询

          轮询是默认的负载均衡策略,其是按照各个主机的权重比例依次进行请求分配的。

        upstream lcldemo {
            192.168.1.105:8080 weight=2 fail_timeout=20 max_fail=3;
            192.168.1.106:8080 weight=1 fail_timeout=20 max_fail=3;
            192.168.1.107:8080 backup;
            192.168.1.108:8080 down;
        }

          backup:表示当前服务器为备用服务器

          down:表示当前服务器已停机

          fail_timeout:表示当前主机被Nginx认定为停机的最长失联时间,默认为10秒,常与max_fails使用。

          max_fails:表示 在fail_timeout时间内最多允许的失败次数。

         (2)ip_hash

          指定负载均衡基于客户端IP的分配方式。

        upstream lcldemo {
            ip_hash;
            192.168.1.105:8080 weight=2 fail_timeout=20 max_fail=3;
            192.168.1.106:8080 weight=1 fail_timeout=20 max_fail=3;
            192.168.1.107:8080 weight=2 fail_timeout=20 max_fail=3;
            192.168.1.108:8080 weight=1 fail_timeout=20 max_fail=3;
        }

          使用ip_hash直接指定负载均衡策略,对于该种策略需要注意以下几点:

            a、在nginx1.3.1之前,该策略不能指定weight属性

            b、该策略不能与backup同时使用

            c、此策略适合有状态的服务,例如session

            d、当有服务器宕机,必须手动指定down属性,否则请求仍然会落到该服务器。

          (3)least_conn

          把请求转发给连接数最少的服务器。

        upstream lcldemo {
            least_conn;
            192.168.1.105:8080 weight=2 fail_timeout=20 max_fail=3;
            192.168.1.106:8080 weight=1 fail_timeout=20 max_fail=3;
            192.168.1.107:8080 backup;
            192.168.1.108:8080 down;
        }

      4、Nginx Plux的四层负载均衡实现

        同样是修改nginx配置文件,添加一个stream模块,其与events、http等模块同级,在其中配置upstream{}与server{}模块,此时需要注意,通行代理配置在server{}中(原来的是配置在server模块的location中),且不能再是http://开头的了,因为其负载均衡协议不再是http协议了。

    stream {
        upstream app {
            server 192.168.1.103:8080;
            server 192.168.1.104:8080;
            server 192.168.1.105:8080;
        }
    
        server {
            listen 8080;
            proxy_pass app;
        }
    
    }

    四、动静分离

      动静分离主要就是让html、css、图片等内容直接走nginx,数据走tomcat。

      首先,配置两台静态资源nginx服务器(192.168.1.111,192.168.1.222),配置文件名拦截访问规则,然后在/opt/static文件夹中放入静态资源

           location ~ .*.(css|js|html|png|jpg)$ {
                   root /opt/static;
           }

      然后配置负载均衡服务器

        upstream lcldemo {
            192.168.1.105:8080 weight=1;
            192.168.1.106:8080 weight=1;
            192.168.1.107:8080 weight=1;
        }
    
        server {
    .......
           location ~ .*.(css|js|html|png|jpg)$ {
                   proxy_pass lcldemo;
           }

    五、虚拟主机

      可以直接修改nginx配置

         upstream www.lcl.com {
            server 192.168.1.101:8080 weight=1;
            server 192.168.1.102:8080 weight=1;
         }
    
         upstream bj.lcl.com {
            server 192.168.1.201:8080 weight=1;
            server 192.168.1.202:8080 weight=1;
         }
    
         upstream sh.lcl.com {
            server 192.168.1.301:8080 weight=1;
            server 192.168.1.302:8080 weight=1;
         }
    
    
         server {
            listen 80;
            servaer_name www.lcl.com;
            location / {
                 proxy_pass http://www.lcl.com;
            }
         }
    
    
         server {
            listen 80;
            servaer_name bj.lcl.com;
            location / {
                 proxy_pass http://www.bj.lcl.com;
            }
         }
    
    
         server {
            listen 80;
            servaer_name www.sh.lcl.com;
            location / {
                 proxy_pass http://www.sh.lcl.com;
            }
         }

      也可以将该配置单独写一个配置文件,然后在nginx配置文件中引入

    include /usr/local/nginx/conf/vhosts.conf
    ------------------------------------------------------------------
    -----------------------------------------------------------
    ---------------------------------------------
    朦胧的夜 留笔~~
  • 相关阅读:
    linux 统计文件行数的命令效率
    使用mysqldump导入不成功解决方法
    shell中获取当前目录
    shell读取文档中的命令并执行
    读取文件,文件内容包含空格Tab和回车提取想要的数据
    ls命令中的--time-style使用
    Vmware中网卡未启用,安装系统后再启用网卡,eth0如何设置
    lvm逻辑卷扩展方法
    linux小技巧 一
    解决ARCGIS10.2与VS2013不兼容
  • 原文地址:https://www.cnblogs.com/liconglong/p/14501439.html
Copyright © 2020-2023  润新知