12.13 Nginx防盗链php
•配置以下,能够和不记录日志和过时时间配置结合起来html
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$nginx
{web
expires 7d;数据库
valid_referers none blocked server_names *.test.com ;vim
#这里定义.test.com为白名单浏览器
if ($invalid_referer) {服务器
return 403;curl
#这里表示若是不在白名单内直接回馈403socket
}
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不能访问,或者只容许一部分访问
须要制做白名单,先allow写ip地址,再把其余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能够访问,实验成功,禁止了abc的php解析
•根据user_agent限制,用的不少
需求:受到cc攻击,要禁掉百度蜘蛛,想作被隐藏的网站
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')
{
return 403;
}
这里~指匹配符号,只要有Spider/3.0或YoudaoBot或Tomato字符串的直接被拒绝,返回403
• deny all和return 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 两种监听格式,可是要保证Nginx和php-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.log中sock地址要写到虚拟主机配置文件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报错问题:
检查虚拟主机配置文件sock和php文件目录定义的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优先级