nginx referer限制

语法: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版本以后可以在名称中使用“*”通配符。

举例:

阅读全文

在启动自定义服务的时候,希望使用8370端口,却发现端口已经被nginx或node占用了,无法启动。但是lvs又已经申请了,改端口的话比较麻烦。所以可以修改下 /proc/sys/net/ipv4/ip_local_port_range 参数,使tcp协议分配的端口从一个比较大的范围开始启用,这样,node或nginx就不会占用较小的端口了。

阅读全文

最近的谈谈项目使用了部分lua,用于一些请求量超高的请求,在nginx层面挡回去,省的调用大量php进程。

由于以前没用过lua,开发过程中遇到了一些小技能点,记录一下。

1.lua字符串分割函数

2.使用lua的reids 的 批量获取方法。 比如:hmget

先将所有的field整合到一个Table, 比如: field_table里。

阅读全文

nginx if判断 and 使用

360图片搜索遇到这么一个场景,pc端的搜索结果页和频道列表页,在移动端访问时,检测到是移动版的ua,会自动跳转到对应的移动端结果页或频道列表页。

现在,pc端新上了一个频道,服饰频道,但是移动端还没开发。当在移动端访问pc版的服饰频道页时,会跳转到移动端的频道页,但是没有服饰频道,所以跳转到了默认的美女频道,体验不好。

所以,就需要做一个处理,当发现是服饰频道时,不跳转,保持pc端的展示。

之前的nginx配置是判断ua后,就决定是否跳转。

现在需要对频道页判断,而由于频道页是通过参数传入,而不是在path里边,所以使用rewrite规则无法解决。

其实就可以使用$request_uri判断就可以了。本来是打算在if里通过 and 或者 && 解决,结果发现不支持。

查了资料后,发现一个方便实现的方法,通过两次判断,设置变量的形式。

如下:

阅读全文

还是360指数项目,需要用到Query归一化,但是公司内只有c++版本的,数据分析的同事用的都是那个二进制可执行文件来处理,但是我们前端又不可能跑system()方法吧,太不安全了,所以要来了源代码,打算封装成一个php扩展。

下边就讲一下我的封装过程。

首先,要到了Query归一化的C++版本源代码。

引用第三方的类库有两种方法,一种是静态引用,一种是动态引用,推荐使用静态引用,因为静态引用的情况下,会把类库打包到php的扩展.SO文件中,这样我们不必担心依赖关系,带着类库到处跑了。

阅读全文

最近在搞360指数项目,挑战还是比较多的,现在项目已经基本ok了,拿出点时间来总结一下。 首先说说存储,需求的数据量比较大,又有一些弱关系的查询需求,首先放弃的就是mysql和redis,然后跟DBA沟通了下,使用mongoDB似乎是个不错的选择,在开动了之后才发现,数据量比预估的还要大,DBA的SSD资源不足以支持我们的项目,我们就自己搞了一台有4个2Tsas盘的机器,DBA在上边搞了24个分片,很轻易的,我们就把磁盘IO搞满了,数据写的速度慢的要死,在ssd上有1-2w/s的速度,在sas盘上,就只有几百了,数据量实在太大,需要录入一直到去年年初的指数数据,如果要想在上线前把数据录入完成,这样下去是不可能了。 随后我们又搞了两台给Hadoop集群使用的机器,每台机器有12块SCSI硬盘,看起来些写性能应该能翻个几番,但其实,部署完了之后,才发现,写入速度也才刚能达到1-2k,距离我们的需求还差的很远。 其实,我们要求的也只是数据的初始化速度要快一些,上线之后,这样的写性能也足以支持我们把增量数据录入,所以,我们还可以通过借一些ssd硬盘来加快写入速度,然后把数据对拷到scsi硬盘,这样,数据初始化的问题就可以解决了。本来已经从其它部门的同事那里借到了25块ssd,不过在跟他们进一步沟通之后,发现公司有可以提供线上服务的Hbase集群,虽然在存储选型初期也想过Hbase,由于当时对Hbase了解较少,也不知道有可以提供线上服务的集群,就这么错过了,与系统部的同事沟通后,我们数据量最大的两块数据,是可以迁移到Hbase使用的,这块数据占到我们总数据的90%,这部分数据通过Hbase解决后,其它数据再使用Mongodb就毫无压力了。最终,我们的最大数据部分的需求,通过合理使用Hbase的column_qualifier和version得以解决。而且单纯存入这批数据的map/reduce时间,仅仅使用了17分钟。 这里还要感谢一下DBA和系统部的同事,在好几个夜晚帮我们部署环境,解答疑问,使我们的项目得以顺利前进。 … 嗯,,,项目中还用到了一个自己封装的php扩展,单独写个文章介绍下吧。

阅读全文

作者的图片

DigDeeply

Technology Stack: Golang/PHP/Openresty, and so on…

Web Development Engineer

Beijing China