Как настроить location для отдачи статики при любом пути, кроме /api/

Не могу даже понять как сделать просто при любом. Что то типо того, location * {}

server {
    listen          80;
    server_name     example.com;

    root /var/www/html;

    location /api/ {
       proxy_pass http://127.0.0.1:8080;
    }


    location  / {
      root /var/www/build;
    }

  }

В /var/www/build - у меня лежит сборка SPA. (index.html, js/, css/) И мне нужно, что бы я мог загружать SPA, не только заходя на example.com, но и при любом другом example.com/some-route

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Tue, 05 May 2020 18:08:20 GMT
Content-Type: text/html
Content-Length: 2037
Last-Modified: Mon, 04 May 2020 20:42:11 GMT
Connection: keep-alive
ETag: "5eb07e23-7f5"
Accept-Ranges: bytes
Length: 2037 (2.0K) [text/html]
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.

Ответы (1 шт):

Автор решения: Alexey Ten

На самом деле вы хотите что бы любой неизвестный файл открывал index.html. На самом деле я рекомендую не делать этого для папок /js и /css (у вас же нет таких роутов?). В результате получится примерно так:

server {
    listen          80;
    server_name     example.com;

    # сразу указываем правильный root
    root /var/www/build;

    # /api/ проксируем
    location /api/ {
        proxy_pass http://127.0.0.1:8080;
    }

    # если есть файл, то отдаём его, если нет, то отдаём /index.html
    location / {
        try_files $uri /index.html;
    }

    # для папок /js/ и /css/ не отдаём /index.html, это обычно не имеет смысла.
    location /js/ {
        # default
    }

    location /css/ {
        # default
    }
}
→ Ссылка