我正在尝试在 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/