nginx에서 항상 단일 파일을 반환하도록 위치 블록을 구성하는 방법


12

내 응용 프로그램에서 "/"위치는 정적 index.html 파일을 반환하고 "/ static"은 폴더에서 정적 파일을 제공하기를 원하며 다른 모든 요청은 404 NOT FOUND를 반환하기를 원합니다. 나중에 다른 모든 요청을 WSGI 서버로 리디렉션합니다.

이것은 현재 내 구성입니다.

# Dev server.
server {
    listen 1337;
    charset UTF-8;

    location / {
        rewrite ^ static/index_debug.html break;
    }

    location /static {
        alias /home/tomas/projects/streamcore/static;
    }
}

정적 폴더는 완벽하게 작동하지만 "/"는 404 NOT FOUND를 반환합니다. 나는 또한 시도했다 :

alias /home/tomas/projects/streamcore/static/index_debug.html;

위치 블록에서 500 내부 서버 오류를 반환합니다. alias단일 파일을 좋아하지 않는 것 같습니다 . 또한 나는 시도했다 :

try_files static/index_debug.html;

그러나 이는 서버가 "try_files 지시문의 잘못된 인수 수"오류로 시작하지 못하게합니다. 분명히 try_files실제로 하나 이상의 파일을 시도해야하지만 이는 내가 찾는 동작이 아닙니다.

그래서 내 질문은 : 항상 정적 파일을 반환하도록 위치 블록을 구성하는 방법무엇입니까?


편집 :alias 실제로 하나의 파일을 인수로 받아 들여야하는 다른 답변에서 보았 으므로 시도했습니다.

location = / {
    alias /home/tomas/projects/streamcore/static/index_debug.html;
}

그러나 여전히 500 개의 내부 서버 오류 만 발생합니다. "/"요청에 대한 오류 로그는 다음과 같습니다.

[경고] 28112 # 0 : * 7 "/home/tomas/projects/streamcore/static/index_debug.htmlindex.html"은 디렉토리가 아닙니다.

"index_debug.htmlindex.html"를 열려고하는 이유는 무엇입니까? index지시어를 어디에서나 사용하지 않습니다 .


당신은try_files static/index_debug.html static/index_debug.html;
ceejayoz

@ ceejayoz : location =/404 NOT FOUND 와 함께 제안을 시도 location /하면 500 내부 서버 오류가 발생합니다.
Hubro

내가 틀리지 않으면 Index 지시어가 누락되었습니다 ... 모든 웹 서버는 항상 루트 URI (/)를 제공하여 색인 파일을 찾습니다. 다음을 추가하여 이것을 무시할 수 있다고 생각합니다.location / { return 404; }
Martino Dino

@MartinoDino : 왜 필요한가요? 그리고 어디?
Hubro

location = / {Index /home/tomas/projects/streamcore/static/index_debug.html;}
Martino Dino

답변:


10

방금 이것을 테스트했고 그것은 나를 위해 작동합니다 :

server {
    root /tmp/root;
    server {
        listen 8080;
        location /static {
            try_files $uri =404;
        }
        location / {
            rewrite ^ /static/index_debug.html break;
        }
    }
}

파일 /tmp/root/static/index_debug.html은 물론 존재합니다 :)

나는 어떤 URL을 칠 수 있고 정적 페이지를 얻는다.


0

try_files를 사용하고 다시 쓰면 명명 된 위치로 리디렉션 할 수 있습니다. 이처럼 :

server {
    root /tmp/root;
    server {
        listen 8080;

        location / {
            try_files $uri $uri/ @index;
        }

        location @index {
            rewrite ^ static/index_debug.html break;
        }
    }
}

파일이 있으면 /tmp/rooturi가 다시 작성되어 static/index_debug.html제공됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.