我在服务器块中使用 Laravel,我想创建一个别名,例如 /webmail。这会导致 nginx“ Primary script unknown
”错误。我想我需要更改我的fastcgi_param
。有人能帮我吗?
以下是有关我的 Nginx 服务器块的重要部分。
server {
listen 80 default_server;
server_name _;
set $root_path '/var/www/html/public';
root $root_path;
index index.php index.html index.htm;
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=/$1;
}
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index /index.php;
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location /webmail {
root /var/www/;
}
}
因此我的网络邮件应用程序位于/var/www/webmail
。
当我将以下内容更改为以下选项时,Webmail 可以正常工作SCRIPT_FILENAME
:
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
但是,更改后,根域不再起作用。我无法将上面的行放在位置部分中。
答案1
尝试以下配置:
server {
listen 80 default_server;
server_name _;
set $root_path '/var/www/html/public';
root $root_path;
index index.php index.html index.htm;
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=/$1;
}
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index /index.php;
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $root_path;
}
location /webmail {
set $root_path '/var/www';
root $root_path;
}
}
因此,我们根据位置向 PHP 传递不同的文档根目录/脚本文件名前缀。在默认位置,我们将其$root_path
设置为/var/www/html/public
,在上,/webmail
我们将其设置为/var/www
。
您可能需要在位置中添加单独的rewrite
/部分,以便尝试该脚本或任何其他默认 Webmail 入口脚本。您需要查看 Webmail 的文档以了解这一点。try_files
/webmail
index.php