Nginx
將位置塊添加到記憶體文件會使這些文件返回 404
我想使用 Nginx 記憶體一些靜態文件。但我不知何故無法讓它工作。
這是我的
nginx.conf
:user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; #multi_accept on; } http { #GZIP gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_min_length 256; gzip_types application/javascript application/json application/ld+json application/xml font/eot font/otf font/ttf text/css text/javascript text/plain text/xml; # SERVERS server { listen 80; server_name example.com; if ($http_host ~* ^www\.(.*)$ ) { return 301 https://$1$request_uri; } return 301 https://$http_host$request_uri; } server { listen 443 ssl; if ($http_host ~* ^www\.(.*)$ ) { return 301 $scheme://$1$request_uri; } #SSL ssl_certificate /root/.acme.sh/example.com/fullchain.cer; ssl_certificate_key /root/.acme.sh/example.com/example.com.key; server_name example.com; # Pass all traffic to my webapplication location / { proxy_set_header Host $host; proxy_pass http://localhost:8080; } #Browser caching location ~* \.(js|css)$ { expires 180d; add_header Pragma "public"; add_header Cache-Control "public"; } location ~* \.(jpg|jpeg|png|webp|woff|woff2|ttf)$ { expires 365d; add_header Pragma "public"; add_header Cache-Control "public"; } } }
問題出在“瀏覽器記憶體”部分。啟用此程式碼塊時,我的網站會載入,但所有 css 文件、javascript 文件和圖像都返回 404。就像這些文件忽略了我的
location /
.我能夠通過複製/粘貼來解決這個問題
proxy_set_header Host $host; proxy_pass http://localhost:8080;
在我所有的
location
塊中,但這並不是很優雅,實際上讓我的網站感覺慢了很多……我還嘗試將
location
瀏覽器記憶體的兩個塊移動到塊中location \
,以便後者充當“父級”。但這並沒有機會圖像等的行為返回 404。如何在 Nginx 中配置靜態文件的記憶體?
編輯: 我將以下內容添加到我的
http
-block 中:map $uri $cache_control { ~/Website/assets/media/images "public, no-transform"; } map $uri $expire { ~/Website/assets/media/images 365d; }
在我的
server
-block 中添加了以下內容:expires $expire; add_header Cache-Control $cache_control;
沒有任何東西被記憶體。
如果您不能像@TeroKilkanen 建議的那樣通過 nginx 直接從文件系統提供靜態資產,您可以使用類似於此答案中所示的技術:
map $uri $expire { ~\.(?:j|cs)s$ 180d; ~\.(?:jpe?g|png|webp|woff2?|ttf)$ 365d; default off; } map $uri $cache_control { ~\.(?:js|css|jpe?g|png|webp|woff2?|ttf)$ public; } server { ... expires $expire; add_header Pragma $cache_control; add_header Cache-Control $cache_control; ... }
如果您的請求 URI 與正則表達式不匹配,則
$cache_control
變數將具有空值,並且 nginx 根本不會在其響應中添加Pragma
和標頭。Cache-Control