12.13-12.16
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12.13-12.16相关的知识,希望对你有一定的参考价值。
12.13 Nginx防盗链
12.14 Nginx访问控制
12.15 Nginx解析php相关配置
12.16 Nginx代理
12.13 Nginx防盗链
大纲
nginx的防盗链思路和httpd是一样的,配置也不难。
准备工作:
可以把其中不用的功能给注释掉,
把配置静态文件不记录日志的配置给注释掉
插shell
#location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
# {
# expires 7d;
# access_log off;
# }
#location ~ .*\.(js|css)$
# {
# expires 12h;
# access_log off;
# }
本节主题
1 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 ;
if ($invalid_referer) {
return 403;
}
access_log off;
}
2 参数解析,
~*表示(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)里面不区分大小写,利用了正则表达式的语法。
^.+\. ^表示xx开头
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$
整段参数的意思是:以xxxx(括号里面的关键词)结尾。
valid_referers none blocked server_names *.test.com ;
定义白名单的referer是*.test.com
if ($invalid_referer) {
return 403;
}
3 如果不是白名单的referer,就会返回到403
4 检查语法,并重新加载
[[email protected] vhost]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[[email protected] vhost]# /usr/local/nginx/sbin/nginx -s reload
5 curl 测试防盗链
先测试一个正常的curl访问,状态码200
[[email protected] test.com]# curl -x127.0.0.1:80 test.com/1.gif -I
curl -e指定referer测试,状态码403,实验成功,因为当初配置就是要得到403效果。
[[email protected] test.com]# curl -e "http://www.baidu.com " -x127.0.0.1:80 test.com/1.gif -I
12.14 Nginx访问控制
大纲
截图
访问控制是比较重要的一个部分,因为它还涉及到安全。
起原理跟httpd一样,Nginx也可以限制某些IP不能访问,或者只允许某些IP访问。
配置方法和httpd很想,但更加简洁,不像hettpd那样全部遍历一边。
比如我们有个需求,“是访问admin目录的请求只允许127.0.0.1访问,”
1 访问控制的配置如下,
location /admin/
{
allow 127.0.0.1;
deny all;
}
参数解释
在httpd中,利用order去规则allow与deny的顺序,先allow后deny,或者先deny后allow.
但在nginx里,如果参数的ip(127.0.0.1)被匹配到了,那么这个规则就会到此结束。
不会考虑deny与allow的顺序。如果是127.0.0.2访问进来,那么发现ip不被匹配,这样的话,访问会直接被deny,到此结束。
2 检查语法并重新加载
[[email protected] test.com]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[[email protected] test.com]# /usr/local/nginx/sbin/nginx -s reload
访问前的准备工作:
[[email protected] test.com]# mkdir -p /data/wwwroot/test.com/admin/
[[email protected] test.com]# cd /data/wwwroot/test.com/admin/
[[email protected] admin]# echo "admin test" > index.html
3 curl访问测试
利用127.0.0.1测试,状态码200,正常通过访问。
利用172.18.171.157测试访问,状态码403,拒绝访问。
因为172.18.171.157没有被写入白名单中。
访问控制,还可以匹配正则
1 写入如下参数
location ~ .*(upload|image)/.*\.php$
{
deny all;
}
参数解释:
location ~ .*(upload|image)/.*\.php$
只要是匹配upload,image的,以.php结尾的url都给予deny.
写入参数后检查语法与重新加载。
[[email protected] vhost]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[[email protected] vhost]# /usr/local/nginx/sbin/nginx -s reload
演示操作
2 准备工作,
建立upload目录,然后在其下创建1.php文件,echo任意内容1.php
[[email protected] vhost]# mkdir /data/wwwroot/test.com/upload/
[[email protected] vhost]# cd !$
cd /data/wwwroot/test.com/upload/
[[email protected] upload]# echo "1111" > 1.php
3 curl测试
[[email protected] upload]# curl -x127.0.0.1:80 test.com/upload/1.php -I
当然,1.php不能访问是正常的,起到了效果作用了。
下面尝试一下访问没被标住的txt格式。
[[email protected] upload]# curl -x127.0.0.1:80 test.com/upload/1.txt -I
访问通过,因为txt没有被标住,所以没有被限制访问。
可以参看日志内容,更详细的记录。
根据user_agent限制
1 写入如下参数
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')
{
return 403;
}
参数解析,
$http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato'
return 403;
其中~是匹配符号,只要user_agent中含有Spider/3.0或者YoudaoBot或者Tomato字符串,
都会被拒绝访问,并返回403状态码。
这里的return 403跟deny all是一样的效果。
2 检查语法和重新加载
[[email protected] vhost]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[[email protected] vhost]# /usr/local/nginx/sbin/nginx -s reload
3 curl 测试
curl -A 指定user_agent,
[[email protected] vhost]# curl -A "Tomato1111" -x127.0.0.1:80 test.com/upload/1.txt -I
当被比配到相应的字符串后,无论后面带什么字符都是生效了。
如果想匹配不区分大小写,则在~加上*即可(~*),对应参数。
$http_user_agent ~* 'Spider/3.0|YoudaoBot|Tomato'
再利用curl -A 测试
以上是关于12.13-12.16的主要内容,如果未能解决你的问题,请参考以下文章