it编程 > 数据库 > Redis

apache配置访问站点下所有文件的实现

11人参与 2025-03-03 Redis

修改options 为all(主要是index)即可返回目录文件

在整完apache和tomcat的之后我觉得有必要把和它下面的属性捋顺一下

如何访问根目录下的目录http://192.168.1.12/test/

第一. 缺省apache不允许访问http目录(没有定义,就没有访问权限)

访问目录http://192.168.1.12/test/
会显示:
forbidden
you don't have permission to access /test/ on this server.

第二. 无限制目录访问

在httpd.conf中增加定义,即可打开无限制的目录访问权限

<directory /home/macg/www/test>
    options all
    allowoverride all
</directory>

再访问会显示如下:

apache/2.0.54 (fedora) server at 192.168.1.12 port 80

index of /test
 name                    last modified      size  description
 ------------------------------------------------------------
 parent directory                             -   
 bg0073.jpg              29-nov-2006 21:02   36k  
 bg0135.jpg              29-nov-2006 21:03   41k  
 bg0137.jpg              29-nov-2006 21:03   47k  
 slade1.html             29-nov-2006 22:02  1.2k  
 slade2.html             29-nov-2006 22:02  1.1k  
 slade3.html             29-nov-2006 22:02  1.4k  
 slade4.html             29-nov-2006 22:02  1.8k  
 slade5.html             29-nov-2006 22:02  2.3k  
-------------------------------------------------------------

apache/2.0.54 (fedora) server at 192.168.1.12 port 80 实际allowoverride
all是enable .htaccess目录限制功能。

但test目录下并没有.htaccess文件

等于开放访问,无限制。

第三. 有限制目录访问

将其他目录中的.htaccess拷贝入要限制访问的目录

[root@localhost test]# ls -a
.  ..  bg0073.jpg  bg0135.jpg  bg0137.jpg  slade1.html  
slade2.html  slade3.html  slade4.html  slade5.html

[root@localhost test]# cp ../test1/.htaccess .

[root@localhost test]# ls -a
.  ..  bg0073.jpg  bg0135.jpg  bg0137.jpg  .htaccess  
slade1.html  slade2.html  slade3.html  slade4.html  
slade5.html

[root@localhost test]# more .htaccess
authtype basic
authname "restricted files"
authuserfile /etc/httpd/passwords
require valid-user

再访问http://192.168.1.12/test/
会跳出身份认证窗口,输入用户名密码,即可访问目录

.htaccess 目录限制的配置
要使用.htaccess文件,先在将httpd.conf中建立<directory ></directory>

<directory "/home/macg/www/test">   
        options all            
允许对目录的操作,all---所有操作

    allowoverride all                      
allowoverride all----允许.htaccess所有指令,缺省是all
allowoverride none ----完全忽略.htaccess文件

</directory>

用/usr/bin/htpasswd创建一个用于认证的密码文件。
并且这个文件不应该置于documentroot目录下,以避免被下载。
建议创建在/etc/httpd/目录下:

[root@localhost httpd]# /usr/bin/htpasswd -c 
/etc/httpd/passwords macg
          -c建立文件
new password:
re-type new password:
adding password for user macg
[root@localhost httpd]# /usr/bin/htpasswd 
/etc/httpd/passwords gary  
                            没有-c就是单纯的adduser 追加用户
new password:
re-type new password:
adding password for user gary
[root@localhost httpd]# more /etc/httpd/passwords
macg:u8jcwsszyab2g
gary:06ycdyg7aijlm

在受限制目录下建立.htaccess文件

[root@localhost test]# ls -a
.  ..  bg0073.jpg  bg0135.jpg  bg0137.jpg  .htaccess  
slade1.html  slade2.html  slade3.html  slade4.html  
slade5.html

[root@localhost test]# more .htaccess
authtype basic
authtype--------认证类型
     由mod_auth_basic提供的basic

basic认证方法并不加密来自用户浏览器的密码(明文传输) 更安全的认证方法"authtype digest",即由mod_auth_digest供的摘要认证
最新的浏览器版本才支持md5认证
(认证,服务器响应速度会受一些影响,一般有几百个用户就会对响应速度有非常明显的影响)

authname "restricted files"
authname "会员区"

