0%
Theme NexT works best with JavaScript enabled
前言
起因:
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镜像
利用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 6 IPADDR=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
光盘
挂载光盘mount /dev/cdrom /media
执行cd /media && ./install
进行安装,会报错,要求手动安装一些依赖包。
使用如下命令升级系统内核,过程比较慢,请耐心等待。内核升级后,会安装上面要求的依赖包。1 2 3 sudo yum clean all sudo yum update reboot
利用./install
重新执行安装就可以了
安装常用命令
安装下载命令yum install wget -y
安装rz和sz命令,可以在SecureCRT上使macOS和centOS服务器互传文件
安装nginx时加载WebDAV模块
进入用户级的源码目录cd /usr/local/src
,下载nginx安装包1 wget -c https://nginx.org/download/nginx-1.18.0.tar.gz
nginx自带的dav模块功能有限,我们需要扩展它的功能,下载webDAV扩展包
解压webDAV扩展包1 2 tar -zxvf nginx-dav-ext-module-3.0.0.tar.gz mv nginx-dav-ext-module-3.0.0 nginx-dav-ext-module
安装编译必备工具包1 yum -y install gcc pcre-devel openssl openssl-devel libxslt-devel
因为nginx并没有默认内建WebDAV模块,所以需要我们在配置市手动开启,并加入扩展模块1 2 3 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 # # description: Nginx is an HTTP(S) server, HTTP(S) reverse \ # 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 3 cd /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 2 mkdir /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 19 server { 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
重启服务service nginx restart
后,当我们兴高采烈地在浏览器输入http://192.168.1.248
进行访问时,发现报了一大堆错误。根据以往经验,这是防火墙的原因。
防火墙设置
防火墙默认情况下会在开启状态,并且会开机启动。因为WebDav用的是80端口,并且没有在防火墙上暴露出去,所以不能对外提供服务,两个方法可以解决:
直接关闭防火墙,这个不安全,所以不推荐
开发WebDAV使用的80端口,推荐这个方案
执行以下命令,开放这个端口,这样外部就能访问.1 2 firewall-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端接入了。