Nginx设置缓存expires后返回404找不到文件的原因
作者:admin 时间:2017-1-8 2:30:40 浏览: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;
}
}
有网友认为,这不是语法错误,而是逻辑错误。Nginx的location是单独的,所以上例里静态文件没有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;
}
这样,就不会有问题了。
相关文章
- 站长推荐