首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止通过ip地址访问文件- apache 2.4

问防止通过ip地址访问文件- apache 2.4
EN

Stack Overflow用户
提问于 2015-07-27 17:37:17
回答 1查看 5.2K关注 0票数 1

我在通过ip地址限制对目录的访问之前也问过一个类似的问题

当时,Apache2.2的问题已经解决了。最近,我重新安装了操作系统(到Debian 8),它附带了Apache2.4。

我想限制对文件的访问--当请求“由”IP来时。主要是如果在浏览器中我尝试打开http://192.168.252.178/test/image.jpg,它应该显示错误- 403被禁止。test目录位于apache的www目录中。但是,如果输入http://www.example.com/image.jpg,我应该能够访问该图像--考虑到example.com指向test目录。

使用ApacheVersion2.2,我只需将这几行放在默认的站点配置文件中,问题就解决了。

代码语言:javascript
复制
<Files ~ ".+">
  Order allow,deny
  Deny from all
</Files>

现在,尝试同样的事情是行不通的:我得到403禁止,即使我试图打开任何网站的域名。

考虑到2.4中的更改,我也尝试过这样做,但在尝试打开某个站点时,再次获得了同样的403禁止。

代码语言:javascript
复制
<Files ~ ".+">
       Require all denied
</Files>

我的目标是防止任何类型的访问目录和文件-如果他们是通过ip地址访问。我在默认站点的配置中也有这一行,以防止目录访问,这很好。

代码语言:javascript
复制
<Directory /home/username/www>
        Options -Indexes
        AllowOverride All
        Require all granted
</Directory>

因此,问题是-如何防止通过IP地址访问文件。另外,我需要通过apache,通过htaccess来实现这一点,这对我来说不是一个解决方案。我需要递归地对www中的所有目录/文件实现这一点,因此指定确切的文件名和/或目录也不是一个解决方案。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-07-28 15:28:41

当您使用基于名称的虚拟主机时,主服务器就会消失。Apache将根据IP地址(可能有多个)和端口首先选择要使用的虚拟主机,只有在第一个选择之后,它才会按照虚拟主机在配置中出现的顺序,在此候选子集中搜索相应的ServerName或ServerAlias。

如果没有找到虚拟主机,那么将选择这个子集中的第一个VHost (也是按配置顺序)。更多。

我之所以提到这一点,是因为只有一种类型的VirtualHost指令是很重要的:

代码语言:javascript
复制
<VirutalHost *:80>

或

代码语言:javascript
复制
<VirtualHost 123.45.67.89:80>

我将在示例中使用通配符。您需要一个目录,如/var/www/catchall,其中包含一个文件index.html或类似的文件,这是您想要的。

代码语言:javascript
复制
<VirtualHost *:80>
    # This first-listed virtual host is also the default for *:80
    # It will be used as the catchall.

    ServerName 123.45.67.89

    # Giving this DocRoot will avoid any request based on IP or any other
    # wrong request to get to the other users directories.

    DocumentRoot "/var/www/catchall"

    <Directory /var/www/catchall>
        ...
    </Directory>
</VirtualHost>

# Now you can add as usuall the configuration for any other VHost you need.
<VirtualHost *:80>
    ServerName site1.com
    ServerAlias www.site2.com

    DocumentRoot "/home/username1/www"
    <Directory /home/username1/www>
        ...
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.com
    ServerAlias www.site2.com

    DocumentRoot "/home/username2/www"
    <Directory /home/username2/www>
        ...
    </Directory>
</VirtualHost>

Debian特指:

对于Debian,理想情况下,每个文件都配置一个VHost,并将该文件放在/etc/apache2/sites-available目录中。将文件命名为您喜欢的,只有包含所有vhost的文件应该被命名为类似于000-catchall,因为它们将按字母顺序从/etc/apache2/sites-enabled目录中读取。

然后禁用Debian通常的默认站点:

代码语言:javascript
复制
a2dissite 000-default

如果需要,您可以启用新的所有站点和其他VHosts:

代码语言:javascript
复制
a2ensite 000-catchall

如果不更改其文件名,则ls /etc/apache2/sites-enabled命令应该将集线器显示为列表的第一个,使其始终是第一个文件。重启Apache:service apache2 restart

当然,您可以在原始的默认VHost配置文件中进行所有这些更改,但我通常更喜欢保留原始模型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31659684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档