Linux学习总结(四十二)lnmp访问控制篇

1 nginx 配置防盗链

防盗链的原理我们在lamp中已经有介绍,这里不再重复,直接看配置过程。
核心语句为

  valid_referers none blocked server_names  *.test.com ;
    if ($invalid_referer) {
        return 403;
    }

当然我们要将其放在location里面,结合之前的缓存有效期配置,就形成如下结构

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
     {
          expires      7d;    //针对上面匹配的文件,设置缓存时间为7天
          valid_referers none blocked server_names  *.test.com ;   //指定有效的referer
          if ($invalid_referer) {
                 return 403;        //  如果是无效的referer,则禁止访问,返回403
          }
          access_log off;     //针对以上location匹配的文件不记录访问日志
    }     

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
curl -x127.0.0.1:80 -I -e "http://www.baidu.com/1.txt" test.com/2.jpg

curl -x127.0.0.1:80 -I -e "http://test.com/1.txt" test.com/2.jpg

2 访问控制

需求一,针对admin目录做一个访问限制,只允许本机127.0.0.1访问,拒绝其他所有ip。配置如下

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

我们先来看下他的逻辑,在apache中,有一个 order ,会定义deny和allow的一个先后执行顺序,而且每条规则都会去匹配。比如针对当前这个需求配置时这样的

 <Directory /data/wwwroot/www.123.com/admin/>
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </Directory>

若果将上面改为Order allow,deny 则会deny 所有,allow 语句失效。在nginx 里面从上往下只要匹配到规则就结束。第一条规则匹配到就不会去匹配第二条规则。

curl -x127.0.0.1:80 test.com/admin/index.html
curl -x192.168.226.130:80 test.com/admin/index.html


其中 192.168.226.130 是本机ens33 网卡ip
如果只限制个别ip 访问则可以写成

location /admin/
{
    deny 192.168.226.130;
 }

默认是允许所有的。不需要写allow all 了
也可以匹配正则限制

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

这样就拒绝请求了upload或者image目录下的php文件
备注:该段配置要加在解析php的配置前面,否则不能限制解析php

限制指定use_agent的域名访问,匹配符~后面的*可以忽略大小写匹配

if ($http_user_agent ~* ‘Spider/3.0|YoudaoBot|Tomato‘)
{
      return 403;
}
curl -x127.0.0.1:80 test.com -A "spider/3.0"


意思是限制一些爬虫,或者有道机器人,或者tomato相关的访问。就是可以有针对性的限制某些访问。

3 解析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;
    }

fastcgi_pass unix:/tmp/php-fcgi.sock; 该行指定监听php-fpm的socket,可以是ip加端口的形式,写法要和php-fpm配置文件保持一致。对应行为 listen = /tmp/php-fcgi.sock。配置文件为 /usr/local/php-fpm/etc/php-fpm.conf,我们安装php时有指定配置文件路径。
fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;该行中的
/data/wwwroot/test.com 要跟虚拟主机保持一致
vim /data/wwwroot/test.com/2.php
写入一下内容

<?php
echo "a really php script";
?>

执行-s reload 后curl 测试
curl -x127.0.0.1:80 test.com/2.php

4 nginx 代理

代理服务器:
通常说的代理就是正向代理,正向代理的过程隐藏了真实的客户端,服务端不知道真实的客户端是谁,×××服务器,就是正向代理。反向代理代理的是服务端,隐藏了真实的服务端。
正向代理中,proxy和client同属一个LAN
反向代理中,proxy和server同属一个LAN

编辑一个新的虚拟主机

