十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理
12.13 Nginx防盗链
1.打开默认虚拟主机配置文件
将上节课定义的东西注释掉,然后插入如下内容
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;
}
第一行有一个匹配星号表示后面正则括号里的内容不区分大小写,这一行的意思是请求结果是gif等结尾的
第二行意思:过期时间7天
意思是:访问日志不记录
防盗链是如下部分:
第一行定一个域名白名单。
第二行第三行意思是:如果域名不是白名单里的,那么就会403
2.然后我们保存、检查错误、重新加载,然后测试。
12.14 Nginx访问控制
有比较重要的内容不想被别人访问就可以做一个白名单,只能自己或者指定的ip才能访问。
1.
在如下位置插入内容,(allow后面的是白名单,deny all表示其他的ip全部deny掉,禁止访问)
location /admin/
{
allow 192.168.133.1;
allow 127.0.0.1;
deny all;
}
在apache先allowe和先deny是不一样的,但是在nginx是没有顺序这一说的,但是它有一个特点和apache是不一样的,在apache一个如上图的127ip访问过来,是先allow匹配上了之后还会继续向下然后就又被deny了,但是在nginx里第一条匹配上了之后就直接停止了。
2.保存、-t检查错误、重新加载。
然后我们做一下测试吧。
然后我们新建一个网卡,然后获取ip,在测试一下
如上是针对目录的,我们还可以针对正则匹配文件
禁止解析php
1.
在里面插入如下内容
location ~ .*(abc|image)/.*\.php$
{
deny all;
}
然后我们保存、-t检查错误、重新加载,之后做一下测试。
下面我们再来看一下根据user_agent限制(不让蜘蛛爬到)
在如下图加入红框里的内容
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')
{
return 403;
}
然后我们保存、-t检查错误、重新加载,之后做一下测试。
模拟user_agent访问
想要user_agent忽略大小写就在如下位置加一个星号。
12.15 Nginx解析php相关配置
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;
}
1.把如上代码粘贴到虚拟主机配置文件里,-t检查错误、重新加载
然后在里面写入如下内容
如果这里地址写错会502
出现502的时候可以查看一下错误日志
这里的地址其实就是里如下位置的地址
如上图你如果把监听改成ip加端口(就是把白底的一行加上井号,下面一行去掉井号),那么虚拟主机配置文件里也要改如下图
然后重新加载php-fpm和nginx(php-fpm支持reload),然后可以看一下端口:
然后在访问就没问题了。
还有一个地方
如上两个地方也是要对应的。
12.16 Nginx代理
我们新建一个主机配置文件:
server
{
listen 80;
server_name ask.apelearn.com;
location /
{
proxy_pass http://121.201.9.155/;
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,因为它是一个代理服务器,不需要访问本地服务器上的任何文件。
定义域名
真正的web服务器地址
告诉nginx要访问的是域名是什么,这里$指的是
下面的两行是指定ip以及remote addr和proxy add等
然后我们-t检查错误、重新加载,之后来测试一下吧。(我们访问的文件是robots.txt 一般网站都会有)
如下图 通过本地的ip可以访问到远程的站点,如果没有配置代理服务器是不行的。