首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >入口Nginx不会加载Django应用程序的资源

入口Nginx不会加载Django应用程序的资源
EN

Stack Overflow用户
提问于 2019-11-05 13:51:36
回答 1查看 810关注 0票数 0

因此,我在K8中运行了一个django应用程序,但是我的资源,比如.css,不会被加载。我总是收到404的。我使用路由传入的通信量。

入口配置如下所示:

代码语言:javascript
复制
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,我试着用前导斜杠和不带斜杠。因为我在这里的堆栈溢出线程中找到了这个信息。Kubernetes Ingress Nginx loading resources 404很遗憾,它不能解决我的问题。

Index.html

代码语言:javascript
复制
<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组件来处理流量,那么我不想使用另一个pod。

nginx.conf

代码语言:javascript
复制
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配置。也不起作用。

代码语言:javascript
复制
    nginx.ingress.kubernetes.io/configuration-snippet: |
     rewrite (.*)/media/(.*) /website/media/$2 break;
     rewrite (.*)/static/(.*) /website/static/$2 break;

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

任何帮助,提示和技巧都会被认可。

来自柏林的亲切问候。

EN

回答 1

Stack Overflow用户

发布于 2019-11-06 20:14:02

我了解到静态文件不应该由Ingess提供。它应该由一个web服务器来处理,比如cdn中的nginx。入口是用于路由的,不应将其视为web服务器。因为我不想为nginx提供额外的吊舱,所以我将为Django应用程序使用一个中间件,目前称为whitenoise。这将通过火绒角传送静态文件。我必须重新考虑未来最好的解决方案是什么,并且可能会使用来自Google或AWS的cdn。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58712778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档