11.25 配置防盗链
编辑虚拟主机配置文件:
- [root@centos-01inux ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
- <VirtualHost *:80>
- DocumentRoot "/data/wwwroot/111.com"
- ServerName 111.com
- ServerAlias www.example.com
- <Directory /data/wwwroot/111.com>
- SetEnvIfNoCase Referer "http://111.com" local_ref
- SetEnvIfNoCase Referer "http://ask.apelearn.com" local_ref
- SetEnvIfNoCase Referer "^$" local_ref
- # 定义 referer 白名单
- <FilesMatch ".(txt|doc|mp3|zip|rar|jpg|gif|png)">
- Order Allow,Deny
- Allow from env=local_ref
- # 定义规则: 允许变量 local_ref 指定的 referer 访问, 拒绝其他所有访问
- </FilesMatch>
- </Directory>
- ErrorLog "logs/111.com-error_log"
- SetEnvIf Request_URI ".*\.gif$" img
- SetEnvIf Request_URI ".*\.jpg$" img
- SetEnvIf Request_URI ".*\.png$" img
- SetEnvIf Request_URI ".*\.bmp$" img
- SetEnvIf Request_URI ".*\.swf$" img
- SetEnvIf Request_URI ".*\.js$" img
- SetEnvIf Request_URI ".*\.CSS$" img
- CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
- #CustomLog "logs/111.com-access_log" combined env=!img
- </VirtualHost>
检测语法错误并重载:
- [root@centos-01inux ~]# /usr/local/apache2.4/bin/apachectl -t
- Syntax OK
- [root@centos-01inux ~]# /usr/local/apache2.4/bin/apachectl graceful
注: 如果在 referer 白名单中不加 ^#(空 referer), 直接访问指定内容将会被拒绝
curl 命令
curl -e 指定 referer
[root@centos-01inux ~]# curl -e "http://ask.apelearn.com/" -x192.168.8.131:80 111.com/baidu.png -I
11.26 访问控制 Directory
编辑虚拟主机配置文件:
在配置文件加入如下参数:
- [root@centos-01inux admin]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
- <Directory /data/wwwroot/111.com/admin/>
- Order deny,allow
- Deny from all
- Allow from 127.0.0.1
- # 只允许 IP--127.0.0.1 访问 / data/wwwroot/111.com/admin / 目录中的内容
- </Directory>
- [root@centos-01inux admin]# /usr/local/apache2.4/bin/apachectl -t
- Syntax OK
- [root@centos-01inux admin]# /usr/local/apache2.4/bin/apachectl graceful
测试:
- [root@centos-01inux admin]# curl -x127.0.0.1:80 111.com/admin/index.php
- 121212
更换 IP 访问:
- [root@centos-01inux admin]# curl -x192.168.8.131:80 111.com/admin/index.php -I
- HTTP/1.1 403 Forbidden
- Date: Wed, 02 Aug 2017 08:48:49 GMT
- Server: Apache/2.4.27 (Unix) PHP/5.6.30
- Content-Type: text/html; charset=iso-8859-1
- # 报错 (403)!!! 即, 只有指定 IP--127.0.0.1 可以访问该目录
说明: 本节用于设定指定 IP 访问指定目录的权限!
11.27 访问控制 FilesMatch
使用 FilesMatch 参数:
- [root@centos-01inux admin]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
- <Directory /data/wwwroot/111.com>
- <FilesMatch admin.php(.*)>
- Order deny,allow
- Deny from all
- Allow from 127.0.0.1
- </FilesMatch>
- </Directory>
- [root@centos-01inux admin]# /usr/local/apache2.4/bin/apachectl -t
- Syntax OK
- [root@centos-01inux admin]# /usr/local/apache2.4/bin/apachectl graceful
- [root@centos-01inux admin]# curl -x127.0.0.1:80 111.com/admin.php -I
- HTTP/1.1 404 Not Found
- Date: Wed, 02 Aug 2017 09:24:22 GMT
- Server: Apache/2.4.27 (Unix) PHP/5.6.30
- Content-Type: text/html; charset=iso-8859-1
- # 因为访问的文件不存在, 所以报错: 404!
说明: 本节内容应用于对某些请求设定权限
扩展:
apache 几种限制 ip 的方法
禁止访问某些文件 / 目录
增加 Files 选项来控制, 比如要不允许访问 .inc 扩展名的文件, 保护 php 类库:
- <Files~".inc$">
- Order Allow,Deny
- Deny from all
- </Files>
禁止访问某些指定的目录
可以使用 < DirectoryMatch> 正则匹配:
- <Directory~"^/var/www/(.+/)*[0-9]{3}">
- Order Allow,Deny
- Deny from all
- </Directory>
也可以使用目录全局路径
通过文件匹配来进行禁止, 比如禁止所有针对图片的访问:
- <FilesMatch .?i:gif|jpe?g|png)$>
- Order Allow,Deny
- Deny from all
- <FilesMatch>
针对 URL 相对路径的禁止访问
- <Location /dir/>
- Order Allow,Deny
- Deny from all
- </Location>
apache 设置自定义 header
在设置自定义 header 前, 需要先检测一下你的 httpd(Apache) 是否加载了 mod_headers
[root@centos-01inux ~]# /usr/local/apache2/bin/apachectl -M
如果没有加载, 需要进行加载配置
设置 header
在 Apache 配置文件中加入下面参数:
Header add MyHeader "Hello"
apache 的 keepalive 和 keepalivetimeout
?? 在 APACHE 的 httpd.conf 中, KeepAlive 指的是保持连接活跃, 类似于 Mysql 的永久连接换一句话说, 如果将 KeepAlive 设置为 On, 那么来自同一客户端的请求就不需要再一次连接, 避免每次请求都要新建一个连接而加重服务器的负担
??KeepAlive 的连接活跃时间当然是受 KeepAliveTimeOut 限制的如果第二次请求和第一次请求之间超过 KeepAliveTimeOut 的时间的话, 第一次连接就会中断, 再新建第二个连接
?? 所以, 一般情况下, 图片较多的网站应该把 KeepAlive 设为 On 但是 KeepAliveTimeOut 应该设置为多少秒就是一个值得讨论的问题了
?? 如果 KeepAliveTimeOut 设置的时间过短, 例如设置为 1 秒, 那么 APACHE 就会频繁的建立新连接, 当然会耗费不少的资源; 反过来, 如果 KeepAliveTimeOut 设置的时间过长, 例如设置为 300 秒, 那么 APACHE 中肯定有很多无用的连接会占用服务器的资源, 也不是一件好事
?? 所以, 到底要把 KeepAliveTimeOut 设置为多少, 要看网站的流量服务器的配置而定
?? 其实, 这和 MySql 的机制有点相似, KeepAlive 相当于 mysql connect 或 mysql pconnect,KeepAliveTimeOut 相当于 wait_timeout
来源: http://www.bubuko.com/infodetail-2518373.html