Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在kubernetes上使用nginx和gunicorn提供Django静态文件_Django_Docker_Nginx_Kubernetes - Fatal编程技术网

在kubernetes上使用nginx和gunicorn提供Django静态文件

在kubernetes上使用nginx和gunicorn提供Django静态文件,django,docker,nginx,kubernetes,Django,Docker,Nginx,Kubernetes,我用Docker、nginx和gunicorn开发了Django应用程序 我试图使用nginx来提供静态文件,但是我得到了404 这是我的nginx.conf: events { worker_connections 1024; } http { upstream backend { ip_hash; server backend:8000; } server { location /static {

我用Docker、nginx和gunicorn开发了Django应用程序

我试图使用nginx来提供静态文件,但是我得到了404

这是我的nginx.conf:

events {
    worker_connections  1024;
}

http {

    upstream backend {  
        ip_hash;
        server backend:8000;
    }

    server {

        location /static {    
            autoindex on;    
            alias /api/static; 
        }

        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://backend;
        }
        listen 80;
    }

}
kubernetes清单文件: Nginx和app是同一部署中的两个独立容器

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: backend
  namespace: staging
  labels:
    group: backend
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: <host name>
    http:
      paths:
      - path: /
        backend:
          serviceName: backend
          servicePort: 8000
---
apiVersion: v1
kind: Service
metadata:
  name: backend
  namespace: staging
  labels:
    group: backend
spec:
  selector:
    app: backend
  ports:
  - port: 8000
    targetPort: 8000 
    name: backend
  - port: 80
    targetPort: 80
    name: nginx 
---

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: backend
  namespace: staging
  labels:
    group: backend
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: backend
        group: backend
    spec:
      containers:
      - name: nginx
        image: <image>
        command: [nginx, -g,'daemon off;']
        imagePullPolicy: Always
        ports:
          - containerPort: 80

      - name: backend
        image: <image>
        command: ["gunicorn", "-b", ":8000", "api.wsgi"]
        imagePullPolicy: Always
        ports:
          - containerPort: 8000
nginx的Dockerfile:

FROM nginx:latest

ADD app/api/static /api/static

ADD config/nginx /etc/nginx

WORKDIR /api

我检查了nginx容器,所有静态文件都存在于/api目录中

您需要创建一个卷,并与nginx和您的django后端共享它,然后在该卷中收集static!但有一个问题。对于pvc存储,您的群集需要在
accessModes
中支持
ReadWriteMany
!如果您没有访问权限,您可以创建一个有两个容器的应用程序!您的django后端和nginx!然后您可以在它们之间共享卷

如果执行
kubectl run-it--rm test--image=busybox--restart=Never--sh
,然后键入
wget-backend:80/static
,会发生什么情况?第一个问题可能是ingress仅将端口8000重定向到gunicorn(在此过程中绕过nginx),但可能存在一些额外的调优问题。我得到相同的未找到错误:
\wget backend:80/静态连接到后端:80 wget:server返回错误:HTTP/1.1 404未找到
FROM nginx:latest

ADD app/api/static /api/static

ADD config/nginx /etc/nginx

WORKDIR /api