django - 在 nginx-ingress 后面的 aks 上托管 django

标签 django azure kubernetes azure-aks nginx-ingress

我正在尝试在 Azure kubernetes 服务上的 nginx-ingress 后面托管一个 django 网站,并且我希望我的 django web 显示在某个路径下。

例如当访问默认管理站点时,我想通过 http://example.com/django/admin 而不是 http://example.com/admin 访问它

我尝试了下面的配置,当我访问http://example.com/django/admin时,它会将我转发到http://example.com/admin > 并显示来自默认入口后端的 404 错误,因为我将 django debug 设置为 ture 我认为这意味着入口没有将我的请求发送到我的 django 服务

# path example
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: django-ingress
  labels:
    app: django
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: django-service
          servicePort: 80
        path: /django(/|$)(.*)

所以我尝试curl -I -k http://example.com/django/admin,它显示如下内容

HTTP/1.1 301 Moved Permanently
Server: openresty/1.15.8.2
Date: Wed, 06 Nov 2019 04:14:14 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
Location: /admin/

如果我curl -I -k http://example.com/django/any_valid_page,网站中的任何有效页面都会发生同样的情况,如下所示:

HTTP/1.1 301 Moved Permanently
Server: openresty/1.15.8.2
Date: Wed, 06 Nov 2019 04:14:14 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
Location: /any_valid_page/

我想知道这是因为我使用默认的django开发Web服务器进行测试引起的吗? (即python manage.py runserver)

如果我尝试将其托管在根目录下,如下所示,一切都很好......

# root example
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: django-ingress
  labels:
    app: django
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: django-service
          servicePort: 80
        path: /

最佳答案

尝试添加这个

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: django-ingress
  labels:
    app: django
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    ingress.kubernetes.io/rewrite-target: /django
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: django-service
          servicePort: 80
        path: /django

关于django - 在 nginx-ingress 后面的 aks 上托管 django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58723145/

相关文章:

python - 在 Django Admin 中使用带有自定义 __init__ 的表单

python - 为什么我的服务的其他部分不能轻松使用 tastypie?我在 tastypie 资源和我的核心服务中有重复的代码

azure - Azure DevOps 管道中的 "Job is pending"消息

django - 如何将 Kubernetes 中的 secret 提取到 GitHub 操作中以运行 Django 迁移以进行 AKS 部署?

Go 模板 - 检查 json 列表中是否存在键

firebase - 使用Cloud Endpoints和Firebase调用ESP时出现“409 Audience not allowed”错误

python - 如何在 Python Django 中附加到数组字段

json - 如何在 Django 1.9 中查询复杂的 JSONB 字段

asp.net - 如何从网页将大文件上传到 Azure blob

python - 为什么 Azure DevOps Server 交错输出