第十一章 LAMP架构(下)

本文详细介绍了Apache服务器的高级配置技巧,包括防盗链、访问控制、PHP扩展安装等,以及如何通过配置提升网站安全性与性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、配置防盗链
二、访问控制Directory
三、访问控制FilesMatch
四、限定某个目录禁止解析php
五、限制user_agent
六、php相关配置
七、php扩展模块装安
八、扩展

 

一、配置防盗链

盗链,全称是盗取链接,假如我们的网站有很多好看的图片,别人可以查看我们网站图片的链接,然后应用在他的网站上,这样的话,去访问他的网站,实际上消耗的是我们的流量(因为实际链接在我们这里),这样我们就不得不去配置防盗链,使得别人不能复制我们图片的链接。

例如:

防盗链的作用是,我们网站的图片,只能通过我们自己的网站去访问,其他网站借用不行。

意思是我们的网站,被用户上传了很多图片,而用户又在他自己的网站上加上了我们网站图片的链接,就直接能访问了。 

这样可以节省他网站的带宽。 

A:如果网站不允许用户上传图片,那么就不需要配置防盗链了

1.在虚拟主机配置文件/usr/local/apache2/conf/extra/httpd-vhosts.conf中添加配置

  <Directory /data/wwwroot/111.com>
        SetEnvIfNoCase Referer "http://111.com" local_ref   //设置referer白名单
        SetEnvIfNoCase Referer "http://aaa.com" local_ref
        #SetEnvIfNoCase Referer "^$" local_ref  //空referer
        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">   //这些访问不设置白名单,做防盗链
            Order Allow,Deny  //定义防盗链控制顺序 
            Allow from env=local_ref
        </filesmatch>
    </Directory>

2. 测试配置文件及重载

3. 浏览器验证

3.1 空referer上面我们注释掉了,所以打开是403,错误

3.2 取消配置文件中空referer的注释,空referer设为白名单,可以访问

3.3 我们把图片链接添加到博客上,通过博客访问(结果:不能访问)

3.4 把博客的访问referer添加到白名单,可以访问

4. 命令行里验证

//curl -e参数 模拟refer 为http://www.baidu.com,refer必须以http://开头

 

二、访问控制Directory

有时候为了安全需要,要对网站的某些目录限制访问的来源IP。可以通过对目录的控制来实现。

1.修改虚拟主机配置文件/usr/local/apache2/conf/extra/httpd-vhosts.conf

