httpd 无法访问外部目录 - moodle

httpd 无法访问外部目录 - moodle

我正在 rhel 实例中安装 moodle。我想将目录“moodle”保留在 /var/www/http 之外。我遵循文档。为了定义 moodle 目录,我更新了文件/etc/httpd/conf/httpd.conf如下:

<Directory "/usr/moodle_dir/moodle">
DirectoryIndex index.php
AcceptPathInfo on
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
Alias /moodle "/usr/moodle_dir/moodle" 

所有 moodle 内容都在穆德尔目录。我通过 禁用了 SELinux setenforce 0

我将文件权限设置为:

chown -R apache:apache /usr/moodle_dir   

当我在浏览器中点击该 URL 时,它显示

您无权访问此服务器上的 /moodle。

有人能告诉我问题出在哪里吗?(当我将 moodle 目录放在 www/http 中时,moodle 页面就会加载到浏览器中。)Php 版本 7.3,rhel:7.7。Moodle 3.8.2 [最新]

更新: 我在 /var/www/html/test 内创建了一个目录,并相应地更新了<Directory条目Alias。然后它就成功了。这意味着目录引用正在工作。还有其他东西阻止 httpd 访问外部 www/html 目录。

答案1

使用 Apache 2.4,

Order allow,deny
Allow from all

应替换为

Require all granted

检查你的 php.ini,如果 open_basedir 尚未设置为 /var/www/html/...

; open_basedir, if set, limits all file operations to the defined directory
; and below.  This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file.
; http://php.net/open-basedir
;open_basedir =

另外,您是否使用 fpm-php,请检查进程所有者以及其配置中是否设置了 chroot,例如 /etc/php/7.0/fpm/pool.d/www.conf:

; Chroot to this directory at the start. This value must be defined as an
; absolute path. When this value is not set, chroot is not used.
; Note: you can prefix with '$prefix' to chroot to the pool prefix or one
; of its subdirectories. If the pool prefix is not set, the global prefix
; will be used instead.
; Note: chrooting is a great security feature and should be used whenever
;       possible. However, all PHP paths will be relative to the chroot
;       (error_log, sessions.save_path, ...).
; Default Value: not set
;chroot =

相关内容