2016-08-16 1 views
0

사용자에게 라이브 비디오 콘텐츠를 제공하는 nginx 서버가 있습니다. 이 nginx 서버는 업스트림 서버에서 컨텐트를 가져 와서 캐시에 저장하고 향후이 컨텐트에 대한 모든 요청을이 캐시에서 전달합니다. 라이브 콘텐츠의 해당 부분이 아직 생성되지 않았으므로 사용자의 일부 요청에 '503 서비스를 사용할 수 없음'이 표시됩니다. 그러나 이것은 내 Nginx 서버에 캐시 된 가져옵니다. 앞으로이 콘텐츠를 사용할 수있게되면 내 nginx 서버에서도 내 사용자에게 캐시 된 503을 제공합니다.proxy_cache_valid nginx에서 캐싱 오류가 발생했습니다.

https://stackoverflow.com/questions/28994863/nginx-proxy-cache-caches-502-errors을 확인했습니다. 만 캐시 시간이

proxy_cache_valid 500 만 지정된 경우

이`말한다; 다음 200, 301, 302 응답은 내가 상류에서 얻을 내 503 캐시되어서는 안된다는 기대하고

proxy_pass http://MDVR; 
proxy_cache_valid 10d; 
proxy_cache a12251; 

을 cached.` 있습니다. 내 업스트림이 내 nginx 서버에 503 오류 메시지를 캐시하도록 요청하고 있습니까?

나는 이것을 nginx 서버 끝에 처리하는 다른 방법을 찾았습니다. 하나는 이러한 오류 코드를 1 분 동안 만 캐싱하도록 설정 한 다음에 nginx가 업스트림 서버로 확인하는 것입니다. 다른 하나는 error_page 지시문을 사용하고 추가 된 헤더로 위치를 개별적으로 처리하는 것입니다. 예 : Nginx에서 :

server { 
    error_page 404 /404.html; 
    location = /404.html { 
    root /usr/share/nginx/html; 
    add_header Cache-Control "no-cache" always; 
    } 

그러나 오류 코드를 처리하기 위해 다른 위치 블록을 호출하고 싶지 않습니다. 업스트림 서버에서 처리 할 수 ​​있습니까?

+0

_Does 내 업스트림이 내 nginx 서버에 503 오류 메시지를 캐시하도록 요청하고 있음을 의미합니까? _ 정확하게. 그렇지 않으면 nginx는 이러한 응답을 캐시하지 않습니다. – VBart

답변

0

proxy_no_cache 지시문을 map 지시문과 함께 사용할 수 있습니다. 예를 들면 다음과 같습니다.

map $upstream_status $no_cache { 
    200  ""; 
    default 1; 
} 

proxy_pass http://MDVR; 
proxy_no_cache $no_cache; 

오류가 발생하면 캐싱 헤더를 설정하지 않도록 수정하십시오.

관련 문제