Kubernetes Ingress Nginx 加载资源时出现404错误

8

我们正在尝试在Kubernetes上运行网站(使用nginx容器)。 我们使用ingress路由到该站点,这是我们的配置:

nginx-conf:

server {
  listen 80;
  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    try_files $uri $uri/ /index.html =404;
  }
}

Kubernetes部署:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: mywebsite
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: mywebsite
    spec:
      containers:
      - name: mywebsite
        image: containerurl/xxx/mywebsite:latest
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: mywebsite
spec:
  ports:
  - port: 82
    targetPort: 80

  selector:
    app: mywebsite

入口配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myIngress
  annotations:
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - xxx.com
    secretName: tls-secret
  rules:
  - host: xxx.com
    http:
      paths:
      - path: /mywebsite
        backend:
          serviceName: mywebsite
          servicePort: 82

当我访问xxx.com/mywebsite时,index.html被加载了,但是css和js没有被加载(404错误)。
index.html:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>My Website</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <link href="/styles.30457fcf45ea2da7cf6a.css" rel="stylesheet"></head>
  <body>
  <div id="react-root"></div>
  <script type="text/javascript" src="/app.171d6a95cf24d8abab14.js"></script></body>
</html>

因为它试图在这里获取资源,例如CSS:

xxx.com/styles.30457fcf45ea2da7cf6a.css

...而不是:

xxx.com/mywebsite/styles.30457fcf45ea2da7cf6a.css

我尝试了不同的方法,例如:

nginx.ingress.kubernetes.io/add-base-url
nginx.ingress.kubernetes.io/app-root

你好,

我遇到了一些技术问题,已经尝试了几种解决方法,但似乎都没有效果。

你有什么建议吗?感谢你的帮助。

祝好, Peter

1个回答

5
这不是nginx路由问题,而是浏览器试图从你的域名根目录访问绝对URI。请使用相对URI(删除前导斜杠):
<link href="styles.30457fcf45ea2da7cf6a.css" rel="stylesheet"></head>
<script type="text/javascript" src="app.171d6a95cf24d8abab14.js"></script></body>

1
我也遇到了同样的问题。我已经删除了前导斜杠,但仍然收到相同的错误。/runtime.js net::ERR_ABORTED 404 (Not Found) - rakesh
@rakesh 你解决了问题吗?我也遇到了同样的问题。 - rholdberh
@rakesh 你解决问题了吗?我也遇到了同样的问题。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接