当前位置: 首页 > news >正文

做家务的男人们在哪个网站播出市场营销与网络营销

做家务的男人们在哪个网站播出,市场营销与网络营销,做安全平台网站,导视设计案例Nginx学习#xff1a;随机索引、真实IP处理与来源处理模块 完成了代理这个大模块的学习#xff0c;我们继续其它 Nginx 中 HTTP 相关的模块学习。今天的内容都比较简单#xff0c;不过最后的来源处理非常有用#xff0c;可以帮我们解决外链问题。另外两个其实大家了解一下就… Nginx学习随机索引、真实IP处理与来源处理模块 完成了代理这个大模块的学习我们继续其它 Nginx 中 HTTP 相关的模块学习。今天的内容都比较简单不过最后的来源处理非常有用可以帮我们解决外链问题。另外两个其实大家了解一下就好。 今天的内容除了第一个随机索引的配置指令只能在 location 下使用外其它的都可以在 http、server、location 中配置。 随机索引 之前学习过的 index 指令还记得吧它是指定某一个具体的文件然后按顺序从前向后匹配。当我们访问一个目录时也就是 URI 以 / 结尾时会按照这个 index 配置的内容去查找文件。而今天我们要学习的则是另一个类似的指令只不过它是随机在目录中拿出一个文件来当做默认页索引。 这个模块的命名是 ngx_http_random_index_module 用于处理以斜杠字符/结尾的请求并在目录中选择一个随机文件作为索引文件。该模块在 ngx_http_index_module 模块之前处理也就是说它的优先级会比 index 高同时存在的话会走 random_index 。 这个模块不是包含在 Nginx 核心源码中的需要在编译的时候单独安装直接加上 --with-http_random_index_module 就可以了。它只有一个配置指令。 random_index 在指定位置启用或禁用模块处理。 random_index on | off; 只能配置在 location 模块下默认值为 off 。 测试很简单我们就这样简单配置一个就好了。 location /randomindex/ {alias html/;random_index on; } 然后访问 /randomindex/ 地址会发现每次刷新返回的页面都不一样。 真实IP处理 上篇文章中我们在代理模块的最后其它部分讲了 proxy_set_header 的一个非常重要的作用就是用于处理获取客户端真实 IP 的功能。同时也简单说了下在 PHP 框架中都是怎么处理那两个请求头的。而今天我们再看一个通过 Nginx 来处理真实 IP 或者换句话说让 Nginx 根据配置从 X-Real-IP 或 X-Forwarded-For 从获取到真实 IP 并放入到 REMOTE_ADDR 中。 这个模块的全称是 ngx_http_realip_module 模块它也不是在 Nginx 核心源码中的同样需要在编译时加上 --with-http_realip_module 这个参数作用就是用于将客户端地址和可选端口更改为在指定头字段中发送的那些。这个模块主要作用于被代理服务器上也就是后端服务器上。 我们先来看看它的配置指令后面再综合进行一下测试。 set_real_ip_from 定义已知发送正确替换地址的可信地址。 set_real_ip_from address | CIDR | unix:; 没有默认值如果指定了特殊值 unix:则所有 UNIX 域套接字都将被信任。也可以使用主机名 (1.13.1) 指定可信地址。从版本 1.3.0 和 1.2.1 开始支持 IPv6 地址。 这个就是上篇文章中 TP6 源码里需要配置的那个 $proxyServerIp 的作用。之前也说过了那两个头是可以伪造的因此需要核对代理服务器的 IP 是否和我们设置的相同相当于是一个白名单。这个配置指令可以配置多个就像 TP 或者 Laravel 中会配置成数组一样。我们有可能会有多个代理代理到同一个后端服务器因此就可能有多个可信任的代理服务器。 real_ip_header 定义请求头字段其值将用于替换客户端地址。 real_ip_header field | X-Real-IP | X-Forwarded-For | proxy_protocol; 默认值是 X-Real-IP 包含可选端口的请求头字段值也用于替换客户端端口1.11.0。应根据 RFC 3986 指定地址和端口。proxy_protocol 参数 (1.5.12) 将客户端地址更改为来自 PROXY 协议标头的地址。 PROXY 协议必须事先通过在 listen 指令中设置 proxy_protocol 参数来启用。 就是根据哪个请求头参数来获取在 Nginx 中通过指定的获取到了之后会直接修改 REMOTE_ADDR 头的信息。 real_ip_recursive 递归搜索真实 IP 。 real_ip_recursive on | off; 默认值是 off 。如果禁用递归搜索则与受信任地址之一匹配的原始客户端地址 REMOTE_ADDR 将替换为由 real_ip_header 指令定义的请求标头字段中发送的最后一个地址。如果启用递归搜索则与其中一个受信任地址匹配的原始客户端地址将替换为请求标头字段中发送的最后一个非受信任地址。 变量 这个模块中包含两个变量。 $realip_remote_addr 保留原始客户端地址1.9.7$realip_remote_port 保留原始客户端端口1.11.0 真实IP测试 由于它是作用在被代理服务器上的同时也为了测试效果的明显我们在另一台虚机机 192.168.56.89 上新建一个 location 。 location ^~ /realip/ {alias html/;real_ip_recursive on;set_real_ip_from 192.168.56.88;#real_ip_header X-Forwarded-For;fastcgi_pass   unix:/var/sock/php-fpm/www.sock;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $request_filename;include         fastcgi_params; } 暂时先不用打开 real_ip_header 的注释默认情况下使用的就是 X-Real-IP 。我们先看看它的效果。先在 192.168.56.88 上做一个反向代理。 location ^~ /realip/ {proxy_pass http://192.168.56.89/realip/;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 直接本机电脑上测试会看到 89 上的 PHP 打印的 $_SERVER 里面REMOTE_ADDR 变成了真实的 IP 192.168.56.1 而如果没有 set_real_ip_from 的配置则会显示 192.168.56.88 。 接下来我们看看 X-Forwarded-For 效果的测试这个在上篇文章中就简单说过它会通过 $proxy_add_x_forwarded_for 变量不停累加记录代理经过的主机 IP 。当时没有细说今天咱们就来看看到底是啥意思。 要测试这个我们需要多层代理的效果最简单的方式就是直接在客户端加上之前已经配置过的正向代理。这样就会经过一层正向、一层反向最终到达 89 的目标地址。 先直接在有正向代理的情况下直接访问会发现 REMOTE_ADDR 又变成了 192.168.56.88 。注意正向代理那里也要加上 proxy_set_header 。但即使加上了最终的 REMOTE_ADDR 通过 X-Real-IP 取舍还是会出问题。对于多层代理可以使用 X-Forwarded-For 它代表历史 IP 记录但可能伪造。因此在上篇文章中如果你深入的看了 TP6 或者 Laravel 的源码就会发现它们在使用 X-Forwarded-For 或 X-Real-IP 时会验证 IP 格式。 然后仔细查看 $_SERVER 会发现根据打印出来的内容X-Forwarded-For 会显示这样的结果。 [HTTP_X_FORWARDED_FOR]  192.168.56.1, 192.168.56.88 也就是说客户端的真实 IP 在第一个。我们可以直接修改配置也就是将上面注释的 real_ip_header 部分打开。 再次测试REMOTE_ADDR 又会显示正常的真实客户端 IP 192.168.56.1 了。 这下理解为啥 Laravel 直接就是使用 X-Forwarded-For 做为默认的真实 IP 获取头了吧。这个对于多层代理来说更准确一些。 但是一般来说不太会使用这个 Nginx 的真实IP模块来处理主要是因为需要独立编译安装另一个就是这一块的 IP 获取在动态语言中进行也没什么问题。还有一个最主要的原因就是现在框架都自带了完全没必要再手动来配了毕竟 Nginx 的配置灵活性还是差些。 来源处理 最后来看到的就是今天比较重要的内容来源处理。为啥说它重要呢因为它可以帮我们解决一个大问题那就是防盗链。对于这个概念可能有些同学都知道因为云存储已经帮我们解决这个问题了。而如果是自己的小网站或者是外包的小项目可能不会去购买类似的云存储服务就需要有类似的机制节约成本。 一般来说我们访问图片、视频、js/css 这些静态资源文件直接通过 URL 就可以访问。同样的如果有别的网站爬取了你的文章也可以直接就使用这些资源。但问题是这些资源是在我们的服务器上走我们自己的流量带宽的直接给别人用了这可是资源的极大浪费啊。 一种方案是图片这种加水印给你用了你也得帮我做宣传。另一种就是不让用要么打不开要么显示另外一个错误图片。第二种就是防盗链。一般这种都是通过请求头中的 Referer 字段来处理的这个字段的作用就是标明发起请求的来源是谁。比如我们自己的网站带的图片之类的资源当它们发起请求时浏览器就会带上 Referer 头内容就是当前加载图片资源的网址。对于静态资源来说一般我们不会通过 PHP 之类的动态语言来加载因此这一块更多的时候还是在 Nginx 或 Apache 上进行配置。 Nginx 中处理这个的就是 ngx_http_referer_module 模块它用于阻止对“Referer”标头字段中具有无效值的请求的访问。需要注意的是使用适当的“Referer”字段值来制作请求非常容易因此该模块的预期目的不是彻底阻止此类请求而是阻止常规浏览器发送的大量请求。还应该考虑到即使对于有效请求常规浏览器也可能不会发送“Referer”字段。 这个模块是包含在 Nginx 核心源码中的不需要额外的编译安装。它的指令就三个还有一个变量主要核心的就只有一个指令然后配合变量就可以实现来源判断。我们先看指令和变量的说明最后再演示。 referer_hash_bucket_size 设置有效引用者哈希表的桶大小。 referer_hash_bucket_size size; 默认值 64 一般不需要设置。 referer_hash_max_size 设置有效引用者哈希表的最大大小。 referer_hash_max_size size; 默认值 2048 一般不需要设置。 valid_referers 指定将导致嵌入的 $invalid_referer 变量设置为空字符串的“Referer”请求标头字段值。 valid_referers none | blocked | server_names | string ...; 如果匹配到了变量将设置为“1”。搜索匹配不区分大小写。参数值包括 none 请求标头中缺少“Referer”字段就是没有 Referer 头就不处理保持为空blocked “Referer”字段存在于请求标头中但其值已被防火墙或代理服务器删除或者此类值是不以“http://”或“https://”开头的字符串server_names “Referer”请求标头字段包含服务器名称之一就是按照当前 Server 模块中的 server_name 来匹配arbitrary string 定义服务器名称和可选的 URI 前缀服务器名称的开头或结尾可以有一个“*”检查时“Referer”字段中的服务器端口被忽略只能前后加 * 比如 *.zyblog.com.cn 或者 www.zybloc.*或者 *.zyblog.*regular expression 第一个符号应该是“~”。需要注意的是表达式将与“http://”或“https://”之后的文本匹配 变量 $invalid_referer 默认空字符串如果“Referer”请求头字段值没有被匹配上设置为“1” 注意啊注意啊默认是空匹配上了也是空没有匹配上才变成 1 是反过来的。从名字意思也能看出来 invalid 表示无效的意思。valid 表示有效的意思valid_referers 表示有效的请求头参数有效的话就不改变这个无效变量的值无效的话才会将这个无效变量设置为 1 。 Referer 测试 上面的介绍看懂没没懂也没关系咱们直接来测试。先写一个 location 然后加上 valid_referers 的配置。 //http log_format validreferers invalid_referer$invalid_referer;// server server{………………location /referer/ {alias html/;access_log logs/32.log validreferers;valid_referers www.zyblog.com.cn *.zyblog.net ~\.testzy.*\.com$;if ($invalid_referer) {return 404;}} } 什么意思呢意思就是 来源域名是 www.zyblog.com.cn来源域名是任意开头的但必须符合 .zyblog.net 规则的如 aaa.zyblog.net、bbb.zyblog.net来源域名中包含 .testzy. 并且以及 .com 结尾的如 aaa.testzy.bbb.ccc.com、ddd.eee.testzy.com 符号上述三条规则的 Referer 请求头字段不会改变 $invalid_referer 的值保持为空而如果没匹配上就将 $invalid_referer 设置为 1 。然后下面 if 判断 $invalid_referer 是否为空如果不为空返回 404 如果为空就不处理正常显示。 再次强调$invalid_referer 代表无效的意思因此 if 条件是直接判断不用取反。 好了我们测试一下直接访问加上请求头。 curl -v --request GET http://192.168.56.88/referer/ --header Referer: http://www.zyblog.com.cn 这个访问的结果是正常的。 …………HTTP/1.1 200 OK ………… 在日志中也能看到 $invalid_referer 的值是空的。 invalid_referer 然后我们稍改一下让它失败。 curl -v --request GET http://192.168.56.88/referer/ --header Referer: http://abc.zyblog.com.cn 返回的响应中状态码就变成了 404 。 …………HTTP/1.1 404 Not Found ………… 接下来我们测试第二个规则的效果。 curl -v --request GET http://192.168.56.88/referer/ --header Referer: http://abc.zyblog.net 结果正常直接再测试第三个规则。 curl -v --request GET http://192.168.56.88/referer/ --header Referer: http://vvvv.testzy.oooo.dddd.com 然后大家就自己随便玩吧任意修改 Referer 字段看看返回的结果是 200 还是 404 。 异常拦截的请求因为直接 return 了所以 access_log 中没有记录到日志大家可以把 return 注释掉查看日志中失败的请求变量的变化情况。 invalid_referer1 接下来我们再测试下 none 的效果。 valid_referers  none www.zyblog.com.cn *.zyblog.net ~\.testzy.*\.com$; 直接访问不出意外的话也是可以正常返回 200 的。 curl -v --request GET http://192.168.56.88/referer/ 最后再测试一下 blocked 效果。它可以让我们的 Referer 中不用添加协议 也就是 http:// 之类的内容。 valid_referers none blocked www.zyblog.com.cn *.zyblog.net ~\.testzy.*\.com$; 这些参数是可以叠加使用的。 curl -v --request GET http://192.168.56.88/referer/ --header Referer: vvvv.testzy.oooo.dddd.com 最后还有个 server_names 它代表的是当前 Server 模块下的 server_name 配置的内容大家可以自己试下哦。 宝塔面板防盗链 现在比较流行的工具 宝塔面板 上可以直接配置防盗链的设置只需要填写一些简单的规则就可以了。 别忘了勾上下面的启用防盗链后面那个空HTTP_REFERER请求就是 none 的作用。我们勾选完成后生成的配置文件中就会有这样的一段代码。 #SECURITY-START 防盗链配置 location ~ .*\.(jpg|jpeg|gif|png|js|css)$ {expires      30d;access_log /dev/null;valid_referers roadmap.zyblog.com.cn;if ($invalid_referer){return 404;} } #SECURITY-END 试试直接使用链接访问我这个网站上的静态文件比如 https://roadmap.zyblog.com.cn/resources/scripts/jquery-3.2.1.min.js 这个 jquery 文件看是不是会返回 404 错误。 如果要像像微信公众号文章里的图片一样显示一个版权图片的话要么直接 return 301 要么直接 rewrite 一个图片路径就好啦。 if ($invalid_referer) {#return 301 /img/1.jpeg;rewrite ^/ /img/1.jpeg; } 很多云服务上的防盗链也需要有这些配置主要就是文件后缀名和允许的域名和我们在 Nginx 中的配置没差别。当然它们也都和面板工具一样是图形化操作的方便很多。 总结 今天的内容前两个的出现频率不高但是我们要知道 Nginx 是可以实现这些功能的。而最后一个防盗链的操作其实还是比较常见的但是由于技术的发展大部分公司使用云服务或者直接使用面板工具就不太需要我们自己配了。相信通过今天的学习至少原理你应该明白一些了吧要不就会像我之前一样知道是干嘛也知道要去后台配一下但生成的代码却看不懂也总是担心吊胆的去配。现在放大自己的信心吧有相关的需求咱们直接上。 参考文档 http://nginx.org/en/docs/http/ngx_http_random_index_module.html http://nginx.org/en/docs/http/ngx_http_realip_module.html http://nginx.org/en/docs/http/ngx_http_referer_module.html
http://www.pierceye.com/news/235240/

