zoukankan      html  css  js  c++  java
  • 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优先级 

  • 相关阅读:
    Java如何编写自动售票机程序
    install windows service
    redis SERVER INSTALL WINDOWS SERVICE
    上传文件
    This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.
    解决Uploadify上传控件加载导致的GET 404 Not Found问题
    OracleServiceORCL服务不见了怎么办
    Access to the temp directory is denied. Identity 'NT AUTHORITYNETWORK SERVICE' under which XmlSerializer is running does not have sufficient permiss
    MSSQL Server 2008 数据库安装失败
    数据库数据导出成XML文件
  • 原文地址:https://www.cnblogs.com/0329linux/p/7371389.html
Copyright © 2011-2022 走看看