nginx响应404 Not Found(单页应用程序)

时间:2018-02-16 20:32:39

标签: nginx server single-page-application

我有一个带有常规浏览器路由器的单页应用程序(没有哈希)。每当有人浏览页面并点击刷新按钮时,nginx会尝试在此路径上查找文件。因此,如果某人在mypage.com/about nginx上查找about文件并以404 Not Found响应。如何解决这个问题?

我正在考虑使用通配符指定位置 - mypage.com/*除了/api,因为此应用中的每个后端端点都以api开头。如何匹配除一个以外的所有路径?这就是我的配置的样子:

upstream frontend {
    server frontend:3000;
}

upstream backend {
    server backend:8000;
}

server {
    listen 80;

    location /api {
        proxy_pass http://backend;
        proxy_set_header Host            \$http_host;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
    }

    location / {
        proxy_pass http://frontend;
        proxy_redirect default;
    }
}

1 个答案:

答案 0 :(得分:1)

为什么您的代理请求前端应用?我假设您正在使用某种开发服务器来为您的前端应用程序提供服务。最好将前端应用程序构建为静态文件,并将它们作为常规静态文件提供,除了nginx之外没有任何服务器。

至于您的问题,如果您将前端应用程序构建到静态文件中,您可以在nginx中配置位置,如下所示:

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

其中index.html是应用程序的入口点,根路径应配置为放置在存储位置。

如果您仍想通过nginx从开发服务器提供前端应用程序,您可以配置nginx来处理来自上游的错误并将错误页面指向开发服务器的根目录。

在这种情况下,以下指令应该可以帮助您: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors http://nginx.org/en/docs/http/ngx_http_core_module.html#error_page