接上一篇文章:http://laowang.me/lamp-part-ii-apache-configuration.html
八、配置静态文件缓存
httpd.conf
中加入
ExpiresActive on ExpiresByType image/gif "access plus 1 days" ExpiresByType image/jpeg "access plus 24 hours" ExpiresByType image/png "access plus 24 hours" ExpiresByType text/css "now plus 2 hour" ExpiresByType application/x-javascript "now plus 2 hours" ExpiresByType application/x-shockwave-flash "now plus 2 hours" ExpiresDefault "now plus 0 min"
注释:
Expires 语法如下:
ExpiresByType type/encoding " [plus] }*"
其中是下列之一:
access now (等价于'access') modification
plus关键字是可选的。
必须是整数,
是下列之一:
years months weeks days hours minutes seconds
九、配置防盗链
位置一般情况下在 /usr/local/apache/conf/httpd.conf
或者apache 2.2 的 /usr/local/apache2/conf/extra/httpd-vhost.conf
添加
SetEnvIfNoCase Referer "^http://www.ccvita.com" local_ref SetEnvIfNoCase Referer "^http://ccvita.com" local_refSetEnvIfNoCase Referer "^$" local_ref <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> Order Allow,Deny Allow from env=local_ref
还一种写法,是用正则的,这种写法在各个版本的apache比较通用。
SetEnvIfNoCase Referer "^http://.*\.yourdomin\.com" local_ref SetEnvIfNoCase Referer ".*\.yourdomin\.com" local_ref SetEnvIfNoCase Referer "^$" local_ref <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> Order Allow,Deny Allow from env=local_ref
此节来自CSDN博客,转载请标明出处:http://blog.csdn.net/qianling3439/archive/2009/02/05/3864248.aspx
十、访问控制
Apache的order allow deny
这个东西确实挺容易让我们迷糊。其实也不难,只要你掌握这样一条规律即可:
首先举个例子:
Order deny,allow deny from all allow from 127.0.0.1
我们判断的依据是这样的:
1. 看Order后面的,哪个在前,哪个在后
2. 如果deny在前,那么就需要看deny from 这句,然后看allow from 这一句
3. 规则是一条一条的匹配的,不管是deny在前还是allow在前,都是会生效的。比如例子中,先deny 了所有,然后又allow了127.0.0.1,所以127.0.0.1是通过的。
不妨再多举几个例子:
Order allow,deny deny from all allow from 127.0.0.1
这个就会deny所有了,127.0.0.1也会被deny。因为顺序是先allow然后deny,虽然一开始allow了127.0.0.1,但是后面又拒绝了它。
Order allow,deny deny from all
全部都不能通行
Order deny,allow deny from all
全部都不能通行
Order deny,allow
全部都可以通行(默认的),记住即可
Order allow,deny
全部都不能通行(默认的),记住即可
Apache限制某个目录下的php文件没有执行权限
为了安全起见,有时我们需要限制网站下的某些目录对于php脚本不能执行。
有两种方法可以参考:
1. 使用.htaccess 文件限制
在要限制php执行的目录下,创建.htaccess文件,加入内容
php_flag engine off
2. 使用apache的配置文件httpd.conf
在相关的虚拟主机段加入:
php_admin_flag engine off <filesmatch "(.*)php"> Order deny,allow Deny from all Allow from 127.0.0.1
Apache 针对访问uri 限制ip
在虚拟主机配置文件中加入如下字段:
<filesmatch "(.*)admin(.*)"> Order deny,allow Deny from all Allow from 127.0.0.1 Allow from 2.2.2.2
假如该虚拟机的域名为 domain.com , 这样配置后,除了 127.0.0.1 和 2.2.2.2 外,其他ip访问以下类似的uri时都会直接禁止的。
http://domain.com/1212admin.txt http://domain.com/admin.php http://domain.com/1212/admin.html
Apache几种限制ip的方法
1. 禁止访问某些文件/目录
files和filesmatch等的区别
十一、apache rewrite相关
Apache 限制指定user_agent
有些user_agent 不是我们想要的,可以通过rewrite功能针对 %{HTTP_USER_AGENT} 来rewirete到404页,从而达到限制某些user_agent的请求。
配置如下
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^.*Firefox/4.0* [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^.*Tomato Bot/1.0* [NC] RewriteCond %{REQUEST_URI} !^/404* RewriteRule .* /404.html
请注意,你的404.html千万别再跳转到其他页面了,否则很有可能就会死循环了。
其实rewrite到404.html 并不是很好的办法,而apache的rewrite功能有一项就是forbidden ,那就是 F
配置如下
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^*Firefox/4.0* [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^*Tomato Bot/1.0* [NC] RewriteRule .* - [F]
Apache 限制某些目录不能访问通过rewrite实现
deny allow肯定是可以实现的,但是这个必须指定准确的目录,如果有很多个目录,但是都包含某个名字,比如
bbs.1.com/1/tmp/123.html bbs.1.com/2/tmp/123.html bbs.1.com/3/1/2/tmp/123.html ……
如果有很多,需要逐一去定义Directory 模块,这显然很麻烦,使用rewrite模块的 REQUEST_URI 就可以很容易实现。
RewriteEngine on RewriteCond %{REQUEST_URI} ^.*/tmp/* [NC] RewriteRule .* - [F]
Apache rewrite 出现死循环
我的一条规则
RewriteRule ^(.*) /111/$1 [R,L]
使用curl测试,没有问题,但是使用浏览器访问时,出现了无限循环。
本来访问的是 www.111.com 结果变成了 www.111.com/111/111/111/.....
虽然在最后加了 [L] 依然不管用,可能apache还是不够智能,一直满足条件就一直去匹配,一直去跳转。最后没招了只能再加一个条件。
RewriteCond %{REQUEST_URI} !^/111 RewriteRule ^(.*) /111/$1 [R,L]
这样就不再循环了。