nginx学习第三课——nginx 集群以及跨域、防盗链

本文详细介绍了nginx的集群配置,包括轮询、权重轮询、ip_hash等负载均衡策略,并讲解了如何配置跨域、防盗链以及缓存和压缩,帮助读者深入理解nginx的高级特性。

 

 

负载均衡配置   

nginxupstream目前支持4种方式的分配

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

3、ip_hash

每个请求按访问iphash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

4:down 暂时不参与负载  如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....

首先给大家说下upstream这个配置的,这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法。这里的被代理服务器地址有2中写法。

upstream mysvr { 
      server 192.168.10.121:3333;
      server 192.168.10.122:3333;
    }
 server {
        ....
        location  ~*^.+$ {         
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表         
        }
upstream mysvr { 
      server  http://192.168.10.121:3333;
      server  http://192.168.10.122:3333;
    }
 server {
        ....
        location  ~*^.+$ {         
           proxy_pass  mysvr;  #请求转向mysvr 定义的服务器列表         
        }

1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....

upstream mysvr { 
      server 127.0.0.1:7878; 
      server 192.168.10.121:3333 backup;  #热备     
    }

2、轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB....

upstream mysvr { 
      server 127.0.0.1:7878;
      server 192.168.10.121:3333;       
    }

3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....

 upstream mysvr { 
      server 127.0.0.1:7878 weight=1;
      server 192.168.10.121:3333 weight=2;
}

4、ip_hash:nginx会让相同的客户端ip请求相同的服务器。

upstream mysvr { 
      server 127.0.0.1:7878; 
      server 192.168.10.121:3333;
      ip_hash;
    }

5、如果你对上面4种均衡算法不是很理解,那么麻烦您去看下我上一篇配的图片,可能会更加容易理解点。

到这里你是不是感觉nginx的负载均衡配置特别简单与强大,那么还没完,咱们继续哈,这里扯下蛋。

关于nginx负载均衡配置的几个状态参数讲解。

  • down,表示当前的server暂时不参与负载均衡。

  • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。

  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。

  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

 upstream mysvr { 
      server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
      server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;    
    }

       到这里应该可以说nginx的内置负载均衡算法已经没有货啦。如果你像跟多更深入的了解nginx的负载均衡算法,nginx官方提供一些插件大家可以了解下。

跨域配置

nginx在接收到ajax请求时,会查看origin值,即请求我的网址是谁?

此处使用正则来校验,即:只要是enjoy.com下的网址,都允许访问我

返回信息时,nginx追加header值:access-control-allow-origin = static.enjoy.com(回答浏览器,static域名网址可以访问我)

   

防盗链

目的:

1、让资源只能在我的页面内显示

2、不能单独来取或者下载

流程:

1、chrome以url1首次请求web服务器,得到html页面。

2、chrome再次发起url2资源请求,携带referers = url1。(注意,是url1,不是本次的url2

3nginx校验referers值,决定是否允许访问。

4、下面是nginx校验referers值的过程:

valid_referers:匹配域名白名单,如果不匹配,把内置变量$invalid_referers置为1,进入if块,返回404

缓存

  expires命令:过期时间

   

压缩

带宽资源很贵

---  /html/js/css压缩,/images不压缩

过程:nginx压缩 ----》网络传输 ---》chrome解压(压缩和解压消耗cpu)

1、浏览器携带支持的解压方式

2、浏览器与nginx的交互

nginx配置

   

 

常用

$host:请求中的主机头(Host)字段,如果请求中的主机头不可用或者空,则为处理请求的server名称

$http_HEADER HTTP请求头中的内容,HEADERHTTP请求中的内容转为小写,

  -变为_(破折号变为下划线),例如:$http_user_agent(Uaer-Agent的值)

$remote_addr 客户端的IP地址。

$remote_port 客户端的端口。

$request_method 这个变量是客户端请求的动作,通常为GETPOST。

$request_uri 这个变量等于包含一些客户端请求参数的原始URI

$scheme 所用的协议,比如http或者是https

$server_name 服务器名称。

$server_port 请求到达服务器的端口号。

$server_protocol 请求使用的协议,通常是HTTP/1.0HTTP/1.1。

$uri 请求中的当前URI(不带请求参数,参数位于$args)

 

if语句,常用正则

    

= ,!=

比较的一个变量和字符串。

~~*

与正则表达式匹配的变量,如果这个正则表达式中包

-f,!-f

检查一个文件是否存在。

-d, !-d

检查一个目录是否存在。

-e,!-e

检查一个文件、目录、符号链接是否存在。

-x, !-x

检查一个文件是否可执行。

静态资源: location ~ /rex/.*\.(htm|js|css)$

域名校验:if ( $http_origin ~ http://(.*).enjoy.com)

浏览器校验:if ($http_user_agent ~ Firefox)

 

 

注意点:

   

1、nginx发明人,认为if语句是邪恶的,所以nginx的if语句比较简单。

2、return 404,是指http的状态码

3、valid_referers命令 :作用是校验referers值--来源

         若校验通过,valid_referers=1,则invalid_referers = 0。后续if(invalid_referers){}

4、nginx的压缩和缓存是两个东西。此处缓存只是个通知,告诉浏览器你可以缓存。

5、防盗链,下图是请求资源时,携带的referer = static.enjoy.com。正是当前页面首次加载时的域名

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值