파일서버를 만들려고 합니다. 조언 부탁드립니다.

DebPolaris의 이미지

안녕하세요.
최근에 hp microserver gen8을 구매해서 데비안을 설치했습니다.
제 개인용 서버를 만들고 싶어서 구매를 했습니다.

파일서버를 만들려고 하는데
서버를 데비안이고
클라이언트는 윈도우8.1입니다.

목적1
서버에 있는 자료를 클라이언트에서 공유한다.(일반적인 파일서버입니다)
→ samba를 사용하면 될 것 같습니다.

클라이언트에서 네트워크 드라이브를 잡아서 사용하는 방식으로 구성할 생각입니다.
이때 네트워크 드라이브에 있는 동영상을 재생할 경우 스트리밍 형식으로 클라이언트의 자원(cpu 등등)을
사용하여 재생이 되는 건가요?

목적2
오프라인에서도 사용이 가능하고 온라인에서도 사용이 가능한 공유 드라이브
→ 윈도우의 동기화 센터를 이용하여 구성하려고 합니다만 사용해 본 적이 없어서 제대로 될지 모르겠습니다
그리고 이 경우에도 samba를 사용하는게 제일 좋을까요?
동기화 센터에 보니 offline file이라는 기능이 있어서 이 기능을 사용해 보려고 합니다.

ssh를 이용한 구성은 속도가 느릴 것 같고, 네트워크 드라이브 형식이 아닌 클라이언트에서도 자료가 저장되고
동일한 자료가 서버에도 저장되는 방식을 구성하려고 합니다.
(다음 클라우드 같은 방식을 원하고 있습니다. ndrive와 같은 방식이 아닙니다.)

구글신께 기도를 해 봤는데 제 목적과는 조금씩 다르다는 생각을 하고 자료를 찾지 못했습니다
그리고 nfs로 구성을 해보려고 했지만 nfs 서버 설정에 클라이언트 ip주소를 입력하는 방식으로 구성이 되어서
결국은 nfs는 고려하지 않고 있습니다.

조언 부탁드립니다~~

익명 사용자의 이미지

1.
윈도우의 네트워크 드라이브의 목적이 로컬 드라이브와 같은 투명성을 제공하는 것이기 때문에, 로컬 드라이브에 있는 동영상을 재생하듯이 재생하겠지요. 스트리밍 형식으로 재생이 불가능한 포맷인 동영상도 삼버 공유 드라이브에서 재생가능한 걸 보면, 특별히 네트워크 드라이브라는 걸 인지해서 로컬 파일과는 다른 방식으로 재생할 것 같지는 않습니다.

2.
이 질문에서, nfs도 따지고 보면, ndrive와 같은 방식으로 분류해야 하는 거 아닌가요? samba의 경우도 온라인에서만 사용하능할 텐데, 저런 표현을 쓰시고 하시니, ...

다음 클라우드, 드롭박스 같은 방식을 원하신다면 bittorrent sync를 한번 고려해 보시기 바랍니다.
http://www.bittorrent.com/sync
리눅스, 맥, 윈도우, IOS, 안드로이드 등등 지원하는 플랫폼이 매우 다양합니다.

고급 제품을 가지고 계신데, 잘 활용하시기 바랍니다. 굳이 동일 제품이 아니더라도, 최근에 포고플러그나 시놀로지 NAS 등 활용사례가 다양하기 때문에, 잘 응용해서 사용하시기 바랍니다.

DebPolaris의 이미지

아 그렇군요~~, 감사합니다

samba의 경우 외부 내트워크 사용에 있어서 포트를 열면 되기는 하지만 보안상 문제가 있다고 하여서 사용하지 않기로 하고 결국은 webdav를 사용하기로 했습니다.

근데 문제는
파일 복사, 생성은 잘되는데 윈도우에서 폴더를 만들경우 에러가 발생합니다

"... 0x80070522 ..."

nginx 로그를 보니
"
2014/07/13 21:41:47 [error] 37618#0: *10 MKCOL can create a collection only, client: xxx, server: xxx, request: "MKCOL /mydata/%EC%83%88%20%ED%8F%B4%EB%8D%94 HTTP/1.1", host: "xxx"
"

netdrive를 사용하여 구성을 하고 있는데 이 문제가 왜 발생하는지 모르겠습니다

