apache <Directory>下的选项解读

本文深入解析了Apache配置文件中的Directory指令及其子目录如何影响文件和子目录的访问权限,包括Indexes、FollowSymLinks、MultiViews选项,以及AllowOverride、Order、Allowfrom等规则的详细解释。

在apache的配置文件里一般都有这样的几句命令:

<Directory "/Library/WebServer/Documents">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

这表示在<Directory></Directory>间定义了对"/Library/WebServer/Documents"这一路径下的文件及子目录的指令(directives)。但如果其子目录有自己的<Directory></Directory>,就会以自己的<Directory></Directory>为准,以上的指令会被覆盖。比如

<Directory "/Library/WebServer/Documents/afolder">
    Options -Indexes 
    AllowOverride None
    Order allow,deny
    Allow from none
</Directory>

"/Library/WebServer/Documents/afolder"目录不允许访问,切不再有Indexes。"-Indexes"的减号表示去除从父目录继承的这一选项,同理"+"表示增加一个选项。


"Options Indexes FollowSymLinks MultiViews"表示赋予该目录Indexes FollowSymLinks MultiViews这三个选项。

Indexes:允许列出目录下的内容,如果该目录不包含index.html(or index.php...)。如果不希望服务器列出目录内容,则可以删掉此选项。

FollowSymLinks:允许访问软链接指向的文件。比如用"

ln -s ~/origin.html /Library/WebServer/Documents/target.html
创建的软链接target.html,当访问http://localhost/target.html的时候,apache就会读取~/origin.html并返回。如果没有FollowSymLinks,则无法访问。这是apache用来访问服务器目录以外的文件一个方法,此外还有Alias等方法。

MultiViews:参见http://hi.baidu.com/gguoyu/item/bea82b10aba0140bb88a1a6b。大致是"如果服务器收到对/some/dir/foo的请求,而/some/dir/foo并不存在,但是如果/some/dir启用了MultiViews ,则服务器会查找这个目录下所有的foo.* 文件,并有效地伪造一个说明这些foo.* 文件的类型表,分配给他们相同的媒体类型及内容编码,并选择其中最合适的匹配返回给客户。"此选项可能造成.htaccess重写规则失效。

“AllowOverride None” 表示禁止重写。如果需要使用.htaccess进行url重写,则需至少设置成"AllowOverride FileInfo"。详见http://httpd.apache.org/docs/current/mod/core.html#allowoverride


"   Order allow,deny
    Deny from ip1 [ip2..]
    Allow from all"用于决定是否允许某个用户访问。http://www.cnblogs.com/top5/archive/2009/09/22/1571709.html这篇文章写得很详细,但总结得有些模糊。在此用自己的语言整理下:

设"Deny from"中的用户为deny_array[],"Allow from"中的用户为allow_array[]。apache会以如下方式判断是否允许一个用户(user1)访问:

在"Order allow,deny"的情况下:

if user1 in allow_array:
    if user1 in deny_array:
        return 'deny'
    else:
        return 'allow'
else:
    #如果不在allow_array里直接拒绝,无论deny_array里是什么
    return 'deny'

在"Order deny,allow"的情况下:

if user1 in deny_array:
    if user1 in allow_array:
        return 'allow'
    else:
        return 'deny'
else:
    #如果不在deny_array里全部放行
    return 'allow'


"Deny from"和"Allow from"的顺序不重要。可以用"All"和"None"表示所有和无,如"Allow from all","Deny from None",但仍遵循上述规律。如果省略"Deny from"且/或"Allow from",可以视为对应的deny_array,allow_array为空,仍遵循上述规律。



[weblog-springboot] $ /var/jenkins_home/apache-maven-3.6.3/bin/mvn -f weblog-springboot/pom.xml -s /var/jenkins_home/apache-maven-3.9.4/conf/settings.xml clean package -Dmaven.test.skip=true FATAL: command execution failed java.io.IOException: error=13, Permission denied at java.base/java.lang.ProcessImpl.forkAndExec(Native Method) at java.base/java.lang.ProcessImpl.<init>(Unknown Source) at java.base/java.lang.ProcessImpl.start(Unknown Source) Caused: java.io.IOException: Cannot run program "/var/jenkins_home/apache-maven-3.6.3/bin/mvn" (in directory "/var/jenkins_home/workspace/weblog-springboot"): error=13, Permission denied at java.base/java.lang.ProcessBuilder.start(Unknown Source) at java.base/java.lang.ProcessBuilder.start(Unknown Source) at hudson.Proc$LocalProc.<init>(Proc.java:252) at hudson.Proc$LocalProc.<init>(Proc.java:221) at hudson.Launcher$LocalLauncher.launch(Launcher.java:995) at hudson.Launcher$ProcStarter.start(Launcher.java:507) at hudson.Launcher$ProcStarter.join(Launcher.java:518) at hudson.tasks.Maven.perform(Maven.java:369) at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:818) at hudson.model.Build$BuildExecution.build(Build.java:199) at hudson.model.Build$BuildExecution.doRun(Build.java:164) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:527) at hudson.model.Run.execute(Run.java:1860) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:44) at hudson.model.ResourceController.execute(ResourceController.java:101) at hudson.model.Executor.run(Executor.java:454) Build step 'Invoke top-level Maven targets' marked build as failure Finished: FAILURE怎么一回事
最新发布
08-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值