CentOS 7 搭建 WebDav 服务器

这篇具有很好参考价值的文章主要介绍了CentOS 7 搭建 WebDav 服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大部分参考了这篇文章:https://blog.acesheep.com/index.php/archives/834/
本文对其中的关键点进行记录,并调整了部分配置,解决mac os finder连接上之后,无法新建和修改文件的问题

1、安装编译环境

yum install epel-release expat-devel httpd-tools unzip wget centos-release-scl git libxslt-devel libxml2-devel -y
yum install devtoolset-9-gcc* -y
yum groupinstall "Development tools" -y
yum -y install ghostscript

增加了ghostscript,后面zlib会依赖到

2、创建非特权账户

groupadd nginx
useradd -g nginx -c "nginx user" -d /var/cache/nginx -s /sbin/nologin nginx

这里和原文的区别是第一条命令移除了-g 994参数,第二条命令移除了-g 994 -u 996参数,换成了-g nginx,这么做的原因是因为:-g和-u是指定用户id和组id为994和996,但是实际情况下这两个id可能被占用了,导致创建失败。

3、下载源代码

# 创建目录
mkdir nginx-webdav
cd nginx-webdav

# 下载nginx 1.20.2
wget wget https://nginx.org/download/nginx-1.20.2.tar.gz


# download pcre 8.45 / zlib 1.2.11 / openssl 1.1.1m dependency
wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz
wget http://zlib.net/zlib-1.2.11.tar.gz
git clone https://github.com/madler/zlib.git && cd $(basename https://github.com/madler/zlib.git .git) && git checkout v1.2.11 && cd .. && mv zlib zlib-1.2.11
wget http://www.openssl.org/source/openssl-1.1.1m.tar.gz

# download nginx-dav-ext-module git.r112.f5e3088
git clone https://github.com/arut/nginx-dav-ext-module.git

# download headers-more-nginx-module git.r259.a4a0686
git clone https://github.com/openresty/headers-more-nginx-module.git


# Extract source file
tar -zxf pcre-8.45.tar.gz
tar -zxf openssl-1.1.1m.tar.gz
tar -zxf nginx-1.20.2.tar.gz

调整了下zlib的下载方式,因为1.2.11版本在官网已经下载不到了。

文件列表

➜  nginx-webdav tree -L 1  
.
├── headers-more-nginx-module
├── nginx-1.20.2
├── nginx-1.20.2.tar.gz
├── nginx-dav-ext-module
├── openssl-1.1.1m
├── openssl-1.1.1m.tar.gz
├── pcre-8.45
├── pcre-8.45.tar.gz
└── zlib-1.2.11

7 directories, 3 files

4、修改源码

sed -i 's/NGX_HTTP_AUTOINDEX_PREALLOCATE  50/NGX_HTTP_AUTOINDEX_PREALLOCATE  110/g' nginx-1.20.2/src/http/modules/ngx_http_autoindex_module.c
sed -i 's/NGX_HTTP_AUTOINDEX_NAME_LEN     50/NGX_HTTP_AUTOINDEX_NAME_LEN     110/g' nginx-1.20.2/src/http/modules/ngx_http_autoindex_module.c

5、编译

cd nginx-1.20.2

scl enable devtoolset-9 "./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-zlib=../zlib-1.2.11 --with-zlib-opt='-g -Ofast -fPIC -m64 -march=native -fstack-protector-strong -D_FORTIFY_SOURCE=2' --with-pcre=../pcre-8.45 --with-pcre-opt='-g -Ofast -fPIC -m64 -march=native -fstack-protector-strong -D_FORTIFY_SOURCE=2' --with-pcre-jit --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --add-module=../nginx-dav-ext-module --add-module=../headers-more-nginx-module --with-openssl=../openssl-1.1.1m --with-http_xslt_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'"

scl enable devtoolset-9 "make -j"

./objs/nginx -V

make install

安装完成后,可以使用 nginx -V 检查安装的nginx版本

6、创建系统服务

cat << 'EOF' > /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"

[Install]
WantedBy=multi-user.target
EOF

systemctl enable nginx
systemctl start nginx

7、配置nginx

# 创建配置目录
mkdir /etc/nginx/conf.d

修改nginx配置:vim /etc/nginx/nginx.conf

这里与原文的区别是,增加了dav_ext_lock_zone zone=foo:10m;配置。
用于解决mac finder无法新增和修改文件的问题

user nginx;

worker_processes auto;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

# Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
# PCRE JIT can speed up processing of regular expressions significantly.
pcre_jit on;

