在kubernetes上使用nginx和gunicorn提供Django静态文件
我用Docker、nginx和gunicorn开发了Django应用程序 我试图使用nginx来提供静态文件,但是我得到了404 这是我的nginx.conf:在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 {
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