Назад | Перейти на главную страницу

Неизвестный первичный скрипт 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.

Веб-почта работает, когда я меняю SCRIPT_FILENAME кому:

fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;

Однако после этого изменения корневой домен больше не работает. Я не могу разместить строку выше в разделе местоположения.

Попробуйте эту конфигурацию:

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 / try_files раздел в /webmail место, так что index.php или любой другой сценарий записи веб-почты по умолчанию. Для этого вам нужно посмотреть документацию вашей веб-почты.