此句是显示给用户看的

authuserfile /etc/httpd/passwords
此目录接受passwords内定义用户的认证请求
or
require macg
此目录只接受单一用户macg(unix用户)认证请求
<directory ></directory>中指令的含义

<directory "/home/macg/www/test">   
        options all            
        allowoverride all                      
</directory>
  options指令-------目录的访问特性
option  none    禁止对目录的所有操作
option all      允许对目录的所有操作,all---所有操作
option execcgi    对该目录,可以执行cgi脚本
option indexes    允许访问该目录(而该目录没有index.html)时,返回目录下的文件列表                        
option followsymlinks       只允许对目录的followsymlinks操作
   allowoverride指令
none    不读取.htaccess
all    all----允许.htaccess所有指令,缺省是all
limit    .htaccess函盖具体限定的主机(allow,deny)
authconfig    .htaccess函盖跟认证有关指令(authtype,authname) 

<directory ></directory> 对下面的所有子目录也生效

所以httpd.conf中先对根目录/进行配置,等于是设置缺省配置

httpd.conf中先对根目录/进行配置,等于是设置缺省配置

<directory />                                  
    options followsymlinks  禁止对目录的访问(option只允许对目录的followsymlinks操作)
    allowoverride none      不读取.htaccess
    order deny,allow        deny all
    deny from all               

</directory>


<directory "/usr/local/apache2/htdocs">

    options indexes followsymlinks   只允许访问index和连接   
    allowoverride none
    order allow,deny       承接父目录(/)的deny all,这里也是deny all
    allow from all           

</directory>

order allow deny ————-httpd.conf中封ip之类的操作
apache模块 mod_authz_host

<directory /docroot>
order deny,allow
deny from ...
allow from ...
</directory> 

注意顺序:
除了后面allow的,其他都deny
典型的封ip
order allow,deny
allow from all
deny from 205.252.46.165
注意顺序:
除了后面deny的,其他都allow

deny from 192.168.2 典型的封网段
上面清楚了 可以设置一个例子

apache对于多虚拟主机以及多虚拟路径的配置

servername localhost
<directory />
    allowoverride none
    require all denied 
</directory>
documentroot "/home/work/"

保证所有的项目都放在/home/work/目录, 该目录只做配置

<directory "/home/work/">
    options none
    allowoverride none
    require all denied 
</directory>

httpd-vhosts.conf 首先第一件事就是指定默认的documentroot

没有商量, 必须放在httpd.conf中申明的根路径

不需要severname配置

<virtualhost 127.0.0.1:8800>
    documentroot "/home/work/www/htdocs"
    <directory /home/work/www/htdocs>
        allowoverride none
        require all granted
    </directory>
</virtualhost>

如果不需要多主机支持,到此为止
添加虚拟主机,虚拟目录等等

说明: local.baidu.com 为第一个主机名, 如果多个域名映射设置serveralias即可

alias 注意“/”的位置