相关文章:

  • 不会代码 怎么做网站兴义网络推广
  • 综合电子商务型企业网站怎么做网站的网盘
  • ucenter使用自己做的网站房地产新闻时事热点
  • 企业网站备案 过户电商运营视频教程
  • 做网站运营这工作怎么样北京网站优化价格
  • 河南专业网站建设网站怎么做高权重
  • 国内大型电子网站建设做网站时怎么透明化
  • 微应用和微网站的区别手机网站开发的目的
  • 网站ico开一个网站建设公司好
  • wordpress中文站cn外贸网站怎么换域名
  • 淘宝客怎么做直播网站吗学校网站建设发展概况分析
  • 广州网站外贸推广建筑师必看的16部纪录片
  • 深圳网站建设平台网站右侧浮动广告
  • 中英文网站源码浙江东南网架公司
  • 个人备案网站放什么资料培训
  • html做企业门户网站提供设计的网站
  • 成都三合一网站建设成年s8视频加密线路
  • 做网站购买服务器如何优化网络
  • 企业公司网站 北京怎样用前端知识制作企业网站
  • 精湛的赣州网站建设襄阳哪里有做网站的
  • 拿了网赌代理后怎样做自己的网站河南最新消息今天
  • 北京最大的网站开发公司中山市企业网站seo营销工具
  • 苏州营销型网站建设方案哪些网站做的比较好的
  • 淘宝上买的建设网站能退款吗app怎么查网站备案
  • 电子商务网站开发与设计报告专业网站建设公司兴田德润怎么样
  • 如何建立p2p网站win2003怎么做网站
  • 免费网页设计制作网站建筑公司愿景口号大全
  • 个人可以做网站维护吗专业团队电脑壁纸
  • 东营专业网站建设公司排行鞍山市人力资源招聘信息网
  • 郑州网站建设蝶动小公司使用的网站开发