NGINX를 설정하지 않으면 레일 정적 자산에서 헤더가 만료됩니다

StackOverflow https://stackoverflow.com/questions/873235

  •  22-08-2019
  •  | 
  •  

문제

Rails 앱에서 내 정적 자산의 헤더가 만료되는 Nginx를 설정할 수없는 것 같습니다.

내 앱은 Phusion 승객 & nginx를 사용하여 배포됩니다.

아래는 내 nginx config 파일의 관련 섹션입니다.

server {
        listen  80;
        server_name my.domain.tld;
        root /home/deploy/my.domain.tld/current/public;
        passenger_enabled on;
        access_log off;

        location ~* \.(ico|css|js|gif|jp?g|png)\?[0-9]+$ {
                expires max;
                break;
        }

        if (-f $document_root/system/maintenance.html) {
                rewrite ^(.*)$ /system/maintenance.html break;
        }
}

왜 설정이 내 정적 자산에서 헤더가 만료되는지 잘 모르겠습니다 (예 : /images/foo.png?123456)

승객과 관련이 있는지 또는 내 위치 regexp가 그것을 잡지 않는지 확실하지 않습니다.

도움이 되었습니까?

해결책 2

그래서 나는 해결책을 찾게되었습니다. 타임 스탬프가 존재하지 않았을 가능성을 고려하지 않았기 때문에 내 regexp는 약간 벗어났습니다.

이 regexp는 저를 위해 일했습니다.

location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ {

다른 팁

타임 스탬프 선택 사항을 만드는 것이 나쁜 생각이라고 지적하고 싶었습니다. 포함되지 않은 경우 expires max 파일을 새로 고칠 방법이 없기 때문에 잘못되었습니다.

또한, location nginx의 지시문은 쿼리 문자열을 볼 수 없으므로 여기에 게시 된 솔루션은 '선택적'타임 스탬프와 일치하지 않습니다.

적절한 솔루션 (즉, 파일이 타임 스탬프로 요청 된 경우에만 최대 만료를 보내는 솔루션)은 다음과 같습니다.

location ~* \.(js|css|png|jpg)$ {
  if ($query_string ~ "^[0-9]+$") {
    expires max;
    break;
  }
}

타임 스탬프가 지정되지 않은 경우 Last-Modified 그리고 ETag, Nginx에 의해 자동으로 처리됩니다.

어쩌면 이것은 도움이 될 것입니다 :

location ~* ^.*\.(ico|css|js|gif|jp?g|png)\?[0-9]+$ {

또한 읽습니다 Nginx가 위치를 평가하는 방법. 다른 줄이 없다고 확신합니까? location regexp 전에 정적 리소스와 일치하는 구성 파일에서 location 하다?

BTW, 사용을 고려하십시오 try_files 대신에 if (-f $document_root/...).

"Break"지침을 사용할 필요는 없지만 Access_Log Off; 유용 할 것입니다 :

  location ~* \.(png|gif|jpg|jpeg|css|js|swf|ico)(\?[0-9]+)?$ {
      access_log off;
      expires max;
      add_header Cache-Control public;
  }

GitHub에서 전체 구성 파일을 볼 수 있습니다. https://gist.github.com/711913

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top