하위 도메인에서 루트 폴더가 다른 여러 위치로 nginx 구성


202

하위 도메인의 루트 URL과 하위 도메인의 디렉토리를 서버의 두 개의 다른 폴더에 제공하려고합니다. 여기 내가 가지고 있고 작동하지 않는 간단한 설정이 있습니다 ...

server {

    index index.html index.htm;
    server_name test.example.com;

    location / {
            root /web/test.example.com/www;
    }

    location /static {
            root /web/test.example.com/static;
    }
}

이 예제에서는 test.example.com/인덱스 파일을/web/test.example.com/www

과에가는 것은 test.example.com/static에서 인덱스 파일을 가져올 것/web/test.example.com/static

답변:


238

다음에 alias지시문 을 사용해야합니다 location /static.

server {

  index index.html;
  server_name test.example.com;

  root /web/test.example.com/www;

  location /static/ {
    alias /web/test.example.com/static/;
  }

}

의 nginx 위키는 내가 할 수있는 것보다 루트 및 별칭 더 나은 사이의 차이를 설명합니다 :

처음에는 루트 지시문과 비슷하지만 문서 루트는 변경되지 않으며 요청에 사용 된 파일 시스템 경로 만 변경됩니다. 요청의 위치 부분이 요청 Nginx 문제에서 삭제됩니다.

참고 그 rootalias는 다르게 처리 슬래시를 후행.


67
그는 필요하지 않습니다 alias. 사용자가 작성한 커뮤니티 위키가 아닌 공식 문서를 읽으 십시오 . 인용문 : location이 지시문 값의 마지막 부분과 일치하면 root 지시문을 사용하는 것이 좋습니다 .
VBart

9
후행 슬래시가 없다는 것을 제외하고는 나를 위해 일했습니다. 별명은 다음과 같아야합니다. alias /web/test.example.com/static/;
ajma

8
@ VBart 문서는 당신이 말한대로 인용 한 것을 정확하게 말하지만, 그 지시를 전혀 정당화하지는 않습니다-임의의 스타일 선택처럼 보입니다. 그 뒤에 논리적 인 이유가 있습니까?
Mark Amery 9:14에

104

위치 지시 시스템은

시작하는 모든 요청 /static과 데이터 가 전달되는 것처럼/var/www/static

따라서 간단한 방법은 마지막 폴더를 전체 경로에서 분리합니다.

전체 경로 : /var/www/static

마지막 경로 : /static 및 첫 번째 경로 :/var/www

location <lastPath> {
    root <FirstPath>;
}

실수 한 것과 솔루션이 무엇인지 봅시다

실수 :

location /static {
    root /web/test.example.com/static;
}

귀하의 솔루션 :

location /static {
    root /web/test.example.com;
}

2
그것은 나를 도왔다 : 나는 폴더의 이름을 바꾸거나 일을하기 위해 심볼릭 링크를 설정해야한다는 것을 깨달았다.
CJM

3
정말 고마워요, 난 정확히 이런 식으로 실패했다 :)
bobmoff

10
이것은 내가 원하는 것을 할 자유에 대한 다소 심각한 제한처럼 보입니다. 특정 경로로 시작하는 URI가 실제 파일 경로에 해당 URI 경로를 포함하지 않는 디렉토리에서 제공되기를 원합니다. 이 솔루션을 사용하면 문서를 "/ static"으로 끝나는 경로 아래 디스크에 배치해야합니다. 나는 이것을 전혀 좋아하지 않는다. 원하는 곳에 파일을 넣을 수있는 절대적이고 완전한 자유를 원합니다.
Szczepan Hołyszewski

48
server {

    index index.html index.htm;
    server_name test.example.com;

    location / {
        root /web/test.example.com/www;
    }

    location /static {
        root /web/test.example.com;
    }
}

http://nginx.org/r/root


2
질문과 다른 점은 무엇입니까?
TangMonk

5
@Wooden the difference : root /web/test.example.com;대신에 root /web/test.example.com/static;. nginx는 위치 에 의해 지정된 경로를 디렉토리 트리 에 맵핑하며 경로 와 소스 디렉토리가 동일한 이름을 공유하므로로 작동합니다 root.
rmoestl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.