我在使用 expires 标头时遇到问题。当我设置过期并通过浏览器访问文件时,它变成了 Not Found 404。
这是我在 nginx.conf 上的虚拟服务器设置
server {
listen 80;
server_name blgourl.com www.blogourl.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;
}
}
正如 Alexey Ten 所说,位置内部的根是不好的,因为您必须
root
在每个位置指令中定义参数。如果忘记root
在您的位置之一添加,nginx 将设置root
为默认值/etc/nginx/html
相反,您必须在您的位置之外定义 root,例如在服务器指令中。
root
每当您的根目录更改时,您始终可以添加您的位置。例如在你的配置中,你可以覆盖root
里面的参数location ~* \.php$
另请参阅有关根内部位置问题的讨论。
你的配置应该是