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



所以我有一个django应用程序在K8中运行,但我的资源,比如.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加载资源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应用程序pod中。我检查了他们是否在里面,他们也在里面。我还尝试了这样的重写片段,以匹配之前的nginx配置。它也不起作用。

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

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

任何帮助,提示&技巧被欣赏。

来自柏林的亲切问候。

我了解到Ingess不应该为静态文件提供服务。它应该由像nginx或cdn这样的web服务器来处理。入口用于路由,不应将其视为web服务器。因为我不想为nginx增加额外的pod,所以我将为Django应用程序使用中间件,目前称为whiteoise。这将通过gunicorn传递静态文件。我必须重新思考未来最好的解决方案是什么,可能会使用谷歌或AWS的cdn。

相关内容

  • 没有找到相关文章

最新更新