前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解Nginx的功能策略配置

详解Nginx的功能策略配置

作者头像
星哥玩云
发布2022-06-30 19:25:30
4990
发布2022-06-30 19:25:30
举报
文章被收录于专栏:开源部署

负载均衡(做分发服器) 1、基于浏览器的分发 基于浏览器的分发,按照在不同平台的浏览器请求进行分发,比如手机浏览器讲究资源小速度快节省流量,所以将自手机浏览器的请求分发到专供处理移动平台的web服务器上,而在PC上浏览网页注重体验,所以将来自IE浏览器的请求分发到专供处理PC平台的服务器上,这样可以使在不同平台的用户都能得到适合自己的体验! 添加多个upstream vim /usr/local/nginx/conf/nginx.con

upstream    web { ip_hash; server 192.168.1.10 } upstream    apache { ip_hash; server 192.168.1.11 }

在定义server的时进行location规则判断

server{ listen        80; server_name  192.168.1.100;  (分发主机) location/ { if( $http_user_agent ~* Elinks ) { proxy_pass http://web; #来自Elinks浏览器的请求,交给web来处理              } if( $http_user_agent ~* Mozilla ) { proxy_pass http://apache; #来自Mozilla类型的浏览器的请求,交给apache处理,IE和火狐都属于Mozilla }    } }

2、基于开发语言的分发 这里开发语言环境的部署,祥看我这篇文章“http://cuimk.blog.51cto.com/6649029/1335770” 常见开发语言的后缀aspaspx php jsp html,为了将不同语言开发的程序交给特定的语言环境来执行,同样可以实现Nginx的location规则来实现 同样定义server时进行location规则判断 location~* \.php$ { proxy_pass http://192.168.1.250; #访问php结尾的,分发到250 }                      location ~* \.jsp$ { proxy_pass http://192.168.1.251;  #访问jsp结尾的,分发到251 } location / { root html index index.html;    #访问其他的,请求本机 }

3、基于源地址的分发 像联通移动的网站,进去之后可以看到,你所进入的页面是你所在城市的页面,里面的信息很多是你当地退出的一些活动,这就是他们根绝你的IP地址来得知你当前所在位置,然后将请求分发到对应的服务器所实现的。 首先Nginx需要geoip模块,故编译添加 1 ./configure–with-http_geoip_module

首先定义多个upstream

upstream bj.server{ ip_hash; server 192.168.1.251  #定义bj的IP访问的服务器 } upstream sh.server { ip_hash; server192.168.1.251  #定义sh的IP访问的服务器 } upstream default.server { ip_hash; server 192.168.1.100  #定义其他地区访问的服务器 }

定义一个IP库

geo$geo { default default; 192.168.18.0/24bj; 192.168.17.0/24sh;  #定义bj和sh的IP段 }

在server里添加loscation规则

123 location/ { proxy_pass http://$geo.server$request_uri }

这样会对不同的IP匹配IP库,看其属于哪个地区,然后在有针对性的将请求分发

4、基本IP轮询分发 配置十分简单,以两台RS做实验 将RS定义在一个upstream内

vim /usr/local/nginx/conf/nginx.conf

upstream web { ip_hash; server      192.168.18.250;  server      192.168.18.251;  #两台RS }

在定义server的时候来指定其访问的模块,有多台机器的会默认轮询访问,当然可以自定义访问权重。

server { listen        80;          #监听80端口 server_name  localhost;    #域名 location/ { proxy_pass http://web;      #协议,模块名 } }

我在定义upstream的时候都添加了一句“ip_hash;”这里是算法,使用ip哈希的算法,让来自同一台的清楚只交给后端同一台RS来处理. 配置限速 限速也是通过location规则实现的

首先需要在http里指定最大带宽(比如说是10M)

limit_zoneone $binary_remote_addr    10M;

然后在server添加location规则

location/ { root              html; index              index.html index.htm; limit_rate        10k;        #限速多少 limit_rate_after  100k;      #下载多少的时候开始限速 limit_connone 2;              #同一IP同时只能下载两个 }

防盗链配置

防盗链原理也是通过location规则实现的 1、指定文件的防盗链

location~*.(gif|jpg|png|swf|flv)$  {      #针对哪些文件格式进行防盗链                                root/usr/local/nginx/html; valid_referersnone blocked baidu.com;  #只允许baidu连接 if($invalid_referer) {  rewrite ^/ http://www.linuxidc.com/retrun.html; #盗链访问重定向到的地址  #return 403; } }

第一行:gif|jpg|png|swf|flv 表示对gif、jpg、png、swf、flv后缀的文件实行防盗链 第二行: 表示对www.88181.com这2个来路进行判断 if{}里面内容的意思是,如果来路不是指定来路就跳转到http://www.linuxidc.com/retrun.html页面,当然直接返回403也是可以的。

2、针对目录防止盗链

12345 location /images/{ alias/data/images/; valid_referers none blocked server_names *.xok.la xok.la ; if($invalid_referer) {return403;} }

3. 通过ngx_http_accesskey_module模块实现防盗链,比较少用 实现方法如下: 1. 下载NginxHttpAccessKeyModule模块文件:Nginx-accesskey-2.0.3.tar.gz; 2. 解压此文件后,找到nginx-accesskey-2.0.3下的config文件。编辑此文件:替换其中的”$HTTP_ACCESSKEY_MODULE”为”ngx_http_accesskey_module”; 3. 用一下参数重新编译nginx: ./configure --add-module=path/to/nginx-accesskey 4. 修改nginx的conf文件,添加以下几行: location /download {  accesskey            on;  accesskey_hashmethod  md5;  accesskey_arg        "key";  accesskey_signature  "mypass$remote_addr"; } 其中: accesskey为模块开关; accesskey_hashmethod为加密方式MD5或者SHA-1; accesskey_arg为url中的关键字参数; accesskey_signature为加密值,此处为mypass和访问IP构成的字符串。

访问测试脚本download.php: <? $ipkey= md5("mypass".$_SERVER['REMOTE_ADDR']); $output_add_key="<a href=http://www.linuxidc.com/download/G3200507120520LM.rar?key=".$ipkey.">download_add_key</a><br />"; $output_org_url="<a href=http://www.linuxidc.com/download/G3200507120520LM.rar>download_org_path</a><br />"; echo $output_add_key; echo $output_org_url; ?> 访问第一个download_add_key链接可以正常下载,第二个链接download_org_path会返回403 Forbidden错误。

他的运行方式是:如我的download 目录下有一个 file.zip 的文件。对应的URI 是http://www.linuxidc.com/download/file.zip 使用ngx_http_accesskey_module 模块后http://www.linuxidc.com/download/file.zip?key=09093abeac094. 只有给定的key值正确了,才能够下载download目录下的file.zip。而且 key 值是根据用户的IP有关的,这样就可以避免被盗链了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档