• 0814防盗链访问控制代理


    12.13 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 ;

    #这里定义.test.com为白名单

        if ($invalid_referer) {

            return 403;

    #这里表示如果不在白名单内直接回馈403

        }

        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不能访问,或者只允许一部分访问

    需要制作白名单,先allowip地址,再把其他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可以访问,实验成功,禁止了abcphp解析

     

    根据user_agent限制,用的很多

    需求:受到cc攻击,要禁掉百度蜘蛛,想做被隐藏的网站

    if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')

    {

          return 403;

    }

    这里~指匹配符号,只要有Spider/3.0YoudaoBotTomato字符串的直接被拒绝,返回403

    • deny allreturn 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 两种监听格式,但是要保证Nginxphp-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.logsock地址要写到虚拟主机配置文件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报错问题:

    检查虚拟主机配置文件sockphp文件目录定义的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优先级 

  • 相关阅读:
    js-快速选择日期区间
    关于状态更新时间字段取值的问题
    MySql 前缀索引
    Java springMVC 多数据源的实现和使用
    哈哈哈,终于找到一个安稳的“家”了
    POJ 1724: Roads
    POJ 1221: UNIMODAL PALINDROMIC DECOMPOSITIONS
    createjs 用户画线 粗细bug Graphics setStrokeStyle() 粗细BUG
    GAudio是一个音频播放SDK
    新做的一个基于OPENGL的gui库
  • 原文地址:https://www.cnblogs.com/0329linux/p/7371389.html
Copyright © 2020-2023  润新知