Nginx 다중 뿌리 root

요청을 특정 하위 디렉토리, 다른 루트 위치로 전환하고 싶습니다. 어떻게? 내 기존 블록은 다음과 같습니다

server {
    listen       80;
    server_name  www.domain.com;

    location / {
        root   /home/me/Documents/site1;
        index  index.html;
    }

    location /petproject {
        root   /home/me/pet-Project/website;
        index  index.html;
        rewrite ^/petproject(.*)$ /$1;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    } }

즉, http://www.domain.com 은 /home/me/Documents/site1/index.html을 제공해야하지만 http://www.domain.com/petproject 는 / home / me / pet-Project / website를 제공해야합니다. /index.html-교체 후 nginx가 모든 규칙을 다시 실행하는 것으로 보이며 http://www.domain.com/petproject 는 /home/me/Documents/site1/index.html을 제공합니다.



답변

구성에는 일반적으로 nginx에서 발생하는 일반적인 문제가 있습니다. 즉, 블록 root내부에서 지시문을 사용 합니다 location.

현재 location블록 대신이 구성을 사용해보십시오 .

root /home/me/Documents/site1;
index index.html;

location /petproject {
    alias /home/me/pet-Project/website;
}

/home/me/Documents/site1, 웹 사이트의 기본 디렉토리는 입니다. /petprojectURI의 경우 컨텐츠가 /home/me/pet-Project/website디렉토리 에서 제공됩니다 .


답변

break재 작성 규칙에 플래그를 추가 해야 처리가 중지되고 위치 블록 내부에 있으므로 해당 블록 내부에서 처리가 계속됩니다.

rewrite ^/petproject/?(.*)$ /$1 break;

참고 /?URL의 시작 부분에 이중 슬래시가 생기지 않도록 일치 패턴을 추가 했습니다.