[root@Linux01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
//增加如下内容

    <Directory /data/wwwroot/111.com/admin/>    //admin  后台
        Order deny,allow                  //Order确定执行顺序,整个语句都会执行一遍,与iptables的执行过程不同 //如果先deny,后allow,则会先执行deny的操作,再执行允许的动作。后面的动作会覆盖前面的操作 //如果先allow,后deny all,则最后的结果会是deny
        Deny from all
        Allow from 127.0.0.1    //只允许127.0.0.1通过
    </Directory>

2. 创建后台admin目录,并在目录下创建1.php文件

3. 测试配置文件及重载

4. 验证 

4.1 命令行验证

4.2 浏览器访问

因为111.com解析地址为192.168.239.135,是不被允许通过的IP,所以也是访问不了的

 

三、访问控制FilesMatch

访问控制除了可以对整个目录进行控制,还可以针对具体的页面进行控制。

如限制111.com下的admin.php后带任意字符的页面。

1.修改虚拟主机配置文件/usr/local/apache2/conf/extra/httpd-vhosts.conf

[root@Linux01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

//添加filesmatch段的内容

//filesmath不区分大小写,(.*)是正则,表示任意字符

2.  测试配置文件及重载

3. 验证

3.1 浏览器验证

3.2 命令行验证

 

四、限定某个目录禁止解析php

有些目录是存放静态文件的目录,如图片目录,本身不需要允许php的解析。如果没有注意,允许了php解析,而且又开放了该目录的文件上传权限。很可能被别有用心的人利用上传木马,导致服务器被攻破。除了开发人员在程序开发过程中要注意安全的设计,也可以通过apache限制某些目录的php解析。

1.修改虚拟主机配置文件/usr/local/apache2/conf/extra/httpd-vhosts.conf

[root@Linux01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

//添加

<Directory /data/wwwroot/111.com/upload> //添加此段内容限制upload目录的php解析权限
        php_admin_flag engine off
        <FilesMatch (.*)\.php(.*)>  //这部分是禁止访问PHP源代码。如果只是禁止解析,可不加
        Order allow,deny
        Deny from all
       </FilesMatch>
    </Directory>

2.  测试配置文件及重载

3. 创建upload目录,并在目录下写入一个php文件(复制也行)

4.验证

4.1 浏览器验证

4.2 命令行验证

4.3 注释掉限制PHP源代码部分.

结果:

浏览器访问情况下,也仅仅是限制php解析,不过会把php源代码下载下来:

5.总结,最好禁止访问PHP源代码。

 

 

五、限制user_agent

有时候网站可能会遭受CC攻击,这可以通过限制user_agent来减小攻击压力。

CC攻击(Distributed HTTP flood,分布式HTTP洪水攻击)
CC攻击是DDoS攻击的一种类型,使用代理服务器向受害服务器发送大量貌似合法的请求(通常使用HTTP GET)。CC(Challenge Collapsar,挑战黑洞)根据其工具命名,攻击者创造性地使用代理机制,利用众多广泛可用的免费代理服务器发动DDoS攻击。许多免费代理服务器支持匿名模式,这使追踪变得非常困难。

1.修改虚拟主机配置文件/usr/local/apache2/conf/extra/httpd-vhosts.conf

[root@Linux01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

//增加以下配置,限制curl,baidu.com代理的访问 

<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
        RewriteRule  .*  -  [F]
    </IfModule>

2.  测试配置文件及重载

3. 验证

//以curl代理访问,403错误被禁止,说明限制成功

//baidu.com的代理也被限制,403禁止访问

//以不受限代理访问,可以正常访问;

-A 自定义指定user_agent;

-e 指定referer

 

六、php相关配置

1.查看php配置文件:

[root@Linux01 111.com]# /usr/local/php/bin/php -i | grep -i "loaded configuration file"

通过-i选项查出来的配置文件有时候可能不准。最准确的是在网站根目录下建立一个phpinfo()函数的页面来查看。

以111.com为例:

1.1 //新建该页面

1.2 从浏览器访问

可以看到正确的php配置文件所在路径。

 

2. 设置时区参数(date.timezone)

进入配置文件:

[root@Linux01 111.com]# vim /usr/local/php/etc/php.ini
//时区需要定义,修改时区为亚洲/上海

3. 禁用特殊函数

进入配置文件:

[root@Linux01 111.com]# vim /usr/local/php/etc/php.ini

//将不常用特殊函数添加到此处进行限制,可以被一些木马利用。生产场景phpinfo()函数也会被禁用,避免泄露信息

禁用后不能访问,用浏览器访问会显示错误信息(但是会把页面路径显示出来,不安全):

4. 显示错误信息

进入配置文件:

[root@Linux01 111.com]# vim /usr/local/php/etc/php.ini

//修改为on会显示错误信息,改为Off,浏览器上会显示白页,命令行下显示200状态码,但是没有任何输出:

5.生产环境中不应显示错误信息在页面上。但是如果仅显示白页,就无法追踪错误。所以可以配置错误日志来记录相应的错误。

进入配置文件:

[root@Linux01 111.com]# vim /usr/local/php/etc/php.ini

//开启错误日志记录功能

//设置错误日志保存的位置

//定义日志级别,可以定义日志信息的内容。级别高,只会记录级别高的事件,如果级别低,记录的事件就会比较多。 //默认会记录所有的错误,但是不会记录通知和一般性的警告。

..

再访问111.com/index.php

/tmp下已经生成php_errors.log

查看错误错误日志,错误日志文件中已生成日志记录:

[root@Linux01 php-5.6.32]# cat /tmp/php_errors.log 

6.open_basedir隔离虚拟主机目录。 它的作用就是把php限定在指定的目录下面,不让它去别的目录读写文件

6.1 可以php.ini进行全局配置。但是无法细化。所以不推荐。

6.1.1 [root@Linux01 php-5.6.32]# vim /usr/local/php/etc/php.ini

6.1.2 重载

6.1.3 测试(错误代码500)

6.1.4 查看错误日志信息

[root@Linux01 php-5.6.32]# cat /tmp/php_errors.log 

//访问页面并不在允许的目录下

6.1.5 把目录更改过来

6.1.6 重载、测试

 

6.2 也可以在虚拟主机配置文件/usr/local/apache2/conf/extra/httpd-vhosts.conf针对每个虚拟主机来设置隔离。推荐此种方式。

注:在虚拟主机里配置 open_basedir ,如果这个虚拟主机站点目录被攻入,那么这个站点下的其他文件或目录同样有被破坏的风险。如果有多个站点,由于open_basedir 的目录不同,那么其他站点还是安全的。

6.2.1 [root@Linux01 php-5.6.32]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

6.2.2 重载、测试

 

 

七、php扩展模块安装

有时候php安装编译完成后,这时候发现缺少了一个模块,但又不想重新编译php模块,可以使用扩展模块编译。

1.查看模块

[root@Linux01 111.com]# /usr/local/php/bin/php -m 

以redis包为例

1.下载redis软件包

2.解压软件包

3.切换到phpredis-develop目录.

[root@Linux01 src]# cd phpredis-develop/

4.编译

//生成配置文件,比较特殊,默认的包没有.configure文件,需要用phpize生成

[root@Linux01 phpredis-develop]#  ./configure --with-php-config=/usr/local/php/bin/php-config


//编译安装

[root@Linux01 phpredis-develop]# make && make install

//编译完成后,根据提示,可以看到共享的扩展已经安装到了 /usr/local/php/lib/php/extensions/no-debug-zts-20131226/目录

5.配置加载扩展模块

5.1 [root@Linux01 phpredis-develop]# ls /usr/local/php/lib/php/extensions/no-debug-zts-20131226/
查看这个目录,我们需要的redis模块已经有了,但是是.so文件,拓展模块不支持

5.2 usr/local/php/bin/php -i |grep extension_dir //查看扩展模块存放目录,我 们可以在php.ini中去自定义该路径 

5.3 //编译php.ini

[root@Linux01 phpredis-develop]# vim /usr/local/php/etc/php.ini
//在文件最后添加(或者找到类似的配置,加在后面) extension = redis.so

5.4 重载、验证

[root@Linux01 phpredis-develop]#  /usr/local/php/bin/php -m | grep redis  //拓展模块安装成功

 

 

八、扩展

扩展
几种限制ip的方法 http://ask.apelearn.com/question/6519
apache 自定义header http://ask.apelearn.com/question/830
apache的keepalive和keepalivetimeout http://ask.apelearn.com/question/556
apache开启压缩 http://ask.apelearn.com/question/5528
apache2.2到2.4配置文件变更 http://ask.apelearn.com/question/7292
apache options参数 http://www.365mini.com/page/apache-options-directive.htm

apache禁止trace或track防止xss http://ask.apelearn.com/question/1045
apache 配置https 支持ssl http://ask.apelearn.com/question/1029
apache rewrite教程 http://coffeelet.blog.163.com/blog/static/13515745320115842755199/ http://www.cnblogs.com/top5/archive/2009/08/12/1544098.html
apache rewrite 出现死循环 http://ask.apelearn.com/question/1043
php错误日志级别参考 http://ask.apelearn.com/question/6973
php开启短标签 http://ask.apelearn.com/question/120
php.ini详解 http://legolas.blog.51cto.com/2682485/493917

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值