• {{ item.name }}
  • Home
  • Linux
  • Programming
    • Python
  • Life
  • Other
  • Tools
  • 投资者该如何参与优秀的区块链项目- NuLink社区圆桌会议
  • 什么是NuLink?- 项目中文社区与项目研究组成员 Rookie 对话实录
  • NuLink 融资 400 万美元用于开发隐私保护技术
  • NuLink的零知识证明介绍(1)
  • 用bitwarden_rs搭建属于自己的密码管理器
  • 修复 CentOS vps 网卡失效
  • 记录用mac给Nexus6P刷Android10的错误
  • Centos 6.8启用 TCP BBR拥塞控制算法
  • Nginx 启用HTTP2功能
  • Mac 安装adb工具
  • WordPress 默认编辑器代码按钮

LAMP第二部分-apache的配置(二)

  • iansiu
  • 2016-03-28
  • 0

接上一篇文章: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. 禁止访问某些文件/目录

Apache-Files

files和filesmatch等的区别

apache-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]

这样就不再循环了。

© 2023 laowang's blog
Theme by Wing