Nginx 主脚本未知(fastcgi_param + 别名)

Nginx 主脚本未知(fastcgi_param + 别名)

我在服务器块中使用 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/webmailindex.php

相关内容