网站运维、系统运维管理研究
标签类目:nginx

用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;
继续阅读 »

Nginx+KeepAlive 高可用性实施

由于需要利用Nginx 在网通做一个电信的反代(动态网页),目前公司所有的站点都在电信,那么Nginx反代就需要做成高可用性,防止单点故障,于是就想到了做HA的强劲软件keepalived,keepalived做LVS健康检测的资料倒是比较多,不过做双机的资料不多,自己看了官方资料,利用VRRP做了双机高可用,特此记录:

1、服务器IP部署:
(1), Master(eth0:58.22.XXX.207/27接外网; eth1:10.2.1.207/8接内网)
(2), Backup(eth0:58.22.XXX.208/27接外网; eth1:10.2.1.208/8接内网)
VIP:58.22.XXX.202
网关:58.22.XXX.192

2、软件下载解压:
wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
tar zxvf keepalived-1.1.15.tar.gz
cd keepalived-1.1.15

3、编译安装
./configure –prefix=/
make
make install

这里需要动态链接库的支持,因为本例是使用Centos,所以可以直接使用yum 安装:
libpopt-dev
libssl-dev

继续阅读 »

Apache & Nginx 一些常用禁止访问等常用配置记录

Apache:

【apache配置禁止访问】
1. 禁止访问某些文件/目录
增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:


Order allow,deny
Deny from all

禁止访问某些指定的目录:(可以用   来进行正则匹配)


Order allow,deny
Deny from all

通过文件匹配来进行禁止,比如禁止所有针对图片的访问:


Order allow,deny
Deny from all

继续阅读 »

Nginx、squid、apache 使用ssl实例

生成证书:

可以使用下面命令可以生成测试用的证书:

openssl req -new -keyout key.pem -nodes -x509 -days 365 -out cert.pem

如果要生成一个证书请求用于申请正式证书请用下面两个命令:
1.生成私钥 openssl genrsa -out key.pem 1024
2.生成待签名证书 openssl req -new -out req.csr -key key.pem

然后将req.csr文件中的内容提交给证书颁发机构。

一、Nginx:

1、编译nginx的时候加上

–with-http_ssl_module

2、站点server配置文件:

server {
listen 443;
server_name ndtest.91linux.cn;
ssl on;
ssl_certificate /usr/local/nginx/conf/cert.pem;
ssl_certificate_key /usr/local/nginx/conf/key.pem;
keepalive_timeout 70;
……
}

继续阅读 »

Nginx的Rewrite设置及示例

Nginx以其良好的并发性能,目前正在逐渐取代Apache成为大家的Web server首选,但是Nginx目前的中文资料很少,需要大家努力贡献。

下面我介绍一下Nginx的Rewrite模块设置及Wordpress和Discuz的示例。Nginx的Rewrite规则比Apache的简单灵活多了,从下面介绍可见一斑。

首先,Nginx可以用if进行条件匹配,语法规则类似C,举例如下:

if ($http_user_agent ~ MSIE) {rewrite ^(.*)$ /msie/$1 break;}

1、正则表达式匹配,其中:

~ 为区分大小写匹配
~* 为不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配

2、文件及目录匹配,其中:

-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行

继续阅读 »

返回顶部