```clike
<virtualhost local.baidu.com:8800>
    documentroot "/home/work/workspace"
    servername local.baidu.com
    # serveralias local.baidu.com.cn local.baidu.cn

    <directory /home/work/workspace>
        options followsymlinks
        allowoverride none
        require all granted 
    </directory>

    alias /phpmyadmin "/home/work/www/htdocs/phpmyadmin/"

    # 添加一个日志分析, rotatelogs需要自己安装
    logformat "{method:\"%m\",state:\"%s\",protocol:\"%h\",url:\"%u\",time:\"%{%y-%m-%d %t}t\",ua:\"%{user-agent}i\",query:\"%q\",refer:\"%{referer}i\",server:\"%v\"}" seo 
    customlog "|/usr/sbin/rotatelogs logs/seo_%y%m%d.log 86400 480" seo
</virtualhost>
## 同上其他主机配置
当然对于该目录下个各种配置属性 不过下面这个是2.2的属性 在2.4中进行了少许的变更 所以2.4还是要查询文档 不过有下面的解释打底应该很容易

allow和deny可以用于apache的conf文件或者.htaccess文件中(配合 
directory, location, files等),用来控制目录和文件的访问授权。 
所以,最常用的是: 
order deny,allow 
allow from all

注意“deny,allow”中间只有一个逗号,也只能有一个逗号,有空格都会出 
错;单词的大小写不限。上面设定的含义是先设定“先检查禁止设定,没有 
禁止的全部允许”,而第二句没有deny,也就是没有禁止访问的设定,直 
接就是允许所有访问了。这个主要是用来确保或者覆盖上级目录的设置,开 
放所有内容的访问权。

按照上面的解释,下面的设定是无条件禁止访问:

order allow,deny
deny from all
如果要禁止部分内容的访问,其他的全部开放:

order deny,allow
deny from ip1 ip2
或者
order allow,deny
allow from all
deny from ip1 ip2
apache会按照order决定最后使用哪一条规则,比如上面的第二种方式,虽 
然第二句allow允许了访问,但由于在order中allow不是最后规则,因此还 
需要看有没有deny规则,于是到了第三句,符合ip1和ip2的访问就被禁止 
了。注意,order决定的“最后”规则非常重要,下面是两个错误的例子和 
改正方式:

order deny,allow
allow from all
deny from domain.org
错误:想禁止来自domain.org的访问,但是deny不是最后规则,apache在 
处理到第二句allow的时候就已经匹配成功,根本就不会去看第三句。 
解决方法:order allow,deny,后面两句不动,即可。

order allow,deny
allow from ip1
deny from all
错误:想只允许来自ip1的访问,但是,虽然第二句中设定了allow规则,由 
于order中deny在后,所以会以第三句deny为准,而第三句的范围中又明显 
包含了ip1(all include ip1),所以所有的访问都被禁止了。 
解决方法一:直接去掉第三句。 
解决方法二:

order deny,allow
deny from all
allow from ip1
下面是测试过的例子:

--------------------------------
order deny,allow
allow from all
deny from 219.204.253.8
全部都可以通行

-------------------------------
order deny,allow
deny from 219.204.253.8
allow from all
全部都可以通行

-------------------------------
order allow,deny
deny from 219.204.253.8
allow from all
只有219.204.253.8不能通行

-------------------------------
order allow,deny
allow from all
deny from 219.204.253.8
只有219.204.253.8不能通行

-------------------------------

-------------------------------
order allow,deny
deny from all
allow from 219.204.253.8
全部都不能通行 

-------------------------------
order allow,deny
allow from 219.204.253.8
deny from all
全部都不能通行 

-------------------------------
order deny,allow
allow from 219.204.253.8
deny from all
只允许219.204.253.8通行 

-------------------------------
order deny,allow
deny from all
allow from 219.204.253.8
只允许219.204.253.8通行 

-------------------------------

--------------------------------
order deny,allow
全部都可以通行(默认的)

-------------------------------
order allow,deny
全部都不能通行(默认的)

-------------------------------
order allow,deny
deny from all
全部都不能通行

-------------------------------
order deny,allow
deny from all
全部都不能通行

-------------------------------

对于上面两种情况,如果换成allow from all,则全部都可以通行!

-------------------------------
order deny,allow
deny from 219.204.253.8
只有219.204.253.8不能通行

-------------------------------
order allow,deny
deny from 219.204.253.8
全部都不能通行

-------------------------------
order allow,deny
allow from 219.204.253.8
只允许219.204.253.8通行

-------------------------------
order deny,allow
allow from 219.204.253.8
全部都可以通行

-------------------------------

-------------------------------
order deny,allow
allow from 218.20.253.2
deny from 218.20
代表拒绝218.20开头的ip,但允许218.20.253.2通过;而其它非218.20开头的ip也都允许通过。

-------------------------------
order allow,deny
allow from 218.20.253.2
deny from 218.20
 

和上面的差不多,只是掉换的order语句中的allow、deny先后顺序,但最 
终结果表示全部都拒绝!

到此这篇关于apache配置访问站点下所有文件的实现的文章就介绍到这了,更多相关apache配置访问站点下所有文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

Nginx反代Ollama接口跨域无法逐字输出问题详解

03-03

openwrt中taiscale自动安装脚本方式

03-03

Nginx中server_name的超详细使用指南

03-03

docker安装redis的完整步骤详解

03-04

redis的两种持久化方式RDB和AOF解读

03-04

redis restore 命令的用法实例详解

02-28

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论