Ingress Nginx不会加载Django应用程序的资源

所以我有一个在K8中运行的django应用程序,但是我的资源(如.css)无法加载。我总是收到他们的404。我使用Ingress-Nginx路由传入流量。

入口配置如下:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-aboi
  annotations:
    kubernetes.io/ingress.class: nginx
    ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - secretName: tls-cert
  rules:
  #- host: dev.<ip>.xip.io
  - http:
      paths:
      - path: /
        backend:
          serviceName: django-service
          servicePort: 8000

对于index.html,我尝试使用斜杠而不使用斜杠。因为我在这里的stackoverflow线程中找到了此信息。 Kubernetes Ingress Nginx loading resources 404 可悲的是,这并不能解决我的问题。

Index.html

<html lang="en">
    <head>
    <title>Log in | Django site admin</title>
    <link rel="stylesheet" type="text/css" href="static/admin/css/base.css">
    <link rel="stylesheet" type="text/css" href="static/admin/css/login.css">
    <link rel="stylesheet" type="text/css" href="static/admin/css/responsive.css">
    </head>
<body>
</body>
</html>

在此配置下使用nginx之前,但是如果我可以单独使用ingress-nginx组件处理流量,则我不想使用其他pod

nginx.conf

server {
   listen      443 ssl;
   location /media  {
       alias /website/media;
   }

   location /static {
       alias /website/static;
   }
   location / {
       uwsgi_pass  django;
       include     /etc/nginx/uwsgi_params;
       uwsgi_read_timeout 300;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto https;
       proxy_set_header Host $http_host;
       proxy_redirect off;
   }

所以总结一下。我可以使用该应用程序,但没有资源。这些资源位于django应用程序窗格之一中。我检查了它们是否在里面,它们也是如此。 我还尝试过这样的重写代码片段,以匹配之前的nginx配置。它也不起作用。

    nginx.ingress.kubernetes.io/configuration-snippet: |
     rewrite (.*)/media/(.*) /website/media/$2 break;
     rewrite (.*)/static/(.*) /website/static/$2 break;

顺便说一句。如果使用xip.io之类的主机,则根本无法访问我的应用程序。所以我真的不知道我到底搞砸了什么。一个域会很好,但更重要的是能够加载所需的资源。

任何帮助,技巧和窍门都会得到体现。

柏林的问候。

jbs1zgh 回答:Ingress Nginx不会加载Django应用程序的资源

我了解到Ingess不应该提供静态文件。应该由像nginx或cdn这样的Web服务器来处理。入口用于路由,不应将其视为Web服务器。因为我不想增加nginx的额外空间,所以我将为Django应用程序使用中间件,该中间件现在称为whitenoise。这将通过gunicorn传送静态文件。 我必须重新考虑将来最好的解决方案是什么,并且可能会使用Google或AWS的CDN。

本文链接:https://www.f2er.com/3159106.html

大家都在问