설정은 nginx에서 제공되는 정적 컨텐츠의 헤더를 만료합니다 위해 nginx를 사용하고 있는데

정적 콘텐츠를 서버에 저장하기 위해 nginx를 사용하고 있는데 특정 규칙을 충족하는 모든 파일에 대해 만료 헤더를 설정할 수 있습니까? 예를 들어 확장자가 ‘.css’인 모든 파일에 대해 expires 헤더를 설정할 수 있습니까?



답변

더 많은 파일 확장자 외에도 더 완벽한 캐시 헤더를 선호합니다. ‘?’ 접두사는 ‘비 캡쳐’마크이며 nginx는 $ 1을 만들지 않습니다. 불필요한 부하를 줄이는 데 도움이됩니다.

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
}

답변

server {
    ...

    location ~* \.css$ {
       expires 30d;
    }
    ...
}

location지침

expires지침


답변

허용되는 답변으로 인해 파일이 더 이상 표시되지 않는 이유에 대해 언급 할만한 평판이 충분하지 않지만 알아 낸 후 도와 드리겠습니다.

짧은 버전 :

전역 디렉토리 세트가없는 경우 이미지에서 위치 블록에 대해 지정된 루트 디렉토리가 있는지 확인하십시오!

아래 긴 버전 :


우선,이 솔루션을 구현하는 방법은 실제로이 답변 과 비슷 합니다. 허용 된 답변에서와 같이 규칙을 작성하십시오.

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
}

img-cache.conf 파일로

그런 다음 해당 파일을 server {...}지시문에 포함시킵니다.

내 사이트 사용 가능 폴더에있는 somesite.com의 예 :

 #Image Caching
 include /etc/nginx/conf/img-cache.conf;

이렇게하면 실행중인 여러 사이트에 이미지 캐싱 위치 블록을 추가 할 수 있습니다.


둘째, 내 / var / www /에 public_html로 허용되는 두 개의 폴더 (보안 및 교육)가 포함되어있는 상황이 발생하므로 사이트의 서버 지시문에서 특정 폴더를 지정하여 특정 위치 블록을 만들어야합니다.

따라서 전역 루트 디렉토리가 설정되어 있지 않습니다 .

따라서 이미지 위치 블록을 만들 때 이미지 를 찾을 루트 디렉토리제공하지 않을 수 있습니다 !

내 솔루션은 다음과 같습니다.

location ~ ^/training.+\.(?:ico|css|js|gif|jpe?g|png)$ {
        root /var/www/;
        expires 7d;
        add_header Pragma public;
        add_header Cache-Control "public";
        try_files $uri 404;
}

location ~ ^/.+\.(?:ico|css|js|gif|jpe?g|png)$ {
        root /var/www/secure;
        expires 7d;
        add_header Pragma public;
        add_header Cache-Control "public";
        try_files $uri 404;
}

답변

만료를 최대로 설정할 수도 있습니다. 다음은 CSS와 js에 사용하는 지시문입니다.

# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
    access_log off;
    expires max;
}

답변

위에서 언급 한 모든 솔루션은 다른 경로에 대해 다른 별칭을 가질 가능성을 거부합니다. 또한 한곳에서 모든 다른 캐시 만료를 위해 다음과 같은 방식으로 nginx 맵을 사용해야합니다.

# Expires mappings
map $sent_http_content_type $expires {
    default                    off;
    text/html                  epoch;
    text/css                   max;
    application/javascript     7d;
    ~image/                    max;
}

...

server {
   listen ...;

   expires $expires;
   location /assets/ {
      # It is now possible to serve some resources from different path
      alias /var/www/my_other_path/
   }

   # and have them all have same expirations
   location / {
       try_files $uri $uri/ /index.html;
   }
...
}

Off캐싱을 비활성화하고 epoch(유닉스 시대의 경우) 항상 리소스를 다시 가져 오며 max날짜를 브라우저 최대 값으로 설정합니다.

~ image /는 모든 이미지 유형과 일치합니다.

nginx 맵에 대한 자세한 내용은 http://nginx.org/en/docs/http/ngx_http_map_module.html 에서 확인 하십시오 .


답변

모든 정적 파일이있는 곳이 있으면 다음과 같이됩니다.

 location /static {
            your/location/to/static/files/static;
            expires 30d;
            add_header Cache-Control "public";
    }

수락 된 답변으로 인해 nginx가 내 정적 파일을 찾지 못했습니다. 왜 그런지 잘 모르겠지만 이것은 간단한 대안입니다.


답변

이것은 매우 오래된 스레드이므로 최신 놀라운 자습서를 찾았습니다.

아마도 당신은 그것을 확인하고 싶어

Ubuntu 16.04에서 Nginx의 헤더 모듈로 브라우저 캐싱을 구현하는 방법