Nginx:过期标头变为 404

Mac*_*aca 4 nginx

我在使用 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;

  }

}
Run Code Online (Sandbox Code Playgroud)

mas*_*oeh 7

正如 Alexey Ten 所说,在 location 中使用 root 是不好的,因为您必须root在每个 location 指令中定义参数。如果忘记添加root在您的位置之一,nginx 将设置root 为默认 /etc/nginx/html

相反,您必须在您的位置之外定义,例如在服务器指令中。root每当您的根目录更改时,您都可以随时添加您的位置。例如在您的配置中,您可以覆盖root里面的参数location ~* \.php$

另请参阅有关root 内部位置问题的讨论

你的配置应该是

  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;

  }
Run Code Online (Sandbox Code Playgroud)