12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置 12.16 Nginx代理

12.13 Nginx防盗链

配置如下,可以和上面的配置结合起来

~* 这里的* 代表后面的括号内容不区分大小写

^开头

server_names 可省略

location ~* ^.+\.(ico|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;    //也可以写成  deny all
    }
    access_log off;
}

-t && -s reload

curl -e "http://www,baidu.com/123" -x127.0.0.1:80 -I www.test.com/images/123.png //-e 定义referer 返回403错误

curl -e "http://test2.com/123" -x127.0.0.1:80 -I test.com/images/123.png //返回200 成功

12.14 Nginx访问控制

需求:访问/admin/目录的请求,只允许某几个IP访问,配置如下:

location /admin/
{
    allow 192.168.192.134;
    allow 127.0.0.1;
    deny all;
}

我觉得 location /admin/ 只匹配访问/admin/ 目录时生效, 如果访问的是/admin/xx.php 则不生效(别的ip还是能访问到)

如要admin目录下所有文件都能匹配到规则, 则需用 location ~ /admin/.*

另外, 这个一定要放在解析php那段 前面

nginx并没有顺序一说, 但一旦匹配一条规则, 后面将不再匹配

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.192.134:80 test.com/admin/1.html -I

可以匹配正则 //只要匹配 upload 和 images 下php的, 都deny 掉, 有上传的目录, 禁止解析php, 这个一定要放在解析php那段 前面

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

测试:

/usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload
mkdir /data/wwwroot/test.com/upload
echo "1111" > /data/wwwroot/test.com/upload/1.php
curl -x127.0.0.1:80 www.test.com/upload/1.php -I   //返回403

根据user_agent限制 if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato') // 只要匹配 包含 3个user_agent的, 就会被拒绝, 但要区分大小写, 并不会匹配到 tomato, 如果要忽略大小写, 要写成 ~*

{ return 403; }

deny all和return 403效果一样

/usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload

curl -A "Tomato" -x127.0.0.1:80 www.test.com/upload/1.html -I //返回403

12.15 Nginx解析php相关配置

vim /data/wwwroot/test.com/1.php  //增加如下内容, 并打开网页测试, 并不能做php解析
<?php
phpinfo();
?>

配置如下: //让nginx能解析php

location ~ \.php$
    {

       # include语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中
        include fastcgi_params;
       #  fastcgi_pass 用来指定php-fpm监听的地址或者socket, 可以是本机或者其它
        fastcgi_pass unix:/tmp/php-fcgi.sock;    //写错会报错502错误 , 检查/usr/local/php-fpm/etc/php-fpm.conf 里listen定义的是什么,可改为监听ip和端口
        fastcgi_index index.php;
       # 脚本文件请求的路径
        fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;   //路径要写对, 红色指的是配置文件里的root部分
    }

12.16 Nginx代理

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真正的ip在这里(web服务器ip)
        proxy_set_header Host   $host;               //$host  等于 上面的 server_name
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

测试: /usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload

curl ask.apelearn.com/robots.txt //不用代理 测试访问 成功

curl -x127.0.0.1:80 ask.apelearn.com/robots.txt //指定本机, 也能访问, 正常情况不配置代理, 本地不可能访问到远程的站点, 代理服务器就是配置代理的这个虚拟机, web服务器就是论坛

Nginx代理是在一台代理服务器中自定义一个域名,该域名指向一个或多个IP,然后将用户的请求通过这台代理服务器解析指定的IP所对应的web服务器;

当该域名指向多个IP时,需要使用upstream保证用户可以通过代理服务器正常访问每个IP,即为负载均衡。

转载于:https://my.oschina.net/u/3746773/blog/1634860

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值