所以我有一个在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之类的主机,则根本无法访问我的应用程序。所以我真的不知道我到底搞砸了什么。一个域会很好,但更重要的是能够加载所需的资源。
任何帮助,技巧和窍门都会得到体现。
柏林的问候。
答案 0 :(得分:1)
我了解到Ingess不应该提供静态文件。应该由像nginx或cdn这样的Web服务器来处理。入口用于路由,不应将其视为Web服务器。因为我不想增加nginx的额外空间,所以我将为Django应用程序使用中间件,该中间件现在称为whitenoise。这将通过gunicorn传送静态文件。 我必须重新考虑将来最好的解决方案是什么,并且可能会使用Google或AWS的CDN。