2017-05-21 1 views
1

나는 항상 nginx 설정에 문제가있는 것처럼 보입니다. 내 SPA는/mnt/q/app에 있으며 (pushstate가 활성화 됨) 프론트 엔드 루트는 client/public에 있습니다. 모든 것이 앱이 경로를 선택하고 수행 할 작업을 결정하는 index.html에 매핑되어야합니다.스파와 서브 디렉토리 루트가있는 nginx 설정

인덱스의 전체 경로는 /mnt/q/app/client/public/index.html입니다.

지금까지 옵션이 다 떨어 졌다고 생각합니다. 내가 뭘하든 상관없이, 나는 nginx에서 404 등판을 얻었을뿐, 구성이 간단하고 무엇이 잘못되었는지 전혀 모른다 고 생각한다.

server { 
    listen 80; 
    server_name app.dev; 

    root /mnt/q/app; 

    location/{ 
     root /client/public; 
     try_files $uri @rewrites =404; 
    } 

    location @rewrites { 
     rewrite ^(.+)$ /index.html last; 
    } 
} 

도움을 주시면 감사하겠습니다.

답변

2

nginx이 루트에서 파일 시스템을 보는 경우 root은 사용중인 두 값 중 하나가 아니고 /mnt/q/app/client/public으로 설정해야합니다.

try_files 지시문의 마지막 요소는 기본 동작 (예 : /index.html), 명명 된 위치 또는 응답 코드 일 수 있습니다. 끝에서 두 번째 요소에 명명 된 위치가 있습니다.이 위치는 무시됩니다.

try_files이 더 간단하게 구현할 수 있으므로 이름이 지정된 위치는 작동해야하지만 불필요합니다. 자세한 내용은 this document을 참조하십시오. 예를 들어

다음 index 지시어는 작업 할 수 있도록

root /mnt/q/app; 

location/{ 
    root /mnt/q/app/client/public; 
    try_files $uri $uri/ /index.html; 
} 

location /api { 
} 

location /auth { 
} 

$uri/ 요소는, 디렉토리에 후행 /를 추가합니다 - 당신은 당신이 필요하지 않은 경우를 추가 할 필요가 없습니다.

+0

응답 해 주셔서 감사합니다. 그러나 나는 미래에 여러 위치를 추가하고 싶습니다. 예를 들어 api 및 auth 구성 요소를 추가합니다. 경로는/mnt/q/app/api/및/mnt/q/app/auth에 있어야하지만/api 및/auth에 있어야합니다. 각기. 나는이 접근법으로 그렇게 할 수 있는지 잘 모르겠습니다. 이 요점을 "템플릿"으로 사용했습니다 : https://gist.github.com/aotimme/5006831 – marekpw

+0

로컬 경로는'root '값을 URI와 연결하여 형성되므로'/ api'와'/ auth '블록은 'root'(외부 블록에서 상속 될 수 있음)에 대해 동일한 값을 사용합니다. 나는'/ index.html'이 질문에 언급 된 파일의 URI이고'root'에 대해 다른 값을 필요로한다고 추정했습니다. 업데이트를 참조하십시오. –

+0

감사합니다. 문제가 해결되었습니다. – marekpw

관련 문제