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

Nginx не получает корневой каталог

Я пытаюсь создать приложение angular с api. Каждый маршрут должен идти к приложению angular, кроме маршрута API. Маршрут API должен идти в проект laravel. Но маршрут API (/api) не будет работать, он просто перенаправляется в приложение angular. И когда я удаляю маршрут приложения angular (/) Я могу получить сообщение об ошибке на /api.

Это мой файл конфигурации:

server {
        listen 80;
        server_name example.nl *.example.nl;

        access_log /home/example/logs/access.log;
        error_log /home/example/logs/error.log;

        root /home/example/public_html;

        location /api {
                root /home/example/public_api/public;
                index index.php;

                try_files $uri $uri/ /index.php?$query_string;

                location ~ \.php$ {
                        include snippets/fastcgi-php.conf;
                        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                }
        }

        location / {
                index index.html;
                try_files $uri$args $uri$args/ /index.html;
        }
}

Когда я удалил последний блок, у меня появилась ошибка: open() "/usr/share/nginx/html/index.php" failed (2: No such file or directory)

Но я говорю root /home/example/public_api/public;. Почему выбирают /usr/share/nginx/html?

/usr/share/nginx/html мой default маршрут.

Обновить

Nginx теперь читает правильный каталог, но PHP не работает, это мой обновленный файл конфигурации:

server {
        listen 80;
        server_name example.nl *.example.nl;

        access_log /home/example/logs/access.log;
        error_log /home/example/logs/error.log;

        root /home/example/public_html;

        location /api {
                alias /home/example/public_api/public;
                index index.php;
                try_files $uri $uri/ /index.php?$query_string;

                location ~ \.php$ {
                        include snippets/fastcgi-php.conf;
                        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                }
        }

        location / {
                index index.html;
                try_files $uri$args $uri$args/ /index.html;
        }
}

В журнале ошибок я получаю:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

Это контент, который я получаю в браузере: File not found.

А это содержимое завитка (/api): <html> <head><title>301 Moved Permanently</title></head> <body bgcolor="white"> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx/1.10.0 (Ubuntu)</center> </body> </html>

И это завиток содержимого /api/index.php: File not found.

После долгих поисков я наконец нашел ответ:

server {
        listen 80;
        server_name example.nl *.example.nl;

        access_log /home/example/logs/access.log;
        error_log /home/example/logs/error.log;

        root /home/example/public_html;

        location ^~ /api {
                alias /home/example/public_api/public;
                try_files $uri $uri/ @laravel;
                index index.php;

                location ~ \.php$ {
                        fastcgi_split_path_info ^(.+\.php)(/.+)$;
                        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                        include fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME /home/example/public_api/public/index.php;
                }
        }

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


        location / {
                index index.html;
                try_files $uri$args $uri$args/ /index.html;
        }
}