Menu

메모용 개발 블로그

전체보기 > Nginx >

리눅스 Nginx에서 Webdav 설정

2022-08-10 00:04:45

Nginx에서 WebDav 설정을 간단하게 메모해보고자 한다.

권한

파일을 제공하려면 해당 경로에 권한이 존재하여야 한다.

webdav는 해당 웹 서버의 권한으로 동작하므로 이에 맞춰줄 필요가 있다.

여기서는 프로세스에서 동작하는 아이디를 보고 아이디를 확인했으며, 기본으로는 www-data이다.

ps -ef | grep nginx

결과

...
www-data 12688  1363  0 Aug02 ?        00:00:39 nginx: worker process
www-data 12689  1363  0 Aug02 ?        00:00:00 nginx: worker process
www-data 12690  1363  0 Aug02 ?        00:00:00 nginx: worker process
www-data 12691  1363  0 Aug02 ?        00:00:00 nginx: worker process
...

확인했다면 해당 경로의 소유주를 변경한다.

sudo chown www-data:www-data 경로

만약 하위에 이미 파일이 존재한다면 -R 인수를 추가하여 하위 경로까지 재귀적으로 변경하도록 한다.

Nginx 설치

sudo apt install nginx nginx-full -y

nginx-full로 설치하여 기능을 사용하여야 한다.

nginx 버전은 1.13.4 이상을 사용하여야 한다.

https://github.com/arut/nginx-dav-ext-module

(앞으로 나올 각종 설정들의 항목이 위 레포에 설명이 친절히 되어 있다.)


개인적인 이슈인지는 모르겠으나. Nginx 1.14.0 버전을 패키지 매니저로 설치하여 구성하다가 일반 구성은 정상으로 되나, 맥에서 쓰기를 정상적으로 하기 위해서 nginx dav ext module을 적용하는 과정에서 제대로 동작하지 않아 결국 컴파일 설치로 대체하였습니다.

혹시나 동일 증상인 경우 해당 글을 참고하여 Nginx를 컴파일로 구성해보시기 바랍니다.

Nginx 1.19.0 컴파일 방식으로 설치

Nginx 설정

webdav는 http 프로토콜에서 동작하므로 Nginx에서 http 블록 내부에 설정이 위치하면 된다.

대부분의 경우 /etc/nginx/sites-enabled 경로 하위의 파일을 http 블록 내부에 불러오도록 설정이 되어 있을 것이다.

이 글도 이를 기준으로 작성하지만, 혹여나 환경이 다르다면 그냥 /etc/nginx/nginx.conf 에다가 비슷하게 세팅을 하던지 http 블록 아래 그대로 넣어버리던지 하면 된다.

보통의 경우 /etc/nginx/sites-available 아래 설정파일을 작성해서 넣고 sites-enabled로 심볼릭 링크를 추가하여 활성화하는 식으로 사용한다.

설정 파일 추가

sudo vim /etc/nginx/sites-available/도메인_주소

관리상 목적으로 파일 명을 도메인 주소로 설정하였다. 본인이 편리한 규칙대로 작성을 해도 무관하다.

다음 내용처럼 작성한다.

(WebDav 레벨 2를 지원하기 위해서 dav_ext_methods 설정을 포함하고 있습니다. 이를 추가하지 않은 경우 관련 모듈 부재로 인하여 에러 발생할 수 있음.)

dav_ext_lock_zone zone=foo:10m;

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

    server_name 도메인_주소;
    
    charset utf-8;
  
    location / {
        alias 웹_루트_주소;
        set $x $uri$request_method;
        if ($x ~ [^/]MKCOL$) {
            rewrite ^(.*)$ $1/;
        }

        autoindex on;
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/.htpasswd;
        client_body_temp_path /tmp;
        dav_methods PUT DELETE MKCOL COPY MOVE;
        dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;
        dav_ext_lock zone=foo;
        dav_access user:rw group:rw all:r;
    }
}

이후 sites-enabled 경로로 심볼릭 링크를 생성한다.

sudo ln -s /etc/nginx/sites-available/파일명 /etc/nginx/sites-enabled/파일명

Nginx 문법 검사를 수행하여 이상이 없는지 확인한다.

sudo nginx -t

결과

➜  nginx sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful