Nginx将除少数路由外的所有路由到文件夹

时间:2019-02-22 02:32:58

标签: nginx redirect server webserver url-redirection

我的nginx配置如下:

server {
    listen 80;
    server_name bla;

    location /api {
      include uwsgi_params;
      uwsgi_read_timeout 600;
      uwsgi_pass unix:/var/www/html/site.sock;
    }

    location / {
      root /var/www/html;
      try_files $uri $uri/ /index.html;
    }
}

基本上,我有一个Vue前端和一个Flask / uWSGI后端。该第一个位置规则涵盖了所有后端请求(/ api)。所有前端请求都包含在第二个中。效果很好。

我想做的是,有一些没有前缀api/的路由例外,在这些路由中,它们转发到后端而不是前端。

例如,我希望能够将/this-is-an-api-request发送到后端,而不是转发到index.html。我无法使用重定向,因为存在一些POST请求,而且重定向这些请求还没有成功。

1 个答案:

答案 0 :(得分:0)

您可以使用error_page将所有导致404错误的请求转发到后端(docs)。

server {
    listen 80;
    server_name bla;

    location /api {
        include uwsgi_params;
        uwsgi_read_timeout 600;
        uwsgi_pass unix:/var/www/html/site.sock;
    }

    location / {
        error_page 404 = @error;
        root /var/www/html;
    }

    location @error {
        include uwsgi_params;
        uwsgi_read_timeout 600;
        uwsgi_pass unix:/var/www/html/site.sock;
    }
}