-----------------------------------------------------
남이 가르쳐주는 것만 받아들이는 것이 아니라, 스스로 만들고, 고쳐가는 사람을 '해커'라고 부른다.
그리고 자신이 쌓아온 노하우를 거리낌없이 나눌 줄 아는 사람을 '진정한' 해커라고 한다.
-Rob Flickenger 'Linux server hacks'

DEBIAN TESTING, KDE...
debpolaris.blogspot.kr

익명 사용자의 이미지

nginx 소스를 살펴보니 이 에러는 MKCOL 요청의 url이 /로 끝나지 않을 때 발생합니다. MKCOL /mydata/%EC%83%88%20%ED%8F%B4%EB%8D%94/ HTTP/1.1 처럼 되어야 에러가 발생하지 않게 소스가 구성되어 있습니다.

http://trac.nginx.org/nginx/browser/nginx/src/http/modules/ngx_http_dav_module.c#L484

484	    if (r->uri.data[r->uri.len - 1] != '/') {
485	        ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
486	                      "MKCOL can create a collection only");
487	        return NGX_HTTP_CONFLICT;
488	    }

어게 어느 쪽의 문제인지는 이것 저것 조사해 보아야 알 수 있을 거 같습니다.

구글에서 nginx MKCOL slash 로 검색해 보니 해법이 나오는군요.
http://wordpressapi.com/solved-trailing-slash-issue-with-nginx-server/

Trailing slash issue with nginx server.
 
I added following block in my nginx.conf file. You should add following lines in your server { } block.
If you want use URL without ending trailing slash. then use following code.
 
#code block added for trailing slash issue solving
server_name_in_redirect off;
optimize_server_names off;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_access group:rw all:r;
create_full_put_path on;
 
if (-d $request_filename) { rewrite ^(.*[^/])$ $1/ break; }
if ($request_method = MKCOL) { rewrite ^(.*[^/])$ $1/ break; }
 
Above code will check if folder is present then fetch data from there. If you have some idea about MKCOL then you will know above code in better way.
If Your problem will not solved from above code then use following code.
 
#here we are adding trailing slash end of Url
if ($request_uri ~* “^[\w\-\/]+[^\/?]$”) {rewrite ^(.*)$ $scheme://$host$1/ permanent;}
 
This will add the ending slash to your url.
DebPolaris의 이미지

감사합니다. 해결했습니다. 이런 방법이 있었군요. 구글신께 기도를 정확히 해야겠습니다^^

-----------------------------------------------------
남이 가르쳐주는 것만 받아들이는 것이 아니라, 스스로 만들고, 고쳐가는 사람을 '해커'라고 부른다.
그리고 자신이 쌓아온 노하우를 거리낌없이 나눌 줄 아는 사람을 '진정한' 해커라고 한다.
-Rob Flickenger 'Linux server hacks'

DEBIAN TESTING, KDE...
debpolaris.blogspot.kr

DebPolaris의 이미지

쓰다보니 문제가 또 있네요~~

혹시

1) 2014/07/14 17:02:24 [error] 5829#0: *11 "/고니" is collection, client: xxx, server: xxx, request: "MOVE /%EA%B3%A0%EB%8B%88 HTTP/1.1", host: "xxx"
2) 2014/07/14 17:05:26 [error] 5829#0: *15 DELETE "/home/xxx/workspace/tmp/솔개" failed (21: Is a directory), client: xxx, server: xxx, request: "DELETE /%EC%86%94%EA%B0%9C HTTP/1.1", host: "xxx"
3) 2014/07/14 17:09:48 [error] 5829#0: *29 lstat() "/home/xxx/workspace/tmp/테스트.txt" failed (2: No such file or directory), client: xxx, server: xxx, request: "DELETE /%ED%85%8C%EC%8A%A4%ED%8A%B8.txt HTTP/1.1", host: "xxx"

1)은 디렉토리를 이동할 때 발생하는 문제입니다("고니" → "솔개")
2)는 디렉토리를 삭제할 때 발생하는 문제입니다("솔개" 디렉토리 삭제)
마지막 3)은 테스트.txt라는 파일을 삭제할 때 발생하는 문제입니다. 아무래도 url이 제대로된 url이 들어가지 않는 것 같습니다.

주신 스크립트를 MOVE와 DELETE에 적용을 해도 끝에 /가 붙질 않습니다. 정규식 해석이 잘 안되어 도움 요청합니다.
그리고 이게 정규식 표현이 맞나요??

-----------------------------------------------------
남이 가르쳐주는 것만 받아들이는 것이 아니라, 스스로 만들고, 고쳐가는 사람을 '해커'라고 부른다.
그리고 자신이 쌓아온 노하우를 거리낌없이 나눌 줄 아는 사람을 '진정한' 해커라고 한다.
-Rob Flickenger 'Linux server hacks'

DEBIAN TESTING, KDE...
debpolaris.blogspot.kr

익명 사용자의 이미지

좀더 검색해 보니, 제 느낌에 아래 문제 때문이 아닐까 생각됩니다. 아래 방법으로 dav-ext-module이 포함된 nginx로 테스트해서 보시기 바랍니다.

nginx dav모듈이 PROPFIND와 OPTIONS 메쏘드를 지원하지 않는다고 하는군요. 둘을 지원하기 위해서는 아래 확장 모튤을 포함해서 다시 빌드해야 한다고 합니다
https://github.com/arut/nginx-dav-ext-module

일단 아래 명령으로 현재 nginx가 dav-ext-module을 포함하고 있는지 확인해 보시기 바랍니다.

$ nginx -V 2>&1 | sed -e 's/ --/\r\n--/g' | grep dav
--with-http_dav_module
--with-module-dav-ext-module

Archlinux의 경우 dav-ext-module을 포함한 별도의 nginx를 설치할 수 있게 되어 있는데, 아마 데비안의 경우에도 별도의 이미 패키지가 존재하거나 sources.list에 추가할 수 있게 누군가가 만들어 두었을 거 같습니다. 물론 직접 소스로부터 빌드하셔도 되겠죠.

익명 사용자의 이미지

미안합니다. 새벽에 잠시 테스트해 보았는데 이 문제가 아니군요. Nginx webdav를 위해서는 dav-ext-module는 필수인거 같습니다. 이게 없으면 마운트가 되지 않는군요. 이미 이 모듈을 적용하고 계실 듯 합니다. 또한 말씀하신 문제와 dav-ext-module는 직접적인 연관이 없습니다.

리눅스에서 davfs2로 테스트했을 때문 문제없이 잘 동작했습니다.
그런데, XP에서는 말씀하신 문제들이 발생하는군요. 하지만 이 문제는 제가 보기에는 XP 구현이 조금 엉성하게 구현되어 있어 보입니다. 정확한 것은 스펙 문서를 살펴보아야 할 거 같습니다.
어쨋든 현상황에서 XP를 수정할 수는 없으므로 어떻게 nginx설정으로 해결보거나, 또는 nginx webdav 모듈 소스를 손보아야 합니다.

   if (-d $request_filename)    { rewrite ^(.*[^/])$ $1/ break; }
   if ($request_method = MKCOL) { rewrite ^(.*[^/])$ $1/ break; }

첫번째 라인으로 DELETE, 두번째 라인으로 MKCOL 메소드가 해결됩니다. 문제는 COPY와 MOVE 메소드인데요.
MOVE /dav/001 HTTP/1.1
Accept-Language: ko, en-us;q=0.2
Overwrite: F
Destination: <a href="http://dav.localdomain.net/dav/002
Translate:" rel="nofollow">http://dav.localdomain.net/dav/002
Translate:</a> f
User-Agent: Microsoft Data Access Internet Publishing Provider DAV 1.1
Host: dav.localdomain.net
Content-Length: 0
Connection: Keep-Alive
Authorization: Basic YnM6ZGthZ2hlaw==

폴더 /dav/001 을 /dav/002 로 이름변경하는 것에 대한 패킷을 캡쳐한 것입니다. 리눅스 davfs2의 경우 /dav/001/, /dav/002/ 로 제대로 /를 끝에 붙여주는데 반해, XP에서는 위에서처럼 /가 포함되지 않은 상태로 요청을 보내게 됩니다.

요청은 이렇지만, 위에서 nginx conf에 추가한 두 if 문중 첫번째에 의해서 MOVE /dav/001은 MOVE /dav/001/로 바뀌게 됩니다만, 하지만 여전히 Destination: http://dav.localdomain.net/dav/002 는 수정되지 않않기 때문에, 요청은 실패하게 됩니다.
저로서는 nginx conf파일에서 어떻게 Destination 헤더를 수정할 수 있는 방법이 있는지는 모르겠네요. 설사 이 문제를 수정했다고 하더라도, 어디 또 다른 부분에서 문제가 발생할지 모르는 일이구요...

현실적으로 가능한 확실한 방법은 nginx의 dav 모듈 소스를 수정하는 방법입니다. 이미 일정 수준 갖추어진 소스 베이스에서 적당히 재구성하는 것이기 때문에 크게 어려운 작업은 아닐 것으로 보입니다. 또는 다른 대안을 찾아 보는 것도 방법이겠네요.

시간이 없어서 여기까지밖에 살펴보지 못하겠네요. 혹시 잘 해결하셨다면 소개 부탁드립니다.

DebPolaris의 이미지

답변 감사합니다. 나머지 문제는 해결을 했지만 내부에서 디렉토리→디렉토리 이동은 해결하지 못했습니다.
알려주신 소스를 다음과 같이 바꾸시면 됩니다

rewrite ^([^.]*[^/])$ $1/ permanent;
#if (-d $request_filename) { rewrite ^(.*[^/])$ $1/ break; }
if ($request_method = MKCOL) { rewrite ^(.*[^/])$ $1/ break; }
if ($request_uri ~* “^[\w\-\/]+[^\/?]$”) {rewrite ^(.*)$ $scheme://$host$1/ permanent;}

마지막줄은 넣으나 안넣으나 차이가 없긴합니다. 사실 표현을 알고 수정을 하면 가능하 것 같지만
그냥 사용을 하려고 합니다.

다른 건 다 가능하고 오직 안되는 건 내부에서 디렉토리→디렉토리 이동 뿐입니다. 아무래도 알고리즘이 잘못 짜여진 듯합니다.

http://www.ics.uci.edu/~ejw/authoring/protocol/rfc2518.html

관련 문서를 읽어보면 이동의 경우 먼저 파일을 복사하고 원본 파일을 삭제하는 형식으로 짜여져 있다고 하는데
어딘가에서 오류가 나는 것 같습니다. 에러메시지는 다음과 같습니다.

2014/07/15 14:13:04 [error] 4614#0: *32 both URI "/메추라기/" and "Destination" URI "http://server/%EB%8A%90%EC%8B%9C/%EB%A9%94%EC%B6%94%EB%9D%BC%EA%B8%B0" should be either collections or non-collections, client: xxx, server: localhost, request: "MOVE /%eb%a9%94%ec%b6%94%eb%9d%bc%ea%b8%b0/ HTTP/1.1", host: "xxx"

개인이 사용하는 것이기 때문에 디렉토리 이동의 경우 먼저 복사를 하고 그 다음에 수동으로 삭제를 할 생각입니다.^^

-----------------------------------------------------
남이 가르쳐주는 것만 받아들이는 것이 아니라, 스스로 만들고, 고쳐가는 사람을 '해커'라고 부른다.
그리고 자신이 쌓아온 노하우를 거리낌없이 나눌 줄 아는 사람을 '진정한' 해커라고 한다.
-Rob Flickenger 'Linux server hacks'

DEBIAN TESTING, KDE...
debpolaris.blogspot.kr

익명 사용자의 이미지

Apache webdav를 설정해서 테스트해 보았더니, 말씀하시는 문제 없이 잘 동작합니다. 참고하시기 바랍니다.

DebPolaris의 이미지

간단하게 사용하려고 nginx를 설치했습니다

그리고 아파치를 설치하면 되지만 귀찮아서 그냥 사용할 생각입니다 --;

-----------------------------------------------------
남이 가르쳐주는 것만 받아들이는 것이 아니라, 스스로 만들고, 고쳐가는 사람을 '해커'라고 부른다.
그리고 자신이 쌓아온 노하우를 거리낌없이 나눌 줄 아는 사람을 '진정한' 해커라고 한다.
-Rob Flickenger 'Linux server hacks'

DEBIAN TESTING, KDE...
debpolaris.blogspot.kr

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.