위치 지시문이 작동하지 않습니다


10

내 NGINX 서버의 경우 정적 콘텐츠를 제거하기 위해 가상 서버를 설정했습니다. 현재 이미지에 만료 날짜가 있도록 설정하려고합니다. 그러나 이것에 대한 위치 지시문을 만들면 모든 것이 404가됩니다.

내 구성은 다음과 같습니다.

/srv/www/static.conf

server {
    listen                          80;
    server_name                     static.*.*;

    location / {
            root                    /srv/www/static;
            deny                    all;
    }

    location /images {
            expires                 1y;
            log_not_found           off;
            root                    /srv/www/static/images;
    }
}

이 파일은 /etc/nginx/nginx.conf의 http 지시문에 포함되어 있습니다.

에 이미지에 액세스하려고합니다 static.example.com/images/screenshots/something.png. 물론 이미지는에 존재합니다 /srv/www/static/images/screenshots/something.png. 그러나이 주소로 이동하면 작동하지 않으며 단순히 404 Not Found 를 알려줍니다 .

그러나 다음을 제거 location /images하고 location /다음으로 변경 하면 ...

location / {
    root /srv/www/static;
}

효과가있다! 내가 여기서 뭘 잘못하고 있니?

답변:


14

구성이 nginx 구성 함정을 따르고 있습니다. nginx를 구성 하기 전에 구성을 읽어야합니다.

질문에 대답하려면 root위치를 정의 하지 말고 한 번만 정의하면 위치 태그를 통해 특정 디렉토리에 대한 액세스 권한을 자동으로 지정할 수 있습니다.

또한 이미지 디렉토리의 사용자 정의 루트를 정의하는 대신을 사용하십시오 try_files. 은 $uri매핑됩니다 /images/와 디렉토리를 /static/images/.

이 구성을 시도하십시오 :

server {
    listen                          80;
    server_name                     static.*.*;
    root                            /srv/www;

    location /static/ {
            deny                    all;
    }

    location /images/ {
            expires                 1y;
            log_not_found           off;
            autoindex               off;
            try_files $uri static/images$uri;
    }
}

감사합니다! 함정을 읽었지만 기억이 실패한 것 같습니다. 이것은 목적에 맞게 약간 편집했지만 작동합니다.
Jesse Brands

그래, 나는 때때로 자신의 일부를 다시 읽습니다. 별도의 위키 페이지가있는 이유가 있습니다.;)
phoops

root내부를 정의하는 location것이 좋지 않은 경우 docs / http / ngx_http_core_module.html # alias에서 어떻게 스스로를 기부 합니까? ( " 루트 지시어를 대신 사용하는 것이 더 나은 곳"을 참조하십시오. ) 올바른 수정 : 문제는 단지 루트가 아닌 위치에서 기본 루트를 정의하는 것 같습니다
aexl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.