|
|
|
|
|
Nginx服務器想設置一些文件(圖片、js、css等)的瀏覽器緩存日期,但一旦在配置文件nginx.conf里加上expires的語句,圖片就不能顯示。expires語句的寫法應該沒錯,因為其他博主使用是有效的。這是怎么回事?
下面是nginx.conf代碼:
server {
listen 80;
server_name example.com
location / {
root /data/file/static/blogourl;
index index.html index.htm index.php;
}
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
location ~* \.php$ {
ssi on;
root /data/file/static;
fastcgi_param HTTP_USER_AGENT $http_user_agent;
fastcgi_index index.php;
#fastcgi_pass 127.0.0.1:9000;
#fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_pass unix:/var/run/php-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /data/file/static/blogourl$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
有網(wǎng)友認為,這不是語法錯誤,而是邏輯錯誤。Nginx的location是單獨的,所以上例里靜態(tài)文件沒有root指向,這個時候root會被認為是默認的路徑(/etc/nginx/html或其他),這樣,當然就沒有這些文件了,圖片當然也不會有顯示了。
通過這樣解釋,上面代碼改為:
root /data/file/static/blogourl;
location / {
index index.html index.htm index.php;
}
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
location ~* \.php$ {
ssi on;
root /data/file/static;
fastcgi_param HTTP_USER_AGENT $http_user_agent;
fastcgi_index index.php;
#fastcgi_pass 127.0.0.1:9000;
#fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_pass unix:/var/run/php-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /data/file/static/blogourl$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
這樣,就不會有問題了。