前言
- 起因:
- App端需要实现WebDAv客户端功能,搭建一台WebDAV服务器满足客户端的增删改查需求。
- 云端现有的WebDAV服务器不能满足自己的需要
- 从零开始:
- 下载centOS服务器镜像
- 安装centOS服务器系统
- 安装指定版本nginx
- 在centOS服务器上安装WebDAV服务
- 环境
- macOS10.14.6
- Parallels Desktop 14,虚拟机软件,安装centOS服务器
- centOS7.6,centOS操作系统
- SecureCRT,centOS操作系统的macOS客户端
安装centOS
下载centOS7.6镜像
- 因为这样或那样的原因,阿里源等其它大型源都不再提供指定版本的镜像下载功能。不过本人另辟蹊径,找到了方法,供大家参考。
- 通过 http://mirrors.aliyun.com/centos/ 查看自己需要下载的版本,记下来。
- 替换掉 https://mirrors.aliyun.com/centos-vault/7.5.1804/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso 里面的版本号就可以直接进行下载。
利用Parallels新建centOS系统,新建完成后,光盘加载centOS7.6镜像进行系统安装。过程很简单,这里不做介绍。
打开Parallels->
设备
->网络
->桥接网络
->Wi-Fi
,把虚拟机和macOS放在同一个本地局域网中,方便本地测试WebDAV服务。系统安装完成后,需要配置IP,才能通信,步骤如下
- 执行
vi /etc/sysconfig/network-scripts/ifcfg-eth0
打开文件 - 更改如下内容
- BOOTPROTO=static # 从dhcp修改为static
- ONBOOT=yes # 从no修改为yes
- 添加如下内容
1
2
3
4
5
6IPADDR=192.168.1.248
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
DNS2=8.8.8.8
DNS3=114.114.114.114
- 执行
IP配置完成后,需要执行
service network restart
重启网络,就可以通信了。如果还是不能通信,需要执行reboot
。使用SecureCRT连接上服务器,你可以愉快地玩耍了
安装Parallels Tools
安装Parallels Tools高效地使用虚拟机,让你达到事倍功半的效果。
打开
顶部工具栏
->操作
->安装Parallels Tools...
,加载Parallels Tools
光盘挂载光盘
mount /dev/cdrom /media
执行
cd /media && ./install
进行安装,会报错,要求手动安装一些依赖包。使用如下命令升级系统内核,过程比较慢,请耐心等待。内核升级后,会安装上面要求的依赖包。
1
2
3sudo yum clean all
sudo yum update
reboot利用
./install
重新执行安装就可以了
安装常用命令
- 安装下载命令
yum install wget -y
- 安装rz和sz命令,可以在SecureCRT上使macOS和centOS服务器互传文件
1
yum install lrzsz -y
安装nginx时加载WebDAV模块
进入用户级的源码目录
cd /usr/local/src
,下载nginx安装包1
wget -c https://nginx.org/download/nginx-1.18.0.tar.gz
nginx自带的dav模块功能有限,我们需要扩展它的功能,下载webDAV扩展包
- 进入 https://github.com/arut/nginx-dav-ext-module/releases/tag/v3.0.0 下载tar.gz包
- SecureCRT使用
rz
上传macOS上的nginx-dav-ext-module-3.0.0.tar.gz
到centOS的/usr/local/src
目录下
解压webDAV扩展包
1
2tar -zxvf nginx-dav-ext-module-3.0.0.tar.gz
mv nginx-dav-ext-module-3.0.0 nginx-dav-ext-module安装编译必备工具包
1
2
3
4
5
6
7yum -y install gcc pcre-devel openssl openssl-devel libxslt-devel
```
* 因为nginx并没有默认内建WebDAV模块,所以需要我们在配置市手动开启,并加入扩展模块
```shell
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure --prefix=/usr/local/nginx --with-http_dav_module --add-module=/usr/local/src/nginx-dav-ext-module编译安装
make && make install
,大功告成。
启动nginx
服务启动
当执行
service nginx start
会出现Failed to start nginx.service: Unit not found.
错误执行
vi /etc/init.d/nginx
,填写一下内容,然后保存退出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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168!/bin/sh
nginx - this script starts and stops the nginx daemin
chkconfig: - 85 15
description: Nginx is an HTTP(S) server, HTTP(S) reverse \
proxy and IMAP/POP3 proxy server
processname: nginx
config: /usr/local/nginx/conf/nginx.conf
pidfile: /usr/local/nginx/logs/nginx.pid
Source function library.
. /etc/rc.d/init.d/functions
Source networking configuration.
. /etc/sysconfig/network
Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac然后执行以下语句
1
2
3cd /etc/init.d
chmod 755 nginx
chkconfig --add nginx重新执行
service nginx start
发现成功了。
开机启动
编辑
vi /lib/systemd/system/nginx.service
1
2
3
4
5
6
7
8
9
10
11
12
13[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target服务开启
systemctl enable nginx.service
再次执行启动命令
service nginx start
配置WebDAV
新建根目录,并授权
1
2mkdir /usr/local/nginx/webdav
chmod 777 /usr/local/nginx/webdav编辑
vim /usr/local/nginx/conf/nginx.conf
,配置nginx虚拟服务器。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19server {
listen 80;
location / {
root /usr/local/nginx/webdav;
dav_methods PUT DELETE MKCOL COPY MOVE; #DAV支持的请求方法
dav_ext_methods PROPFIND OPTIONS; #DAV扩展支持的请求方法
charset utf-8; #设置为utf-8不然中文容易乱码
create_full_put_path on; #启用创建目录支持
dav_access user:rw group:r all:r; #设置新创建的文件和目录的访问权限
limit_except GET PROPFIND OPTIONS HEAD { #匿名用户只有查看权限,登录用户才能进行读写操作
auth_basic "Authorized Users Only";
auth_basic_user_file /usr/local/nginx/conf/passwd.conf;
}
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
min_delete_depth 0;
}
}*
设置Webdav账号(test01)密码(123)
- 安装htpasswd工具:
yum install -y httpd-tools
- 生成用户认证文件:
htpasswd -c /usr/local/nginx/conf/passwd.conf test01
- 安装htpasswd工具:
重启服务
service nginx restart
后,当我们兴高采烈地在浏览器输入http://192.168.1.248
进行访问时,发现报了一大堆错误。根据以往经验,这是防火墙的原因。
防火墙设置
防火墙默认情况下会在开启状态,并且会开机启动。因为WebDav用的是80端口,并且没有在防火墙上暴露出去,所以不能对外提供服务,两个方法可以解决:
- 直接关闭防火墙,这个不安全,所以不推荐
- 开发WebDAV使用的80端口,推荐这个方案
执行以下命令,开放这个端口,这样外部就能访问.
1
2firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload查看防火墙端口信息
firewall-cmd --list-ports
,发现已经暴露出去,再次访问就可以了。1
2[root@localhost ~]# firewall-cmd --list-ports
80/tcp
测试
- macOS或windows端都有相应的WebDAV客户端,使用客户端测试一下服务器的增删改查功能。
- 测试过程中,如果出现问题,肯定是我们搭建的服务器有有问题,因为我们下载的客户端都是相对成熟的。
- 测试没有问题就可以在App端接入了。