Polymer pretty URL在刷新或手动导航时不起作用,抛出NGINX错误

时间:2017-04-14 20:05:08

标签: nginx deployment polymer kubernetes polymer-starter-kit

当我登陆我的应用程序时,主页正常工作。当我手动导航到像(myapp.com/registration-page)这样的漂亮网址时,我得到:

  

404 Not Found nginx / 1.11.5

当我使用应用程序中的链接/按钮浏览应用程序时,它可以正常运行,直到我在一个漂亮的URL上刷新页面。然后,我看到同样的错误404 Not Found nginx/1.11.5。  我目前正在使用<app-location><app-route>来处理我的路由。

当我使用polymer serve处于开发模式时,所有浏览器都能正常运行。我的GUESS是它是聚合物问题,而不是nginx问题。在Chrome中一切正常,但在Firefox或Safari中无效。几个月前,我对旧版本的Polymer也有类似的令人耳目一新的问题。我通过将hashbang设置为false(在routing.html文件中)来解决它:

page({
      hashbang: false
    });

我在<base href=“/" />文件的<head>标记中添加了index.html,并且有效。

但是现在我已经使用了新的Polymer Starter Kit(聚合物#^ 1.7.0)作为我的应用程序的基础(虽然我做了很多改动)。 PSK中的项目文件的结构与旧的Polymer完全不同,后者存在app.js文件,而PageJs用于路由。

现在没有routing.html文件,我不确定我需要更改什么。我已经尝试将<base href=“/" />添加到index.html文件中,但它无效。

*注意:如果有助于我使用Google Cloud Server和Docker容器+ kubernetes来部署我的nginx。

之前是否有人遇到此问题并知道如何解决?

2 个答案:

答案 0 :(得分:0)

因此,当您定义用于在集群外部公开服务的入口时,您可以指定诸如服务在哪个主机名上链接的内容。

因此,您指定ing.spec.backend.serviceNameing.spec.backend.servicePort映射到ing.spec.rules.host

因此,如果您使用其他URL访问入口,则入口可能无法知道将流量路由到的目标服务(到哪个目标服务)。

一种解决方法是,您可以在入口中再添加一个条目,将漂亮网址(在您的情况下为myapp.com)映射到同一服务。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
spec:
  rules:
  - host: old.com
    http:
      paths:
      - path: /registration-page
        backend:
          serviceName: my-app-svc
          servicePort: 80

  - host: myapp.com
    http:
      paths:
      - path: /registration-page
        backend:
          serviceName: my-app-svc
          servicePort: 80

请注意,在上面的例子中,第二个条目host是不同的。

Ingress docs:https://kubernetes.io/docs/concepts/services-networking/ingress/

答案 1 :(得分:0)

为了解决这个问题,我最终只是在App Engine上启动了我的整个Polymer前端,同时将我的后端保留在Compute Engine上。