我正在尝试在Azure kubernetes服务behide nginx-ingress上托管一个django网站,我想在一个路径下进行django网络展示。
例如访问默认管理网站时,我想访问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: /