Я пытаюсь создать приложение 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;
}
}