为什么即使我已经更新了 2.4 所需的文件,通过网页远程访问文件可以在 Apache 2.2 上使用,但在 2.4 上却不行?

为什么即使我已经更新了 2.4 所需的文件,通过网页远程访问文件可以在 Apache 2.2 上使用,但在 2.4 上却不行?

我正在从 Apache 2.2 迁移到 2.4,并且无法再访问不在文档根目录中的文件——这是一个典型的别名问题。我已经阅读了许多关于此问题的相互冲突的帖子,并根据 Apache 官方文档的建议对别名的使用进行了更改,但它仍然不起作用。我已将日志记录级别设置为最详细,即在 /etc/apache2/sites-enabled/000-default.conf 和 /etc/apache2.conf 中进行调试,以尝试解决问题。

我有一个网页尝试访问两台机器上 /var/tmp 上的 foo.txt 。我可以使用 2.2 很好地访问它,但出现错误,使用 2.4 在此服务器上找不到请求的 URL。我在 2.2 上的 /etc/apache2/sites-enabled/default.conf 和 2.4 上的 000-default.conf 中使用别名来访问该文件夹,并且我已在目录块中定义了该文件夹。

我在 2.4 的 000-default.conf 中使用它:

''' <VirtualHost *:8000> ServerAdmin webmaster@localhost

    DocumentRoot /var/www/html/
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/tmp/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Require all granted
            Header set Access-Control-Allow-Origin "*"
    </Directory>
    Alias /Dummy/ /var/tmp/
    LogLevel debug
'''

我认为问题可能是权限,因为这通常是一个问题。在 2.2 机器上,我在文件夹上只有 root root,它工作正常(ls -all -d /var/tmp):

drwxrwxrwt 6 root root 2200 十月 24 16:41 /var/tmp

和(ls -all /var/tmp/foo.txt):

-rw-r--r-- 1 root root 805 十月 24 16:42 foo.txt

到我试图访问该文件夹中的文件。

由于这在 2.4 的机器上不起作用,我对文件夹尝试了以下操作:

drwxrwxrwt 9 www-data www-data 1440 十月 24 16:44 /var/tmp

这是我试图在该文件夹中访问的文件:

-rw-r--r-- 1 www-data www-data 836 十月 24 16:45 foo.txt

第一个示例在 2.2 上运行良好,但第二个示例在 2.4 上失败,给我:

未找到。在此服务器上找不到所请求的 URL。

在 /var/log/apache2/access.log 我得到:

IP 地址 - - [24/Oct/2020:16:47:02 -0400] "GET /Dummy/foo.txt HTTP/1.1" 404 497 "-" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML) ,如 Gecko)Chrome/49.0.2623.112 Safari/537.36"

在 /var/log/apache2/error.log 我得到:

''' [Sat Oct 24 16:52:01.154485 2020] [authz_core:debug] [pid 32675] mod_authz_core.c(820): [客户端 IP 地址:34306] AH01626: 要求全部授予的授权结果: 已授予

[Sat Oct 24 16:52:01.155003 2020] [authz_core:debug] [pid 32675] mod_authz_core.c(820): [客户端 IP 地址:34306] AH01626: 授权结果:已授予

[2020 年 10 月 24 日星期六 16:52:01.155659] [core:info] [pid 32675] [客户端 IP 地址:34306] AH00128: 文件不存在: /var/tmp/foo.txt '''

我使用的网址是:

http://IP地址:8000/Dummy/foo.txt

我尝试将尾随 / 保留在别名中,但出现权限错误而不是未找到,因此我恢复了尾随 /。每次更改配置文件后我都会重新启动 apache2。

是的,目标文件确实存在。我还没有触及默认的 .htaccess 文件。

我怎样才能解决这个问题 ???

答案1

我怀疑您不仅要更改为 apache 2.4,而且 apache 2.4 由 systemd 运行,并且 apache2.service systemd 文件包含PrivateTmp=true这意味着,它将拥有自己的/tmp并且/var/tmp与系统分离(请参阅系统执行(5))。

apache看到/var/tmp的实际上会存在于/var/tmp/systemd-private-<long hash>-apache2.service-f00WPn/tmp

解决方案是禁用该指令或将文件放置在不同的文件夹中。如果文件是由另一个守护进程创建的,您可以使用JoinsNamespaceOf=指令让两者共享相同的/tmp文件/var/tmp

相关内容