Macos部署webdav和静态网站

参考:

macos 自带apache2, 不用装nginx等软件

apache2 常见命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 启动apache2
sudo apachectl start
# 停止apache2
sudo apachectl stop
# 重启apache2
sudo apachectl restart
# 查看apache2状态
sudo apachectl status
# 检查配置
sudo apachectl configtest
# 重新加载配置
sudo apachectl graceful

# 添加自启服务
sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
# 使用homebrew 替换内置apache先停止内置的
sudo apachectl stop
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

编辑主配置文件

1
2
3
# 先备份
sudo cp /etc/apache2/httpd.conf /etc/apache2/httpd.conf.bak
sudo vim /etc/apache2/httpd.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 修改主机名
ServerName macmini.local:80
# 和webdav相关的行取消注释
LoadModule dav_module libexec/apache2/mod_dav.so
LoadModule dav_fs_module libexec/apache2/mod_dav_fs.so
LoadModule dav_lock_module libexec/apache2/mod_dav_lock.so
LoadModule auth_digest_module libexec/apache2/mod_auth_digest.so
Include /private/etc/apache2/extra/httpd-dav.conf
# 修改用户和用户组
# 在终端中输入 id 获取
User 用户名
Group staff

编辑webdav配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 备份
sudo cp /private/etc/apache2/extra/httpd-dav.conf /private/etc/apache2/extra/httpd-dav.conf.bak

# /Users/用户名/Documents/webSite/webdav/var这个目录是自己创建的
DavLockDB "/Users/用户名/Documents/webSite/webdav/var/DavLock"
# 需要共享的文件夹 /music是服务器路径, 后面的是要分享的本地文件夹
Alias /music "/Users/用户名/Music"
# 这里也同样改动
<Directory "/Users/用户名/Music">
    Dav On

    AuthType Digest
    # 貌似是密码提示相关,就保持webdav
    AuthName webdav
    # You can use the htdigest program to create the password database:
    #   htdigest -c "/usr/user.passwd" DAV-upload admin
    # 这个密码文件后面生成
    AuthUserFile "/Users/用户名/Documents/webSite/webdav/user.passwd"
    Require valid-user # 新增的一行
    AuthDigestProvider file

    # Allow universal read-access, but writes are restricted
    # to the admin user.
    # 这里注释掉三行
    # <RequireAny>
    #     Require method GET POST OPTIONS
    #     Require user admin
    # </RequireAny>
</Directory>

补充: 子文件夹重定向到系统其他目录(有顺序) 需要先在davRoot目录下新建obsidianmusic文件夹

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Alias /dav/music "/Users/用户名/Music"
Alias /dav/obsidian "/Users/用户名/Documents/obsidian"
Alias /dav "/Users/用户名/Documents/webSite/davRoot"

<Directory "/Users/用户名/Music">
    Dav On
    AuthType Digest
    AuthName webdav
    AuthUserFile "/Users/用户名/Documents/webSite/webdav/user.passwd"
    AuthDigestProvider file
    Require valid-user
</Directory>

<Directory "/Users/用户名/Documents/obsidian">
    Dav On
    AuthType Digest
    AuthName webdav
    AuthUserFile "/Users/用户名/Documents/webSite/webdav/user.passwd"
    AuthDigestProvider file
    Require valid-user
</Directory>

<Directory "/Users/用户名/Documents/webSite/davRoot">
    Dav On
    AuthType Digest
    AuthName webdav
    AuthUserFile "/Users/用户名/Documents/webSite/webdav/user.passwd"
    AuthDigestProvider file
    Require valid-user
</Directory>

生成密码文件

1
2
3
4
5
6
7
# 创建配置目录
mkdir -p /Users/用户名/Documents/webSite/webdav/var
# 生成密码文件
sudo htdigest -c "/Users/用户名/Documents/webSite/webdav/user.passwd" webdav 用户名
# 自己实际的 用户名:用户组
sudo chown -R 用户名:staff /Users/用户名/Documents/webSite
sudo chmod -R 755 /Users/用户名/Documents/webSite

添加磁盘权限

macOS 设置,隐私与安全性,完全磁盘访问权限,依次添加 httpd 与 htdigest

路径为/usr/sbin/httpd, /usr/sbin/htdigest

设置host

1
2
3
4
sudo vim /etc/hosts

# 新增
127.0.0.1 macmini.local www.macmini.local

重新启动

1
2
3
4
# 检查配置
sudo apachectl configtest
# 重新加载配置
sudo apachectl graceful

日志路径: /var/log/apache2/error_log

连接

Finder中按下cmd + k, 输入地址http://macmini.local/music

作为静态服务器

修改基本配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
sudo vim /etc/apache2/httpd.conf

# 取消注释
Include /private/etc/apache2/extra/httpd-vhosts.conf

# 改成自己要挂载的路径
DocumentRoot "/Users/用户名/Documents/webSite/www"
<Directory "/Users/用户名/Documents/webSite/www">

MultiviewsMatch Any

设置虚拟主机

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
sudo cp /etc/apache2/extra/httpd-vhosts.conf /etc/apache2/extra/httpd-vhosts.conf.bak
sudo vim /etc/apache2/extra/httpd-vhosts.conf

# 新增
<VirtualHost *:80>
    ServerAdmin admin@macmini.local
    DocumentRoot "/Users/用户名/Documents/webSite/www"
    ServerName macmini.local
    ServerAlias www.macmini.local
    ErrorLog "/private/var/log/apache2/macmini.local-error_log"
    CustomLog "/private/var/log/apache2/macmini.local-access_log" common
</VirtualHost>

重启

把静态资源放到DocumentRoot, 包含index.html

1
2
3
4
# 检查配置
sudo apachectl configtest
# 重新加载配置
sudo apachectl graceful

浏览器输入地址http://macmini.local

webdav改成basic验证

安卓上的一些同步软件不支持Digest验证, 只好换成Basic

1
2
3
4
  # AuthType Digest
  AuthType Basic
  # AuthUserFile "/Users/用户名/Documents/webSite/webdav/user.passwd"
  AuthUserFile "/Users/用户名/Documents/webSite/webdav/user-basic.passwd"
1
2
3
4
5
6
7
8
9
  # 生成新的授权文件
  sudo htpasswd -c "/Users/用户名/Documents/webSite/webdav/user-basic.passwd" 用户名
  sudo chmod -R 755 /Users/用户名/Documents/webSite/webdav/user-basic.passwd
  sudo chown -R 用户名:staff /Users/用户名/Documents/webSite/webdav/user-basic.passwd

  # 检查配置
  sudo apachectl configtest
  # 重新加载配置
  sudo apachectl graceful

上传超过1G的文件失败

/private/etc/apache2/extra/httpd-dav.conf 添加:

1
LimitRequestBody 0
build with Hugo, theme Stack, visits 0