码迷,mamicode.com
首页 > 其他好文 > 详细

0814防盗链访问控制代理

时间:2017-08-16 09:51:50      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:问题   pass   格式   中国   turn   src   com   目录   bz2   

12.13 Nginx防盗链

?配置如下,可以和不记录日志和过期时间配置结合起来

location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$

{

    expires 7d;

    valid_referers none blocked server_names  *.test.com ;

#这里定义.test.com为白名单

    if ($invalid_referer) {

        return 403;

#这里表示如果不在白名单内直接回馈403

    }

    access_log off;

}

 

/usr/local/nginx/sbin/nginx -t

/usr/local/nginx/sbin/nginx -s reload

curl -I -e "http://www.baidu.com/1.txt" -x127.0.0.1:80  test.com/1.gif  显示403

curl -I -e "http://www.test.com/1.txt" -x127.0.0.1:80  test.com/1.gif     显示200

 技术分享

说明配置成功

 

12.14 Nginx访问控制

限制某些ip不能访问,或者只允许一部分访问

需要制作白名单,先allowip地址,再把其他ip全部限制deny all

配置如下:

location /admin/

{

    allow 192.168.153.130;

    allow 127.0.0.1;

    deny all;

}

 技术分享

创建location指定的目录

? mkdir /data/wwwroot/test.com/admin/ (已经有了这个文件夹不用再建了)

? echo “test,test”>/data/wwwroot/test.com/admin/1.html

? -t && -s reload

? curl -x127.0.0.1:80 test.com/admin/1.html -I

? curl -x192.168.204.131:80 test.com/admin/1.html -I 这两个ip都可以访问到

 

上面配置ip也可以是ip段,就可以写成allow 192.168.153.0/24

 

如果只拒绝几个ip的访问就是

location /admin/

{

    deny 192.168.188.1;

    deny 192.168.8.8;

}

 

? 可以匹配正则来限制

网站被黑,数据库被盗窃,没有禁止上传图片的php解析

这样可以把访问的URL中带有abc或者image的字符串,并且为php请求的拒绝访问

location ~ .*(abc|image)/.*\.php$

{

        deny all;

}

 技术分享

测试:

/usr/local/nginx/sbin/nginx -t

/usr/local/nginx/sbin/nginx -s reload

mkdir /data/wwwroot/test.com/abc

echo "111" > /data/wwwroot/test.com/abc/1.php

curl -x127.0.0.1:80 test.com/abc/1.php -I

结果为403拒绝访问

echo "111" > /data/wwwroot/test.com/abc/1.txt

curl -x127.0.0.1:80 test.com/abc/1.php -I

结果200可以访问,实验成功,禁止了abcphp解析

 技术分享

 

?根据user_agent限制,用的很多

需求:受到cc攻击,要禁掉百度蜘蛛,想做被隐藏的网站

if ($http_user_agent ~ ‘Spider/3.0|YoudaoBot|Tomato‘)

{

      return 403;

}

这里~指匹配符号,只要有Spider/3.0YoudaoBotTomato字符串的直接被拒绝,返回403

? deny allreturn 403效果一样

实验:

/usr/local/nginx/sbin/nginx -t

/usr/local/nginx/sbin/nginx -s reload

模拟user_agent的方法:

-A 随意指定自己这次访问所宣称的自己的浏览器信息

curl -A “Tomatoabcabcabc”-x127.0.0.1:80 test.com/abc/1.txt

显示为403拒绝访问

 技术分享

如果关键词大小写有改动就恢复200,需要忽略大小写就~*~后面加*

 

12.15 Nginx解析php相关配置

?vim /usr/local/nginx/conf/vhost/test.com.conf配置如下:

location ~ \.php$

    {

        include fastcgi_params;

        fastcgi_pass unix:/tmp/php-fcgi.sock; (此处错误出现502,找不到sock

        #fastcgi_pass 127.0.0.1:9000

        #fastcgi_pass 两种监听格式,但是要保证Nginxphp-fpm中格式一致

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;

        #这里的地址和最上面的root保持一致

    }

 

? fastcgi_pass 用来指定php-fpm监听的地址或者socket

? php文件目录usr/local/php-fpm/var/php-fpm.logsock地址要写到虚拟主机配置文件fastcgi_pass

不监听sock换成监听ip和端口,两个配置文件修改后保持一致否则502,需要重启

 

netstart -lntp 查看监听端口

测试:

vim /data/wwwroot/test.com/3.php  

写入<?php   phpinfo();

curl -x127.0.0.1:80  test.com/3.php   出现不能解析

配置后再次curl可以解析

 

502报错问题:

检查虚拟主机配置文件sockphp文件目录定义的sock是否一致

 技术分享

修改fastcgi_pass后报错502

nginx错误日志:cat /usr/local/nginx/logs/nginx_error.log

vim /usr/local/php-fpm/etc/php-fpm.conf 查看php文件目录定义的sock

修改为监听ip端口

 技术分享

查看端口是否监听

 技术分享

然后去修改虚拟主机配置文件

 技术分享

两边配置文件修改完成,这时curl -x127.0.0.1:80  test.com/3.php解析成功

 

此外502还有一种可能,php-fpm资源耗尽,查询很慢,解决为优化

 

12.16 Nginx代理

用户需要访问web服务器,需要找一个中间者,中间者与两面都互通,就能做一个代理者

中国到美国很慢,到香港快,香港到美国快,就可以通过香港代理访问美国服务器

 技术分享

创建新的配置文件

该虚拟主机只用作代理服务器,不需要访问本地文件,所以不需要设置站点根目录

? cd /usr/local/nginx/conf/vhost/

? vim proxy.conf //加入如下内容

 

server

{

    listen 80;

    server_name ask.apelearn.com;

 

   location /

    {

        proxy_pass      http://121.201.9.155/;

        #这里是告诉Nginx代理服务器,真正要被访问的web服务器ip是多少

        proxy_set_header Host   $host;

        #Host指的是要访问的域名servername,就是代理服务器真正访问的域名ask.apelearn.com

        proxy_set_header X-Real-IP      $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  }

}

 

代理前后对比

curl -x127.0.0.1:80 ask.apelearn.com/robots.tx

显示为404

/usr/local/nginx/sbin/nginx -t

/usr/local/nginx/sbin/nginx -s reload

curl -x127.0.0.1:80 ask.apelearn.com/robots.txt

显示成功

这里测试是指通过本地ip访问到远程站点,这里设置的代理服务器是虚拟机,web服务器是阿铭论坛

出现代理需求就定义远程服务端,就是web服务器的ip

 

扩展

http://ask.apelearn.com/question/9109502问题汇总 

http://blog.lishiming.net/?p=100location优先级 

0814防盗链访问控制代理

标签:问题   pass   格式   中国   turn   src   com   目录   bz2   

原文地址:http://www.cnblogs.com/0329linux/p/7371389.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!