Nginx
添加過期文件類型的位置時,NGINX proxy_pass 設置失敗
將以下內容添加到我的 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; ... }