语法:valid_referers [none|blocked|server_names]
使用字段:server, location
这个指令在referer头的基础上为 $invalid_referer 变量赋值,其值为0或1。
可以使用这个指令来实现防盗链功能,如果valid_referers列表中没有Referer头的值, $invalid_referer将被设置为1。
参数可以使如下形式:
none 意为不存在的Referer头(表示空的,也就是直接访问,比如直接在浏览器打开一个图片)
blocked 意为根据防火墙伪装Referer头,如:“Referer: XXXXXXX”。
server_names 为一个或多个服务器的列表,0.5.33版本以后可以在名称中使用“*”通配符。
举例:
最近的谈谈项目使用了部分lua,用于一些请求量超高的请求,在nginx层面挡回去,省的调用大量php进程。
由于以前没用过lua,开发过程中遇到了一些小技能点,记录一下。
1.lua字符串分割函数
2.使用lua的reids 的 批量获取方法。 比如:hmget
先将所有的field整合到一个Table, 比如: field_table里。
360图片搜索遇到这么一个场景,pc端的搜索结果页和频道列表页,在移动端访问时,检测到是移动版的ua,会自动跳转到对应的移动端结果页或频道列表页。
现在,pc端新上了一个频道,服饰频道,但是移动端还没开发。当在移动端访问pc版的服饰频道页时,会跳转到移动端的频道页,但是没有服饰频道,所以跳转到了默认的美女频道,体验不好。
所以,就需要做一个处理,当发现是服饰频道时,不跳转,保持pc端的展示。
之前的nginx配置是判断ua后,就决定是否跳转。
现在需要对频道页判断,而由于频道页是通过参数传入,而不是在path里边,所以使用rewrite规则无法解决。
其实就可以使用$request_uri判断就可以了。本来是打算在if里通过 and 或者 && 解决,结果发现不支持。
查了资料后,发现一个方便实现的方法,通过两次判断,设置变量的形式。
如下: