多年后重返 Linux,并尝试设置mod_dav
目录/var/www
以进行一些 Web 开发。应该很容易,但这让我很难受。在 AWS Lightsail 实例上运行 CentOS 7。安装httpd
并mod_ssl
通过yum
并执行了本应很容易的配置。
在/etc/httpd/conf.d/ssl.conf
全局部分:
DavLockDB /var/www/DavLock
在<VirtualHost>
:
Alias /webdav /var/www
<Directory /var/www>
DAV On
AuthType Basic
AuthName "webdav"
AuthUserFile /etc/httpd/.htpasswd
Require valid-user
</Directory>
我已经完成了chown 777 apache:apache
。/var/www
我运行systemctl restart apache
并重新启动了,但没有成功。
现在来看看奇怪的东西。我可以从 Windows 10 客户端成功登录并获取 中的目录列表/var/www
。<mydomain>/webdav
我可以列出并打开 中的文件/var/www
,但不能列出并打开 中的文件/var/www/html
。我无法创建文件或目录。
在ssl_error.log
:
[Sun May 24 20:01:49.254447 2020] [dav:error] [pid 16108] [client <masked ip>] The locks could not be queried for verification against a possible "If:" header. [500, #0]
[Sun May 24 20:01:49.254463 2020] [dav:error] [pid 16108] [client <masked ip>] Could not open the lock database. [500, #400]
[Sun May 24 20:01:49.254473 2020] [dav:error] [pid 16108] (13)Permission denied: [client <masked ip>] Could not open property database. [500, #1]
好的。因此权限不适合创建锁定数据库。但ls -la
返回以下内容:
drwxr-xr-x. 4 apache apache 33 May 24 19:49 www
再进行双重检查,ps -aux
显示 httpd 以用户 apache 身份运行,减去绑定端口所需的启动过程:
root 16107 0.0 1.4 249968 7416 ? Ss 20:01 0:00 /usr/sbin/httpd -DFOREGROUND
apache 16108 0.0 1.1 250236 5652 ? S 20:01 0:00 /usr/sbin/httpd -DFOREGROUND
apache 16109 0.0 0.7 249968 3644 ? S 20:01 0:00 /usr/sbin/httpd -DFOREGROUND
apache 16110 0.0 0.7 249968 3644 ? S 20:01 0:00 /usr/sbin/httpd -DFOREGROUND
apache 16111 0.0 0.7 249968 3644 ? S 20:01 0:00 /usr/sbin/httpd -DFOREGROUND
apache 16112 0.0 1.1 250236 5656 ? S 20:01 0:00 /usr/sbin/httpd -DFOREGROUND
apache 16116 0.0 0.7 249968 3656 ? S 20:01 0:00 /usr/sbin/httpd -DFOREGROUND
我到底错过了什么?
答案1
因此,这是一个由两部分组成的过程:
首先,正如我在上面的评论中提到的,SELinux 不允许 Apache 进程写入 DavLock 文件。如何在不禁用 SELinux 的情况下更正此问题的说明:https://server-world.info/en/note?os=CentOS_7&p=httpd&f=12
其次,对于您希望通过 WebDAV 提供的任何文件夹,目录索引都无法打开。我的主要 httpd.conf 文件中有这个,
DirectoryIndex index.html
这把事情搞砸了。通过添加以下内容来<Directory /var/www/html>
阻止,一切都开始正常工作:
<If "%{REQUEST_METHOD} != 'GET'">
DirectoryIndex none
</If>
<Else>
DirectoryIndex index.htm index.html
</Else>