Установите Laravel с помощью nginx в подкаталоге - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь включить PHP только для одного подкаталога (каталога laravel), но мне не удалось заставить это работать. NGINX всегда говорит 404 «Файл не найден» или php говорит «входной файл не указан». Что я делаю не так?

Это моя конфигурация местоположения:

        location /laravel {
        root   html/laravel/public;
        index   index.php index.html index.html;
        try_files   $uri $uri/ /index.php?$query_string;

        location ~ \.php$ {
            root   html/laravel/public;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  document_root$fastcgi_script_name;
            #include        fastcgi_params;
            include fastcgi.conf;
         }
     }

UDPATE 1 : Кажется, что nginx неправильно оценивает мои выражения местоположения:

2018/09/12 16:30:44 [ошибка] 26476 # 24408: * 1 Ошибка CreateFile () "C: /Server/nginx/html/index.php" (2: системе не удается найти указанный файл ), клиент: 127.0.0.1, сервер: localhost, запрос: «GET / laravel / HTTP / 1.1», хост: «localhost»

Это неправильный путь и, по крайней мере, корень / location:

   location / {
        root   C:/Server/nginx/html;
        index  index.html index.htm index.php;
    }

Я пытался переместить блок, но ничего не изменилось.

ОБНОВЛЕНИЕ 2 : Кажется, что nginx очень глючит. В документации говорится:

Проверяет наличие файлов в указанном порядке и использует первый найденный файл для обработки запроса; обработка выполняется в текущем контексте. Путь к файлу создается из параметра file в соответствии с директивами root и alias. Можно проверить существование каталога, указав косую черту в конце имени, например, «$ URI /». Если ни один из файлов не был найден, производится внутреннее перенаправление на uri, указанный в последнем параметре.

Как показывает мой журнал ошибок, директива try_files не учитывает корневой путь, поскольку пытается открыть файл относительно другого блока местоположения.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

могут быть некоторые изменения и обновления, которые вам необходимо применить:

Если вы хотите поместить свой проект laravel в subfolder на сервере с ngnix-ubuntu 16-php.7.2, поэтому вот обновление config ngnix:

1) ваша вложенная (подпапка) не находится внутри вашей основной папки

/var/www/main:
/var/www/nested:

, тогда ваша конфигурация:

location /nested {

        alias /var/www/nested/public;

        try_files $uri $uri/ @nested;

               location ~ \.php$ {
                        include fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME $request_filename;
                        fastcgi_pass   unix:/run/php/php7.2-fpm.sock;

                                }
   }

location @nested {
        rewrite /nested/(.*)$ /nested/index.php?/$1 last;
}

2) ваша папка для тестирования laravel (вложенная папка) внутри вашей основной:

/var/www/main:
/var/www/main/nested:

затем ваша конфигурация:

location /laravel-test {

    alias /var/www/main/laravel-test/public;

    try_files $uri $uri/ @laravelTest;

           location ~ \.php$ {
                    include fastcgi_params;
                    fastcgi_param SCRIPT_FILENAME $request_filename;
                    fastcgi_pass   unix:/run/php/php7.2-fpm.sock;

                            }


  }

location @laravelTest {
        rewrite /laravel-test/(.*)$ /laravel-test/index.php?/$1 last;
}
0 голосов
/ 12 сентября 2018

Как отметил @Richard в связанном потоке Stackoverflow, похоже, это ошибка nginx. Для меня это решение работает с nginx:

        location  /laravel {
        alias html/laravel/public;
        index   index.php index.html index.html;
        try_files  $uri $uri/  @nested;

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            #fastcgi_split_path_info ^(.+\.php)(/.+)$;
            include fastcgi.conf;
            fastcgi_index   index.php;
            fastcgi_param  SCRIPT_FILENAME  $request_filename;
            #include        fastcgi_params;
         }
     }

     location @nested {
        rewrite /laravel/(.*)$ /laravel/index.php?/$1 last;
     }

Источник: https://serversforhackers.com/c/nginx-php-in-subdirectory

...