繁体   English   中英

Django 容器拒绝 nginx 容器流量

[英]Django container is rejecting nginx containers traffic

我有一个非常简单的设置,一个 pod 中的单个 django 容器和另一个 pod 中的 nginx 容器。 我使用 nginx 是因为我想将 django 应用程序投入生产,并且我需要一个像 nginx 这样的实际 Web 服务器来在网站上放置一个 ssl 证书。

问题是 django 似乎拒绝了来自 nginx 容器的所有流量,因为 Web 浏览器在浏览到 localhost 时出现 502 bad gateway 错误并且 nginx 日志显示:

*3 recv() failed (104: Connection reset by peer) while reading response header from upstream

我已经在 django 设置中添加了 127.0.0.1 和 localhost 到允许的主机。

下面是我通过配置映射加载的带有 nginx 配置的 kubernetes 文件。 我已经尝试了大约 30 种不同的 nginx.conf 配置,这只是最新和最简单的一种。

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
          - containerPort: 80
          volumeMounts:
          - name: test-vol
            mountPath: /etc/nginx/conf.d
            readOnly: True
      volumes: 
      - name: test-vol
        configMap:
          name: nginx-conf
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-conf
  labels:
    app: config
data:
  nginx.conf: |
    server {
      server_name               my-django-svc;
      listen                    80;
      location / {
        proxy_pass              http://my-django-svc:8000;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
      }
    }

---
apiVersion: v1
kind: Service
metadata:
  name: my-django-svc
  labels:
    app: web
spec:
  type: LoadBalancer
  ports:
  - port: 8000
  selector:
    app: backend
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  selector:
    matchLabels:
      app: web
      tier: backend
      track: stable
  replicas: 1
  template:
    metadata:
      labels:
        app: web
        tier: backend
        track: stable
    spec:
      containers:
        - name: web
          image: localhost:5000/kubernetes/web
          ports:
            - name: http
              containerPort: 8000
          imagePullPolicy: Always

我不知道如何进一步缩小这个问题。 我看到其他一些人在他们的 django 容器上使用 wsgi,但我不确定它是否有必要或有什么好处。

我已经将 127.0.0.1 和 localhost 添加到允许的主机中

这不是此设置的正确配置,因为连接不是使用127.0.0.1建立的——它是使用 NGINX 中配置的主机名建立的,例如my-django-svc ,因此您必须将添加到 allowed_hosts 设置。

ALLOWED_HOSTS = ['my-django-svc']

您正在尝试使用my-django-svc域访问此 nginx 应用程序,如果没有,请在nginx.conf中像server_name example.com一样具体。 如果您不确定是否将server_name放在nginx.conf文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM