웹 서버의 루트 디렉토리가 기본적으로“/ var / www”에있는 이유는 무엇입니까?


87

Tuxfiles 는 Linux 디렉토리 구조에 대해 다음과 같이 말합니다.

/var:

이 디렉토리에는 시스템이 실행될 때 지속적으로 변경되는 변수 데이터가 있습니다.

FHS/var 는 다음과 같이 말합니다.

/var가변 데이터 파일을 포함합니다. 여기에는 스풀 디렉토리 및 파일, 관리 및 로깅 데이터, 임시 및 임시 파일이 포함됩니다.

그런 다음 로그, 메일 및 스풀러와 같은 항목이 해당 폴더에 있다고 말합니다.

전통적 으로 Ubuntu Linux에 Apache 또는 Nginx를 설치하면 디렉토리가에 배치됩니다 /var/www/.

그것은 거의 영구적 인 파일이나 다른 내용으로 디렉토리를 넣는 이상적인 장소처럼 보이지 않습니다.

왜 그렇게 자주 넣 /var습니까?

더 주관적으로 디렉토리 구조에 따라 이상적으로 가야합니까?


2
이것은 나 자신에게 자주 묻는 좋은 질문입니다.
늑대

1
FHS에 따르면 /var/lib/www더 적합했을 것입니다 ...
Nils

3
현재 FHS는 웹 서버 루트 어딘가에 있어야합니다 말한다 아래/srv
LogicDaemon

1
/var실행 불가능한 비 구성 비 실제 사용자가 편집하거나 변경할 수있는 데이터입니다 (예 : 재기록 가능 볼륨에 있어야 함). 예를 들어 /var/lib, 재부팅 후에도 유지 보수 프로세스에 의해 삭제되지 않아야하는 해당 유형의 데이터에 대한 것입니다. 예를 들어 DHCP 임대 레코드를 저장하는 isc-dhcp-server데 사용 /var/lib됩니다. 따라서 웹 서버 파일의 논리적 위치입니다.
LawrenceC

@Nils, 왜 lib인가?
Pacerier

답변:


35

실제로는 "전통적인"위치가 아닙니다. 전통적으로 OS 이후에 설치 한 모든 /usr/local것은 실제로 "클래식 Apache 경로 레이아웃"(그들의 말)입니다. 오랫동안, 그것은이었다 /home/httpd.

당신이보고있는 것은 Red Hat Linux, Mac OS X, GNU 등 특정 OS 용으로 구성된 Apache가 위치를 사용자 정의한다는 것입니다. Apache의 소스는이를 위해 잘 설계되어 있습니다. 실제로 소스 파일에서 ServerRoot의 값을 추적하면이 파일에서 시작되는 것을 볼 수 있습니다 config.layout.

이 파일에서 발췌 한 일부 문서는 docroot 위치에 많은 종류가 있음을 보여줍니다.

IIRC /var/www는 Red Hat Enterprise Linux가 아닌 Red Hat Linux 7.x 2000-2001 릴리스를 통해 제 삶에 들어 왔습니다. 위에서 언급 한 모든 이유로, 나는 그것이 타당하지 않다고 생각했지만, 현실은 현대 시대에 다른 많은 도구와 기술이 위치 이동에 관여하고 있다는 것입니다.

#   Classical Apache path layout.
<Layout Apache>
    prefix:        /usr/local/apache2
    datadir:       ${prefix}

#   GNU standards conforming path layout.
#   See FSF's GNU project `make-stds' document for details.
<Layout GNU>
    exec_prefix:   ${prefix}
    datadir:       ${prefix}/share+

#   Mac OS X Server (Rhapsody)
<Layout Mac OS X Server>
    prefix:        /Local/Library/WebServer
    datadir:       ${prefix}

#   Darwin/Mac OS Layout
<Layout Darwin>
    prefix:        /usr
    datadir:       /Library/WebServer

#   Red Hat Linux 7.x layout
<Layout RedHat>
    prefix:        /usr
    datadir:       /var/www

#   SuSE 6.x layout
<Layout SuSE>
    prefix:        /usr
    datadir:       /usr/local/httpd

#   BSD/OS layout
<Layout BSDI>
    prefix:        /var/www
    datadir:       ${prefix}

#   Solaris 8 Layout
<Layout Solaris>
    prefix:        /usr/apache
    datadir:       /var/apache

33

사용법은 /var/www첫눈에 혼란을줍니다.

FHS에 따르면 웹 서버 데이터는로 이동해야합니다 /srv. 이것이 주요 규칙입니다.

그러나 또한 구조를 결정하는 /srv것은 로컬 관리자의 단독 책임 이라고 말합니다 . 따라서 (apache) 패키지는 그 안에있는 것과 그 아래에있는 것을 모르기 때문에 패키지는에 아무 것도 넣지 않아야 /srv하며 기본 문서 루트는 없어야 합니다. 일반 텍스트 암호 및 기타 사항이 포함 된 하위 버전 저장소 일 수도 있습니다. 따라서 외부에 기본값이 있어야합니다 . 그 기본값이 됩니다./srv/srv/srv/var/www

/var/www대부분 자리 표시 자입니다. 패키지 /usr/share는 정적 HTML 컨텐츠 또는 /var/lib동적 가변 컨텐츠에 사용됩니다. 많은 사람들이 실수로 HTML을 넣어야한다고 생각했습니다 /var/www. 패키지도 가끔 사용하기 때문에 문제가됩니다. 그래서 최근에 그들은 /var/www/html패키지 를 발명했습니다 . 바라건대 사람들은 그것을 사용하지 않을 것입니다. 왜냐하면 다시 새로운 디렉토리를 발명해야하기 때문입니다.

요약 : /srv그에 따라 Apache 가상 호스트를 사용 하고 구성해야합니다.


5
이 답변은 정말 귀중합니다. "행복하게도 사람들은 그것을 사용하지 않을 것이다. 왜냐하면 그들은 다시 새로운 디렉토리를 발명해야하기 때문이다." 많은 관리자가 시간을내어 일부 기본 사항을 읽어야 함을 보여줍니다. (내가 지금하고있는 것처럼;))
Toastgeraet

이것은 우분투 버전에서 이미 발생했습니다. 아파치 문서 루트 기본값은 / var / www / html입니다. 변경 이유가 더 안전하다는 것을 읽었습니다. 내가 모르는 것에 나는 그것에 경쟁 할 수 없다. 나는 실제로 그 경로를 사용하지 않을 것이라고 말할 수 있습니다. 한동안 사용했던 설정을 계속합니다. / websites에 가상 호스트 전용 디스크를 마운트합니다. cpanel 호스팅과 비슷한 구조를 유지하고 / websites / vhostname / public_html에서 제공합니다. 이 방법으로 나는 vhost를 사용하여 메일이나 특정 vhost에 대한 모든 것을 보유 할 수 있습니다.
Chris

실제로 디스크를 분할하고 개별 vhost 백업을 위해 부분을 vhost 디렉토리에 마운트하는 것을 고려하고 있습니다. 각 호스트에서 / websites / vhost / backup을 제공합니다 (몇 개를 실행하면 나중에 더 많이 실행합니다)
Chris

24

나는 akond의 답변에 동의하지만 더 중요한 측면이 있다고 생각합니다. 와 같은 대부분의 다른 위치 /usr/local는 일반적으로 시스템 (패키지 관리자)에 의해 관리됩니다. /var일반적으로 패키지 관리자 (시스템 전체 '데이터')에서 관리하지 않는 파일이있는 곳입니다.

또한 FHS 의 정의 가 좀 더 정확 하다고 생각합니다 (데이터가 "일관 적으로 변경 될 필요는 없습니다").

/ var에는 가변 데이터 파일이 포함되어 있습니다. 여기에는 스풀 디렉토리 및 파일, 관리 및 로깅 데이터, 임시 및 임시 파일이 포함됩니다.


그러나 FHS 는 또한 www 데이터가/srv

/ srv에는이 시스템에서 제공하는 사이트 별 데이터가 포함됩니다.

이를 지정하는 주된 목적은 사용자가 특정 서비스에 대한 데이터 파일의 위치를 ​​찾을 수 있고 읽기 전용 데이터, 쓰기 가능한 데이터 및 스크립트 (예 : cgi 스크립트)에 대해 단일 트리가 필요한 서비스를 합리적으로 배치 할 수 있도록하기위한 것입니다.

/ srv의 하위 디렉토리 이름을 지정하는 데 사용 된 방법은 현재 지정 방법에 대한 합의가 없으므로 지정되지 않았습니다. / srv에서 데이터를 구성하는 한 가지 방법은 프로토콜입니다. ftp, rsync, www 및 cvs.


7
Errr의 요점은 /usr/local자사가 있다는 것입니다 하지 패키지 관리자에 의해 관리.
derobert

@derobert / usr / local은 타사 패키지 (디트로의 저장소에서 제공하지 않는 패키지)에 의해 많이 사용됩니다. 자체 패키지를 만들어 회사에 넣는 회사도 일반적입니다 (여전히 배포판에서 제공하지 않는 패키지에 속함). 이것은 FHS에서도 지원됩니다. pathname.com/fhs/pub/fhs-2.3.html의
Patrick

3
/srv/wwwSuSE 시스템 (SLES10까지) 의 고전적인 길이 기도합니다.
Nils

1
@nils, 그들은 FHS를 준수했다가 고의적으로 그것을 떠났습니까 ??? 한숨
패트릭

1
@ 패트릭 그래서-나는 이것을 깨달았을 때 꽤 놀랐습니다. 아마 그들은 다른 리눅스 변종들과 비슷해지기를 원했을 것입니다.
Nils

13

다른 사람들이 말했듯이 그 이유는 대부분 역사적입니다. /var캐시 파일, 로그, 런타임 데이터 (예 : 잠금 파일), 메일 서버 스토리지, 프린터 스풀링 등 항상 변경되는 시스템 데이터에 사용되었습니다. 기본적으로 넣을 수없는 모든 항목에 대해 /usr( (로컬 데이터가 포함되어 있기 때문에) 들어가는 타사 프로그램 /opt이 아니며, 파기 및 변동성이 없습니다 /tmp.

유닉스 / 리눅스가 개발됨에 따라 다양한 이기종 디렉토리가 결합되어 혼란스러워졌습니다. 최근 몇 년간, 특히 머신이 제공하는 컨텐츠 (이제 [ Filesystem Hierarchy Standard 2.3, p.15 ]에 /srv따라가 아닌 /var/www) 가 이동하는 경향이있었습니다 .

비슷한 일이 일어난 /var/run몇 년 전에 - 여러 배포판의 집중 노력으로, 그것은에서 이동 된 /var/run/run이전에 사용의 기능을 융합하는 /var/lock, /var/run하고 /dev/shm.


6

내 경험 (웹 개발자)에서 웹 사이트 컨텐츠는 안정적이지 않습니다. html 파일 (동적으로 생성 된 내용은 신경 쓰지 않음)의 경우에도 계속 변경 (수정, 누락 등) 될 수 있습니다.

제 관점에서 보면 그것들은 변수입니다. 따라서 그것들은 / var 디렉토리에 완벽하게 적합하며 아무런 문제가 없습니다.


6
동의하지 않습니다. 여전히 HTML 파일이 "상시 변경"으로 표시되지 않습니다. 그들에 대한 변경은 의도적이며 변경 추적을 위해 개정 관리로 이상적으로 점검됩니다.
jonallard

2
Mysql 데이터베이스에 대한 변경도 의도적이지만 데이터베이스 파일은 / var / db에 있습니다. 귀찮게하지 않습니까?
akond

5
물론, 변수에서 상수까지의 연속체에서 DB는 데이터베이스보다 웹 페이지의 버전이 적기 때문에 HTML / 무엇보다 / 웹 응용 프로그램보다 더 가변적이라고 주장합니다. 다른 버전이 비교적 적은 페이지는 넣지 않습니다 /var. 그러나 나는 그것이 어려운 사실보다는 의견과 토론의 문제라고 생각합니다.
jonallard

1
2 년 동안 변경되지 않은 데이터베이스를 보여 주면 어떻게 하시겠습니까?
akond

2
여기에 주어진 인수로 홈 디렉토리는 / var에 속합니다. 보안 패치 등을 위해 지속적으로 업데이트되기 때문에 / usr도 마찬가지입니다. / var는 "자주"변경되는 파일을위한 것으로, 작은 파일을 대량으로 쓰는 데 최적화 된 파일 시스템을 마운트 할 수 있습니다. 데이터베이스가 / var에 속하지 않는다고 주장한다고해서 웹 사이트의 사례가 강화되지는 않지만 실제로는 그렇지 않습니다. 웹 사이트는 많이 읽었으며 / var에 있다는 이점이 없으며 실제로 로깅 및 전자 메일과 같은 필수 시스템 프로세스가 느려질 수 있습니다.
던컨

6

IIRC는 예전에는 항상 /var자체 파일 시스템 (별도의 디스크 또는 디스크 슬라이스)으로 마운트 되었습니다.

이것에 대한 이유 중 하나는 다른 사람들이 말했듯이 해당 파일 시스템에 대한 읽기 / 쓰기가 많기 때문입니다 (logs / et al). 별도의 디스크 / 슬라이스를 갖는 것은 (대부분 읽어 대 더 나은 I / O의이 유형에 맞게 조정 할 수 있음을 의미 /, /usr등).

다른 이유는 그 당시에 쓰기 작업 중 시스템이 충돌 한 경우 루트 파일 시스템이 손상되어 복구하기 어려운 상태로 남겨질 가능성이 매우 높기 때문입니다. 따라서에서 분리 할 필요가 있습니다 /.

파일 시스템 및 디스크 기술은 시간이 지남에 따라 크게 향상되었으므로 발생 가능성이 훨씬 낮습니다.


1
가득 차서 로그가 가득 찼을 때 머신을 중단하지 않으려면 별도의 파티션으로 / var을 사용하는 것이 좋습니다.
Duncan

3

/var FTP 또는 기타 업로드를 허용하는 여러 개의 가상 호스트가있는 웹 사이트가있는 경우 (예 : 웹 호스트 또는 이와 유사한 경우) 다중 사용자 액세스를위한 사용자 중립적 인 "기본"위치를 선택하는 것이 좋습니다.

/home생각하지 않거나 악의적 인 사용자가 /home파티션 제한에 업로드하면 (예 /var: /home, 등 의 기존 설정이 별도의 파티션에 있다고 가정) 다른 사용자 셸 계정에 나쁜 일이 발생할 수 있기 때문에 다른 사용자 계정에 영향을 줄 수 있기 때문에 최적의 상태 가 아닐 수 있습니다.

물론 나는 이것에 대해 /srv더 낫다고 생각 하지만 /varUNIX 전통에서는 더 오래되었습니다.


배포 및 배포 패키지는 FHS를 준수해야합니다. 최종 "사용자"(서버 인 경우 sysadmin)는 원하는대로 수행하고 웹 사이트를 어디에나 배치 할 수 있습니다. / srv가 있기 전에 웹 사이트를 / home / pub 또는 / home / web에 넣었습니다. 그러나 오늘 웹 서버 소프트웨어 프로젝트를 배포한다면 관리자가 변경할 수 있지만 / srv / www 또는 FHS가 말한 것이 기본값이 될 것입니다.
Skaperen

@ultrasawblade, 왜 안돼 /home/http?
Pacerier

1

여기에 추가하고 싶은 것은 웹 "루트"를 / usr에두면 다른 웹 서버, 심지어 동일한 "클러스터"에서도 / usr을 공유 가능하고 읽기 전용으로 표시하는 FHS 부분과 충돌한다는 것입니다 다른 구성을 포함하는 다른 파일을 가질 수 있으므로 / usr에 이상적이지 않습니다.

또한 일부 웹 응용 프로그램 (MediaWiki 및 PhpBB는 내 머리 꼭대기에있는 응용 프로그램의 이름을 지정합니다)은 첨부 파일 / 미디어 파일 업로드를 위해 웹 디렉토리 트리 아래에 쓰기 가능한 위치를 기대합니다. 따라서 읽기 전용 / usr 정의를 준수하려는 경우 웹 트리를 / usr 아래에두면 충돌이 발생합니다.


1

Apache 웹 서버에는 / var / www / 아래에 기본 웹 사이트가 있지만 다른 웹 사이트를 / srv / 아래에 두는 것이 좋습니다

우분투 서버 14.04 LTS에서 이것을 보았습니다. 기본 apache2.conf 파일에는 주석 처리 된 블록이 포함됩니다.

#<Directory /srv/>
#   Options Indexes FollowSymLinks
#   AllowOverride None
#   Require all granted
#</Directory>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.