十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

12.13 Nginx防盗链

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

1.打开默认虚拟主机配置文件十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

将上节课定义的东西注释掉,然后插入如下内容

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、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;
}

第一行有一个匹配星号表示后面正则括号里的内容不区分大小写,这一行的意思是请求结果是gif等结尾的

第二行意思:过期时间7天

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理意思是:访问日志不记录

防盗链是如下部分:

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

第一行定一个域名白名单。

第二行第三行意思是:如果域名不是白名单里的,那么就会403

2.然后我们保存、检查错误、重新加载,然后测试。

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

12.14 Nginx访问控制

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

有比较重要的内容不想被别人访问就可以做一个白名单,只能自己或者指定的ip才能访问。

1.十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

在如下位置插入内容,(allow后面的是白名单,deny all表示其他的ip全部deny掉,禁止访问)

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

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检查错误、重新加载。

然后我们做一下测试吧。

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

然后我们新建一个网卡,然后获取ip,在测试一下

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

如上是针对目录的,我们还可以针对正则匹配文件

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

禁止解析php

1.十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

在里面插入如下内容

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

location ~ .*(abc|image)/.*\.php$
{
        deny all;
}

然后我们保存、-t检查错误、重新加载,之后做一下测试。

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

下面我们再来看一下根据user_agent限制(不让蜘蛛爬到)

在如下图加入红框里的内容

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')
{
      return 403;
}

然后我们保存、-t检查错误、重新加载,之后做一下测试。

模拟user_agent访问

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

想要user_agent忽略大小写就在如下位置加一个星号。

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

12.15 Nginx解析php相关配置

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

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检查错误、重新加载

然后十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理在里面写入如下内容

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

如果十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理这里地址写错会502

出现502的时候可以查看一下错误日志十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

这里的地址其实就是十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理里如下位置的地址

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

如上图你如果把监听改成ip加端口(就是把白底的一行加上井号,下面一行去掉井号),那么虚拟主机配置文件里也要改如下图

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

然后重新加载php-fpm和nginx(php-fpm支持reload),然后可以看一下端口:

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

然后在访问十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理就没问题了。

还有一个地方

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

如上两个地方也是要对应的。

12.16 Nginx代理

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、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,因为它是一个代理服务器,不需要访问本地服务器上的任何文件。

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理定义域名

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理真正的web服务器地址

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理告诉nginx要访问的是域名是什么,这里$指的是十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

下面的两行是指定ip以及remote addr和proxy add等

然后我们-t检查错误、重新加载,之后来测试一下吧。(我们访问的文件是robots.txt 一般网站都会有)

如下图 通过本地的ip可以访问到远程的站点,如果没有配置代理服务器是不行的。

十二周四次课 2018.01.05 Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理