events {
    use epoll;
    worker_connections 51200;
    multi_accept on;
}

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 50m;

    charset utf-8;
    sendfile on;
    server_tokens off;
    tcp_nodelay on;
    tcp_nopush on;
    real_ip_header X-Forwarded-For;
    types_hash_max_size 2048;
    keepalive_timeout 60;
    access_log /var/log/nginx/access.log main;


    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 256k;

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_vary on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_disable "MSIE [1-6]\.";
    
    dav_ext_lock_zone zone=foo:10m;

    server {
        listen 80 default_server;
        listen [::]:80 default_server;

        if ($host ~ "\d+\.\d+\.\d+\.\d+") {
            return 404;
        }
        return 301 https://$host$request_uri;
    }

    include /etc/nginx/conf.d/*.conf;
}

修改文件 vim /etc/nginx/conf.d/webdav.conf

这里与原文的区别是,增加了dav_ext_lock zone=foo;配置,并调整了dav_ext_methods配置为PROPFIND OPTIONS LOCK UNLOCK 这四个参数,原文只有前两个,导致mac无法修改文件。这些配置也是为了解决mac无法新增和修改文件的问题。
注意修改下ssl的证书和key,替换成自己的

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;

    ssl_certificate "/home/SSL/example.com.crt";
    ssl_certificate_key "/home/SSL/example.com.key";
    ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 30m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+AESGCM:EECDH+AES;
    ssl_prefer_server_ciphers on;

    access_log /var/log/nginx/access-example.com.log main;
    error_log /var/log/nginx/error-example.com.log error;

    location / {
        # 设置webdav目录,注意Nginx worker用户对该目录需有读/写/执行权限
        root /home/nginx;

        auth_basic "closed site";
        auth_basic_user_file /etc/nginx/conf.d/webdav.htpasswd;

        dav_methods PUT DELETE MKCOL COPY MOVE;
        dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;
        dav_ext_lock zone=foo;

        # 启用完整的创建目录支持
        create_full_put_path on;
        dav_access user:rw group:rw;

        autoindex on;
        autoindex_localtime on;
        autoindex_exact_size off;
        # 不限制文件大小
        client_max_body_size 0;

        # 为各种方法的URI后加上斜杠,解决各平台webdav客户端的兼容性问题
        set $dest $http_destination;
        if (-d $request_filename) {
            rewrite ^(.*[^/])$ $1/;
            set $dest $dest/;
        }

        if ($request_method ~ (MOVE|COPY)) {
            more_set_input_headers 'Destination: $dest';
        }

        if ($request_method ~ MKCOL) {
            rewrite ^(.*[^/])$ $1/ break;
        }
    }

    # Mac挂载webdav后会自动写入很多文件,可以通过nginx配置屏蔽掉,保持webdav目录的干净
    location ~ \.(_.*|DS_Store|Spotlight-V100|TemporaryItems|Trashes|hidden|localized)$ {
        access_log off;
        error_log off;

        if ($request_method = PUT) {
            return 403;
        }
        return 404;
    }

    location ~ \.metadata_never_index$ {
        return 200 "Don't index this drive, Finder!";
    }
}

创建完配置之后,执行下nginx -s reload重新加载下配置

8、配置账户

yum install httpd-tools -y
# 其中nginx是用户名,可以自行修改htpasswd执行完之后,会要求输入密码。
htpasswd -c /etc/nginx/conf.d/webdav.htpasswd 'nginx'

9、创建目录添加权限

mkdir /home/nginx
chown nginx:nginx /home/nginx
chmod -R 774 /home/nginx

此时应该就可以用finder进行连接了。
注意,如果域名没有备案,是连不上的,换成ip进行连接即可。

参考:
大部分内容参考自:https://blog.acesheep.com/index.php/archives/834/

https链接不上的问题:https://blog.csdn.net/weixin_42290927/article/details/124346467

mac os finder无法修改的问题:
https://macosx-admin.omnigroup.narkive.com/Kd9g8jKF/finder-mounts-my-webdav-share-always-readonly
mac os finder无法修改的问题:
http://netlab.dhis.org/wiki/ru:software:nginx:webdav
mac os finder无法修改的问题:
https://hev.cc/posts/2020/nginx-webdav-service/文章来源地址https://www.toymoban.com/news/detail-852728.html

到了这里,关于CentOS 7 搭建 WebDav 服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 家庭宽带在有ipv6公网环境下,配置本地tomcat服务器+域名+ssl+ddns,实现ipv6建站、搭建简易的文件服务器、搭建webdav服务器等功能

    必备条件:         宽带运营商提供了ipv6         光猫拨号改为路由器拨号且路由器开启了ipv6         运营商未屏蔽ipv6的80/443端口(如果屏蔽了常用端口,那么可以尝试高一点的端口号。端口号范围:1 - 65535) 目录 一、阿里云申请域名ssl证书 1、申请域名 2、申

    2024年02月06日
    浏览(83)
  • WebDav协议相关软件@简单配置局域网内的http和WebDav服务器和传输系统

    windows自带 IIS webdav windows自带的服务,启用相关功能后还要进行一系列的配置 而且在WebDav客户端上传到站点的文件大小存在限制问题 总体体验并不好,因此推荐第三方专业软件,灵活而且易于配置 第三方软件 CuteHttpFileServer | iscute.cn👺 提供了windos端的命令行程序和图形界面程序

    2024年01月21日
    浏览(55)
  • 【服务端】CentOS Linux 7 搭建邮件服务器

    参考:CentOS7搭建简单的邮件服务器 - 秋夜雨巷 - 博客园 (cnblogs.com) 在 CentOS7 中搭建邮件服务器,给QQ邮箱发邮件。简单记录一次搭建过程。 目录 前言 一、基础环境准备 二、配置域名解析 1. 登录阿里云 三、安装邮件服务 1. 登录主机,配置yum源(配置阿里云yum源步骤略) 2

    2024年01月22日
    浏览(57)
  • Linux centos搭建web服务器

    在web项目中,部署的web站点需要被外部访问,则需要一个媒介,通过把资源放在这个媒介中,再通过所暴露的端口指向这个站点,当外部访问这个媒介所对应的端口时,媒介指向站点,完成访问,像这种类似的媒介,常用的有tomcat容器、Apache等,这边使用Apache来建搭建。 Apache2 是一种流行的

    2023年04月19日
    浏览(60)
  • [Linux/Centos7]搭建TeamSpeak服务器

    可以选择购买云服务器,如:阿里云、腾讯云等等,我这里用的是腾讯云。 设置服务器防火墙/安全组: 端口 协议 说明 9987 UDP TeamSpeak默认语音服务端口 10011 TCP TeamSpeak ServerQuery raw 端口 10022 TCP TeamSpeak ServerQuery SSH 端口 30033 TCP TeamSpeak 文件传输端口 41144 TCP TSDND teamspeak官网:

    2024年02月19日
    浏览(57)
  • 阿里云服务器docker配置实现NAS/webdav访问

    最终踩雷是 未设置端口 (第四点),公网IP访问始终没有响应,在此感谢以下四位作者 1、NAS访问阿里云 使用阿里云盘打造免费 WebDAV 服务 nas访问阿里云 plex挂载阿里云访问_NAS存储_什么值得买 2、阿里云本地访问 zotero+阿里云盘+aliyun driver 实现文献管理云存储_北边颇有心气儿

    2024年02月12日
    浏览(42)
  • Linux(centos7.9)搭建ldap服务器

    一.LDAP是什么  后期更新,目前只搭建了服务器   二.linux搭建LDAP服务器 以下服务器信息为该文档安装ldap服务环境   服务器信息:CentOS7    内核版本:3.10.0-1160.el7.x86_64   1.使用yum进行安装   2.安装完毕后,检查服务运行状态 安装完之后,直接启动服务并且将服务设置为自启

    2024年02月03日
    浏览(53)
  • 在 【Linux Centos】下搭建 【Nginx Web】 服务器

    系统:Linux Centos 7.9 gcc 、c++、pcre、zlib、openssl等 添加内容

    2024年01月16日
    浏览(56)
  • Linux(centos7)下搭建Steam饥荒服务器

    下载steamcmd 解压后效果(game是后面创建的存放游戏的) 下载饥荒服务器 force_install_dir /opt/steam/game/dst是下载路径可以自定义路径 login anonymous 以匿名方式登录 app_update 343050 validate 下载/更新饥荒服务器 可以查看饥荒目录 链接libcurl-gnutls.so.4库,不然可能会报错 配置服务器相关

    2024年01月21日
    浏览(67)
  • 【Linux网络服务】Centos7搭建nfs文件共享服务器

    1.NFS介绍 2.环境准备 3.在A服务端机器安装nfs-utils和rpcbind包 4.启动rpcbind检查是否启动了rpcbind服务并监听111端口 5.配置NFS服务的配置文件,参数配置:vi /etc/exports 数据同步与数据异步的区别 数据同步:当系统从内存中向磁盘中持久化数据时,同步发送表示只有当内存中的数据

    2024年02月06日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包