Nginx

添加過期文件類型的位置時,NGINX proxy_pass 設置失敗

  • December 12, 2018

將以下內容添加到我的 Nginx 配置伺服器塊時,/blog/ 位置開始 404’ing 所有引用的文件類型。利用 expires 指令並繼續保持 proxy_pass 充分工作的正確方法是什麼?有沒有辦法調整正則表達式來表示除 /blog/* 目錄之外的所有這些文件類型?

location ~*  \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ {
   expires 7d;
}

以下是伺服器塊中的其他位置參考。如果我取出 expires 7d; 一切正常。

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

location /blog/ {
   proxy_pass https://blog.domain.com/;
   proxy_set_header   Host             $host;
   proxy_set_header   X-Real-IP        $remote_addr;
   proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}

error_page 404 /index.php;

location ~ \.php$ {
   fastcgi_split_path_info ^(.+\.php)(/.+)$;
   fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
   fastcgi_index index.php;
   include fastcgi_params;
}
# browser caching of static assets
location ~*  \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ {
   expires 7d;
}

例如:

map $uri $expires {
   default off;
   ~\.(jpg|jpeg|png|gif|ico|css|js|pdf)$ 7d;
}

server {
   ...
   location / {
       expires $expires;
       try_files $uri $uri/ /index.php?$query_string;
   }
   ...
}

使用這種方法,您可以為不同的文件類型指定直接的過期時間:

map $uri $expires {
   default off;
   ~\.(jpg|jpeg|png|gif|ico)$ 30d;
   ~\.(css|js|pdf)$ 7d;
}

另一種方法是通過請求正文的內容類型設置過期時間,例如來自官方文件

map $sent_http_content_type $expires {
   default         off;
   application/pdf 42d;
   ~image/         max;
}

server {
   ...
   expires $expires;
   ...
}

引用自:https://serverfault.com/questions/943946