位置块内的Nginx根指令无法正常工作

时间:2014-02-02 23:50:34

标签: nginx laravel directive document-root

在配置Nginx以在位置块内工作时,我非常头疼。

我正在使用Laravel开发一个Web应用程序,它位于/srv/http/zenith。使用Laravel,索引位于public文件夹中,因此我尝试使用以下配置访问它:

location /zenith/ {
  root /srv/http/zenith/public;
  try_files $uri $uri/ /index.php?$query_string;

  location ~ \.php$ {
    fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}

但每次都会给我404错误。当我从Nginx文档中读到时,Nginx不会从URI中删除路径,因此即使在/zenith/块内,所有URI仍然以/zenith/开头。这样,当我需要example.com/zenith时,/srv/http/zenith/public/zenith指向/srv/http/zenith/public

如何修复此错误?我预计Nginx会自动删除这个不需要的部分,但似乎不是这样。

1 个答案:

答案 0 :(得分:1)

您需要了解根与alias之间的区别。根将URI /映射到提到的目录,并期望其后的所有URI部分与磁盘树匹配。别名将它所属的块的位置映射到所提到的目录,并期望此位置之后的所有URI部分与磁盘树匹配。由于位置块内的根仍然映射/ URI,因此/之后的部分需要存在于磁盘上以便工作。在常见情况下,您将使用root作为文档根目录,使用别名作为位置块。