网站运维、系统运维管理研究

用accesskey模块实现Nginx服务器深度防盗链

防盗链是很多下载类网站必须做的工作,各个网站会采取不同的策略来实现这一功能,各有优缺点。下面介绍一下Linux主机Nginx服务器下利用 accesskey模块实现Nginx服务器深度防盗链的方法。比起常用的通过判断referer的方法,其防盗链能力更加强劲,就算迅雷什么的也没有办法对付。

一、如何为nginx安装accesskey模块
首先下载Nginx-accesskey模块:http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz
#tar zxvj nginx-accesskey-2.0.3.tar.gz
比如说这时候文件解压到/usr/src/nginx-accesskey-2.0.3
修改其目录下的config文件
#vi ./config
将”$HTTP_ACCESSKEY_MODULE”替换成”ngx_http_accesskey_module”

杀死nginx进程
#kill `cat /usr/local/nginx/nginx.pid`
来到nginx的源代码目录下面 /usr/src/nginx-0.7.54,重新编译nginx
#cd /usr/src/nginx-0.7.54/
#./configure –add-module=/usr/src/nginx-accesskey-2.0.3
(注意:其他nginx编译参数请按照自己的需要添加,这里省略未写)
#make && make install 继续阅读 »

利用Nginx 自动在父文件夹中建立子文件夹以指向子域名

今天在逛nginx wiki时才发现原来nginx 自带了这个功能

这是一个添加子域名(或是当DNS已指向服务器时添加一个新域名)的简单方法。需要注意的是,我已经将FCGI配置进该文件了。如果你只想使服务器为静态文件服务,可以直接将FCGI配置信息注释掉,然后将默认主页文件变成index.html。

这个简单的方法比起为每一个域名建立一个 vhost.conf 配置文件来讲,只需要在现有的配置文件中增加如下内容:

 # Replace this port with the right one for your requirements
 # 根据你的需求改变此端口
 listen       80;  #could also be 1.2.3.4:80 也可以是1.2.3.4:80的形式
 # Multiple hostnames seperated by spaces.  Replace these as well.
 # 多个主机名可以用空格隔开,当然这个信息也是需要按照你的需求而改变的。
 server_name  star.yourdomain.com *.yourdomain.com www.*.yourdomain.com;
 #Alternately: _ *
 #或者可以使用:_ * (具体内容参见本维基其他页面)
 root /PATH/TO/WEBROOT/$host;
 error_page  404              http://yourdomain.com/errors/404.html;
 access_log  logs/star.yourdomain.com.access.log;
 location / {
 root   /PATH/TO/WEBROOT/$host/;
 index  index.php;
 }

继续阅读 »

Nginx 中设置本机资源不存在时到另外一台服务器获取

一个资源下载站,架构是使用LVS调度后端1组机器,这样可以分流带宽压力

1组几十台服务器当然不可能一台一台的去上传了,于是就做成上传到一台,其他服务器使用rsync定期从这台同步资源

最近接到需求方的需求:使用同步机制,当资源上传完在同步的过程中,或者说同步失败时,资源下载就会失败,如何避免这种情况发生

经过调研后确定了两种方法:

1、404错误转向

因为后端都使用nginx,所以在nginx里设置当遇到文件找不到404时自动跳到源机器上,当然这样是要求做一个指向源服务器的单独域名

该方法测试通过,已正式部署实施

在Nginx的Server中添加404自动转向的代码:

               error_page 404  http://dl2.sj.91.com$request_uri;

2、使用反代方式:

做个rewrite,如果404,那么利用nginx的反代功能到后端获取资源,该方法只在头脑中,还没有测试和使用,后面若经过测试,会把添加方法加上来

 

 

nginx 502 bad gateway 错误的原因及几个可能性

NGINX 502 Bad Gateway错误是FastCGI有问题,造成NGINX 502错误的可能性比较多。将网上找到的一些和502 Bad Gateway错误有关的问题和排查方法列一下,先从FastCGI配置入手:

1.FastCGI进程是否已经启动

2.FastCGI worker进程数是否不够
运行 netstat -anpo | grep “php-cgi” | wc -l 判断是否接近FastCGI进程,接近配置文件中设置的数值,表明worker进程数设置太少
参见:http://blog.s135.com/post/361.htm

3.FastCGI执行时间过长
根据实际情况调高以下参数值
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
继续阅读 »

2009/08/07WEB服务器

没有评论
101 views

Nginx realip_module 模块 = Apache mod_rpaf

Apache 有个第三方开发的 mod_rpaf ,用于当 Apache 置于 proxy 后端的时候接收到前端送来的 IP head

从而获取到真实的IP. 不然日志跟应用都始终只能获取到 反向代理服务端的IP

详细请看:http://www.oschina.net/discuss/thread/675

简单说就是,Nginx –> Apache 能获取到用户访问的真实IP .

但如果反过来,又或者是 Squid –> Nginx 呢?

有这么一情况,某网站静态文件很多,而且用户访问的来源有网通,有电信,有铁通…设置还有国外。

为了令处于不同网络运营商的用户收取静态文件的速度都有良好的体现,该网站分别在这些不同运营商的积分中部署了Squid,然后统一 Proxy 到主站的 Nginx 上,形成分布式缓存架构。

如果单是这样的话,主站上 Nginx 的日志,或者应用所获得的IP来源,始终都只会是各个机房中 Squid 的IP。而不是用户的真实IP。Apache 的话,能通过以上所提到的mod_rpaf解决。当然,强大的 Nginx 也有自己的看家法宝。

继续阅读 »

一次nginx+php 架构维护过程中遇到的问题

公司开发的一套PHP系统,是使用php+nginx的模式

今天早上突然出现 502 bad gateway 的错误

php-fpm.log里的日志是:

Mar 03 13:20:28.269891 [NOTICE] fpm_children_bury(), line 215: child 8778 (pool default) exited with code 0 after 1123.783407 seconds from start
Mar 03 13:20:28.269933 [NOTICE 继续阅读 »

Apache服务器链接数限制配置介绍

Apache服务器链接数限制配置介绍,虚拟主机就是这样,限定某个网站的apache链接数,造成的后果就是、流量大的网站访问速度迅速下降、网络延迟严重……

        prefork几乎还是目前的唯一MPM,我在下面主要还是讨论它的工作原理和相关指令调整。查看缺省生成的httpd.conf配置文件,会发现里面包含如下的配置段:

以下为引用的内容:


StartServers 5
继续阅读 »

64 Centos操作系统PHP编译curl时的问题

在64位操作系统下(CENTOS 5.2)

给PHP编译增加curl参数的时候提示以下错误:
checking for gnutls support in libcurl… no
checking for curl_easy_perform in -lcurl… no
configure: error: There is something wrong. Please check config.log for more information.

检查有没有装curl的devel
yum list | 继续阅读 »

返回顶部