vim /usr/local/nginx/conf/vhost/proxy.conf
 server
{
    listen 80;
    server_name proxybaidu.com; //本地代理服务器器域名

    location /
    {
        proxy_pass      http://61.135.169.125/;  //被代理的服务器ip
        proxy_set_header Host www.baidu.com; //指定被代理的服务器域名
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
crul -x127.0.0.1:80 proxybaidu.com


我们发现通过本地内网访问到了百度首页。为了理解代理,特意将代理服务器域名重命名了下,通常代理服务器域名会写的和提供网站资源的服务器域名一样,这样对于客户端来说就不会去区分,省去很多麻烦。百度这个ip 我们通过ping www.baidu.com 来获取。
总结:上面实验就是一个反向代理。怎么理解反响代理隐藏服务端,代理服务器和真实服务端处于同一子网呢?该实验我将proxybaidu.com更改为baidu.com,然后在windos 主机上设置本地dns ,再去访问百度,完全看不出来是从我的虚拟机web中取的数据,因此隐藏了服务端。那么为什么说我的虚拟机web 和百度处于同一子网呢,回答这个问题之前,我先说下很关键的一点,就是我们所说的服务器和客户端,局域网和公网,或者同一子网都是相对意义上的概念,单独讨论没有意义。-x127.0.0.1:80 就是指定本地私网,对于该回环地址来说,因为我们的虚拟机 nat 到了主机所处的公网里,所以从整体上看来我们的虚拟机web 和百度是处于同一子网的。

原文地址:http://blog.51cto.com/12606610/2108638

时间: 2024-10-30 08:53:52

Linux学习总结(四十二)lnmp访问控制篇的相关文章

【Unity 3D】学习笔记四十二:粒子特效

粒子特效 粒子特效的原理是将若干粒子无规则的组合在一起,来模拟火焰,爆炸,水滴,雾气等效果.要使用粒子特效首先要创建,在hierarchy视图中点击create--particle system即可 粒子发射器 粒子发射器是用于设定粒子的发射属性,比如说粒子的大小,数量和速度等.在创建完粒子对象后,在右侧inspector视图中便可以看到所有的粒子属性: emit:是否是使用粒子发射器. min size:粒子最小尺寸. max size:粒子最大尺寸. min energy:粒子的最小生命周期

linux学习笔记-第二十二课-LNMP环境搭建(一)

一.LNMP环境搭建前的准备 LNMP就是Linux系统下Nginx+MySQL+PHP这种网站服务器架构,所以需要下载mysql,php,与nginx这三套软件. MySQL : 32位 :http://syslab.comsenz.com/downloads/linux/mysql-5.1.40-linux-i686-icc-glibc23.tar.gz 64位 :http://syslab.comsenz.com/downloads/linux/mysql-5.1.40-linux-x86

javaweb学习总结(四十二)——Filter(过滤器)学习

一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过F

Linux学习笔记(十二)--命令学习(用户创建、删除等)

通过上面的几章学习,我们对linux有了一些了解,现在我们再继续进行下去.... 我们习惯的windows 界面系统中,只要在界面里去下鼠标,填写等这些就可以完成了一个用户创建.删除.添加所属组等,那我们在linux里又是怎么操作的呢??? 下面在学习如何使用命令进行一系列的操作时,我们要先了解一些别的: 在linux系统里除了我们要新建的用户外,还有一些特定的用户,我们称呼它为:伪用户. -----------------------------------------------------

JAVA学习第四十二课 — 泛型(二)—泛型接口&amp;&amp;通配符应用

一.泛型接口 interface Inter<T>{ public void show(T t); } class InterImple implements Inter<String>{//知道是字符串类型 public void show(String str){ System.out.println("show "+str); } } class InterImple_2<Q> implements Inter<Q>{//不知道是什

linux学习笔记-第十二课-Shell脚本之正则表达式(一)

一.grep,egrep,fgrep 1)grep 格式:grep [选项] [模式] [文件名] 常用选项:-n:显示行号和匹配的行 -v:反向匹配 -c:不显示匹配的行,只显示匹配的行数 -i:忽略大小写 -r:递归搜索 -E:支持扩展正则表达式 -P:支持Perl正则表达式 -F:不支持正则表达式,将模式按字面意义匹配 示例: grep示例 说明 grep '\<Tom>\' file 显示包含单词Tom的行 grep 'Tom Jerry' file 显示包含'Tom Jerry'的行

Linux学习之CentOS(十二)----认识ext文件系统(转)

认识ext文件系统 硬盘组成与分割 文件系统特性 Linux 的 EXT2 文件系统(inode) 与目录树的关系 EXT2/EXT3 文件的存取与日志式文件系统的功能 Linux 文件系统的运行 挂载点的意义 其他 Linux 支持的文件系统与 VFS 认识 EXT2 文件系统 Linux最传统的磁盘文件系统(filesystem)使用的是EXT2这个啦!所以要了解文件系统就得要由认识EXT2开始! 而文件系统是创建在硬盘上面的,因此我们得了解硬盘的物理组成才行,所以底下只会很快的复习这两部份

Linux学习之CentOS(十二)------磁盘的分区、格式化、挂载(转)

磁盘分区.格式化.挂载磁盘分区    新增分区    查询分区    删除分区磁盘格式化    mkfs    mke2fs磁盘挂载与卸载    mount    umount 磁盘的分区.格式化.挂载 对于一个系统管理者( root )而言,磁盘的的管理是相当重要的一环,尤其近来硬盘已经渐渐的被当成是消耗品了 ..... 如果我们想要在系统里面新增一颗硬盘时,应该有哪些动作需要做的呢: 对磁盘进行分区,以创建可用的 partition : 对该 partition 进行格式化( format

salesforce 零基础学习(四十二)简单文件上传下载

项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文件上传到Document对象中. 一.文件上传功能 apex代码 1 public with sharing class FileUploadUsedTransientController { 2 3 public transient Blob fileUploadBody{get;set;} 4

Linux学习笔记(十二)usermod、passwd、mkpasswd

一.usermod修改用户信息 usermod -u   111   username   #修改用户 usermod -g   grp2 username      #修改用户组 usermod -d  /home/chinantfy2     username  #修改用户家目录 usermod -s  /sbin/nologin   username  #修改用户shell 一个用户可以属于多个组,但是gid只有一个 id  username可以查看用户uid与gid和所属组 usermo