Как добавить несколько location для фронта и бекенда на одном домене
У меня есть фронт на vue.js /var/www/main-front/dist и есть бекенд /var/www/main-back/public Нужно что бы оба проекта работали на одном домене admin.cdin.me , но запросы с перфиксом /api шли на бекенд, а без перфикса обработкой занимался фронт.
Пример текущей конфигурации nginx для обслуживания фронта и бека на одном домене.
server {
server_name admin.cdin.me;
charset utf-8;
root /var/www/main-front/dist;
index index.html index.htm;
location / {
try_files $uri /index.html;
proxy_read_timeout 600s;
add_header X-Robots-Tag "noindex, nofollow";
}
location /api {
root /var/www/main-back/public;
index index.php;
try_files $uri $uri/ /index.php?$query_string;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
proxy_read_timeout 600s;
add_header X-Robots-Tag "noindex, nofollow";
}
}
error_log /var/log/nginx/vue-app-error.log;
access_log /var/log/nginx/vue-app-access.log;
listen 443 ssl; # Управляется Certbot
ssl_certificate /etc/letsencrypt/live/admin.cdin.me/fullchain.pem; # Управляется Certbot
ssl_certificate_key /etc/letsencrypt/live/admin.cdin.me/privkey.pem; # Управляется Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # Управляется Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # Управляется Certbot
}
server {
if ($host = admin.cdin.me) {
return 301 https://$host$request_uri;
} # Управляется Certbot
listen 80;
server_name admin.cdin.me;
return 404; # Управляется Certbot
}
RouteServiceProvider
{
$this->configureRateLimiting();
$this->routes(function () {
Route::middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
});
}
При попытке обратиться к эдпоинту https://admin.cdin.me/api/delete-domains
Route::post('/delete-domains', DeleteDomains::class);
Получаю ошибку
405 Not Allowed
2023/07/03 14:21:49 [error] 25732#25732: *374891235 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client:, server: admin.cdin.me, request: "POST /api/api/delete-domains HTTP/1.1", upstream: "fastcgi://unix:/run/php/php-fpm.sock:", host: "admin.cdin.me"
Источник: Stack Overflow на русском