在配置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会自动删除这个不需要的部分,但似乎不是这样。
答案 0 :(得分:1)
您需要了解根与alias之间的区别。根将URI /
映射到提到的目录,并期望其后的所有URI部分与磁盘树匹配。别名将它所属的块的位置映射到所提到的目录,并期望此位置之后的所有URI部分与磁盘树匹配。由于位置块内的根仍然映射/
URI,因此/
之后的部分需要存在于磁盘上以便工作。在常见情况下,您将使用root作为文档根目录,使用别名作为位置块。