I'm having problems with the expires header. When I set the expires and access the file through the browser it becomes Not Found 404.
Here is my virtual server setup on 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;
}
}
As Alexey Ten said, root inside location is bad because you must define
root
parameter inside every location directive. And if forget to add theroot
in one of your location, nginx will setroot
to default/etc/nginx/html
Instead you must define root outside your location, e.g. in server directive. You can always add
root
in your location whenever your root directory changed. For example in your config, you can overrideroot
parameter insidelocation ~* \.php$
See also this discussion regarding root inside location issue.
Your config should be