标签:linux
12.13 Nginx防盗链Nginx防盗链
思路与httpd一样,配置也不难,但要与过期时间、不记录日志配置结合起来。
1.配置文件内容
vim /usr/local/nginx/conf/vhost/test.com.conf
增加如下配置: 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; } //如果不是白名单里就返回403 access_log off; }
最终配置如下图:
2.测试语法及重新加载配置
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
3.使用curl测试
测试防盗链,需要增加referer才能正常访问,添加referer加-e 需要使用http://
curl -e "http://www.baidu.com/1.txt" -x127.0.0.1:80 -I test.com/1.gif
curl -e "http://www.test.com/1.txt" -x127.0.0.1:80 -I test.com/1.gif
http://www.baidu.com/1.txt 不匹配 test.com,所以报403
http://www.test.com/1.txt 匹配 test.com ,所以显示200正常
12.14 Nginx访问控制
Nginx访问控制
1. 需求:访问/admin/目录的请求,只允许某几个IP访问,配置如下:
vim /usr/local/nginx/conf/vhost/test.com.conf
增加如下配置:
location /admin/
{
allow 172.16.215.130;
allow 127.0.0.1;
deny all;
}
最终配置如下图:
2.测试语法及重新加载配置
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
3.使用curl测试
解释说明:
在配置httpd的时候,还有一个order,来定义先allow还是先deny,在Nginx里并没有,只要匹配规则就结束了,假如来源IP为172.16.215.130,它就会从上到下逐一去匹配,第一个IP(127.0.0.1)不匹配,第二IP(172.16.111.100)不匹配,直到第三行(all)的时候才匹配到,匹配的这条规则为deny(也就是拒绝访问),所以最终会返回一个403的状态码,测试如下:
curl -e "http://www.baidu.com/1.txt" -x127.0.0.1:80 -I test.com/admin/
curl -x172.16.215.130:80 -I test.com/admin/ //都规则内的IP
curl -x47.97.163.117:80 -I test.com/admin/ //使用规则外的IP返回403,这个阿里的外网IP
4.可以匹配正则,限制目录
vim /usr/local/nginx/conf/vhost/test.com.conf
增加如下内容:
location ~ .*(upload|image)/.*\.php$ //匹配upload或者image目录下的.php文件
{
deny all; //匹配upload或者image目录下的.php文件,都不允许访问
}
最终配置如下:
4.1.测试语法及重新加载配置
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
4.2 使用curl测试
upload目录下的.php文件不能访问,但是除了.php的其他后缀文件就能访问。
mkdir /data/wwwroot/test.com/upload
vim /data/wwwroot/test.com/upload/1.php
vim /data/wwwroot/test.com/upload/1.txt
curl -x127.0.0.1:80 test.com/upload/1.php //测试访问upload目录返回403
curl -x127.0.0.1:80 test.com/upload/1.txt //访问upload目录下的.txt文件正常
cat /tmp/test.com.log //查看访问日志
5.根据user_agent限制
如果你的网站不想被人搜到不会被爬虫,就把那些蜘蛛网封掉,像百度,谷歌等把他们封掉,没有任何网站可以爬到你的数据,相当于网站隐藏一样,除非你告诉它网址。
配置文件如下:
vim /usr/local/nginx/conf/vhost/test.com.conf
增加如下配置: if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato') { return 403; } //deny all和return 403效果一样
最终保存配置如下图:
5.1.测试语法及重新加载配置
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
5.2 使用curl测试,-A 模拟user_agent,
Tomato是在限制的user_agent名单里,所以不能访问,这里是没有忽略大小,如果要忽略大小写,可在if语句的 ~ 后面加上 *,如:if ($http_user_agent ~* ‘Spider/3.0|YoudaoBot|Tomato’)
curl -A "Tomatoalsdkflsd" -x127.0.0.1:80 test.com/upload/1.txt -I //大写开头的user-agent
curl -A "tomatoalsdkflsd" -x127.0.0.1:80 test.com/upload/1.txt -I //小写开头的user-agent
结果是大写开头的Tonmatoxxx 被限制了,但是小写的没有被限制,这个是严格匹配的
5.3不区分大小写,可在if语句的 ~ 后面加上 *
vim /usr/local/nginx/conf/vhost/test.com.conf
if ($http_user_agent ~* 'Spider/3.0|YoudaoBot|Tomato')
{
return 403;
}
配置如下:
测试如下:
curl -A "tomatoalsdkflsd" -x127.0.0.1:80 test.com/upload/1.txt -I
12.15 Nginx解析php相关配置
Nginx解析php相关配置
在LAMP中,PHP是作为httpd的一个模块出现的,只要PHP模块被加载,那么就能解析PHP脚本了,而在LNMP中,PHP是以一个服务(php-fpm)的形式存在的,首先要启动php-fpm服务,然后Nginx再和php-fpm通信。也就是说,处理PHP脚本解析的工作是由php-fpm处理完成后把结果传递给Nginx,Nginx再把结果返回给用户。
1.测试解析,还没增加php解析时先编辑一个php文件,测试是否可以解析php
vi /data/wwwroot/test.com/3.php //添加发下内容
<?php phpinfo(); ?>
curl -x127.0.0.1:80 test.com/3.php
2.修改配置文件
vim /usr/local/nginx/conf/vhost/test.com.conf
增加配置如下: location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name; }
最终配置如下图:
3.测试语法及重新加载配置
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
4. curl 测试解析是否正常
curl -x127.0.0.1:80 test.com/3.php //解析成功
5.如果我们在虚拟主机配置文件中的sock文件出错则解析时会出现502报错
5.1 php-fpm的配置文件中定义.sock文件,及其路径
cat /usr/local/php-fpm/etc/php-fpm.conf
如果出现了502报错,先检查一下虚拟主机中添加解析php 配置内容与php-fpm配置两者的sock文件路径是不是一致的
5.2 如果我们的 /usr/local/php-fpm/etc/php-fpm.conf 配置文件中监听的:
不是: listen = /tmp/php-fcgi.sock
而是 :listen = 127.0.0.1:9000 是这种ip+端口
那么我们在虚拟主机配置文件中解析php配置内容也相应的修改:
12.16 Nginx代理
Nginx代理
一家公司有很多台服务器,为了节省成本,不能为所有服务器都分配公网IP,而如果一个没有公网IP的服务器提供web服务,就可以通过代理来实现
1.进入目录新建一个新的配置文件:
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/; //指定要代理的域名所在的服务器IP,即Web服务器的地址 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } //这里没有root,因为它是代理服务器,不需要访问本地服务器上的任何文件
最终配置如下图:(通过ping显示最新ask.apelearn.com的ip地址)
2.测试语法及重新加载配置
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
3.测试 针对蜘蛛的索引的列表,一般网站都会有这个
curl ask.apelearn.com/robots.txt
3.1通过本地的IP访问了远程的站点,代理服务器就是我们的虚拟机,Web服务器就是我们访问的ask.apelearn.com。
curl -x127.0.0.1:80 ask.apelearn.com/robots.txt
标签:linux
原文地址:http://blog.51cto.com/404006045/2128188