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

 

posted @ 2021-03-10 21:55  李聪龙  阅读(826)  评论(0编辑  收藏  举报