Nginx:過期標頭不起作用

Nginx:過期標頭不起作用

我的標題欄位有問題expires。以下 nginx 規則給了我這個標頭(沒有過期標頭)。知道為什麼過期標頭沒有被傳遞嗎?

標頭:/css/v1/afile.css

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 14 Sep 2013 07:29:59 GMT
Content-Type: text/css
Content-Length: 12548
Last-Modified: Sat, 11 May 2013 11:05:51 GMT
Connection: keep-alive
Accept-Ranges: bytes

Nginx 設定:

server {
    listen 80 default_server;
    server_name _;
    root    /var/www/apps/myapp/public/app/webroot;
    index   index.php index.html index.htm;

    server_tokens off;

    access_log  /var/www/apps/myapp/logs/access.log;
    error_log   /var/www/apps/myapp/logs/error.log;

    client_max_body_size 20M;

    rewrite_log on;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ /(js|css)/v[0-9]+/(.*) {
        access_log off;
        expires 7d;
        add_header Cache-Control public;
        try_files $uri $uri/ /$1/$2;
    }

    # Pass the PHP scripts to FastCGI server
    location ~ \.php$ {
        fastcgi_pass   backend;
        fastcgi_index  index.php;
        fastcgi_intercept_errors on; # to support 404s for PHP files not found
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

答案1

以下內容應該可以顯示在同一位置區塊中設定的過期標頭...

try_files $uri $uri/ /$1/$2 =404;

根據 Nginx 維基,嘗試文件應以 URI 或狀態代碼結尾。如果啟用,您可能會獲得有關為什麼未設定過期的更多信息在 Nginx 中調試

更新

知道為什麼過期標頭沒有被傳遞嗎?

我啟用了調試來找出這個有趣的情況。這就是我發現的...

這是前面連結的 try_files wiki 文章的直接引用...

如果未找到任何文件,則會進行內部重定向到最後一個參數中指定的 uri。

所以,當您使用以下程式碼時...

try_files $uri $uri/ /$1/$2;

nginx 找不到$uri$uri/在您的情況下為 /css/v1/afile.css 和 /css/v1/afile.css/),將內部重定向到最後一個參數中指定的 URI。因此,在內部重定向之後,/$1/$2找到了位置(在您的情況下為 /css/afile.css ),在另一個位置區塊。因為它是由另一個沒有任何過期的位置區塊執行的,所以您沒有看到過期。

相關內容