如何解决k8s入口HTTP响应对于重定向无效
我遇到了一个非常有趣的情况。我正在Docker容器内运行apache服务器,并运行mediawiki安装。
运行curl localhost:8081 -v
时,我得到一个有效的响应。同样在浏览器中访问该网站会将我重定向到预期的主页:
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8081 (#0)
> GET / HTTP/1.1
> Host: localhost:8081
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Date: Sun,01 Nov 2020 05:18:33 GMT
< Server: Apache/2.4.38 (Debian)
< X-Powered-By: PHP/7.3.24
< X-Content-Type-Options: nosniff
< Vary: Accept-Encoding,Cookie
< Expires: Sun,01 Nov 2020 05:18:33 GMT
< Cache-Control: private,must-revalidate,max-age=0
< Last-Modified: Sun,01 Nov 2020 05:18:33 GMT
< Location: http://wiki.10.0.0.20.xip.io/wiki/Main_Page
< Connection: close
< Content-Encoding: none
< Content-Length: 0
< X-Request-Id: 76816afe025ea1c1ced4d30d
< Content-Type: text/html; charset=utf-8
<
* Closing connection 0
另一方面,当我通过nginx入口发出请求时,得到以下信息:
* Trying 10.0.0.20...
* TCP_NODELAY set
* Connected to wiki.10.0.0.20.xip.io (10.0.0.20) port 80 (#0)
> GET / HTTP/1.1
> Host: wiki.10.0.0.20.xip.io
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.19.1
< Date: Sun,01 Nov 2020 05:25:49 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 0
< Connection: keep-alive
< X-Powered-By: PHP/7.3.24
< X-Content-Type-Options: nosniff
< Vary: Accept-Encoding,01 Nov 2020 05:25:49 GMT
< Cache-Control: private,01 Nov 2020 05:25:49 GMT
< Location: http://wiki.10.0.0.20.xip.io/wiki/Main_Page
< Content-Encoding: none
< X-Request-Id: d6457fbb4f7cc3d0003206eb
<
* Connection #0 to host wiki.10.0.0.20.xip.io left intact
* Closing connection 0
如您所见,两个响应中的Location
标头是相同的。在我眼中,唯一的区别是Connection: keep-alive
标头,Apache将该标头设置为close
。是否禁止301结果?
当我尝试在Chrome / Safari中打开页面时,pod服务器可以正常工作,但是入口显示ERR_EMPTY_RESPONSE
错误消息,没有任何进一步的指示。此外,将任何查询参数传递给网址,例如?a
,都可以正确显示起始页。这很可能是因为MediaWiki捕获了任何无效的URL,并将其重定向到起始页。
我的入口配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: wiki.10.0.0.20.xip.io
http:
paths:
- path: /(.*)
pathType: Prefix
backend:
service:
name: mediawiki
port:
number: 80
已经通过minikube
创建了kubernetes环境。我正在使用VirtualBox的本地NAT网络适配器。但是对于桥接网络,另一台计算机也是如此。您可以看到连接已建立,就像我看到的301
一样。它还路由到mediawiki / PHP,但随后的响应就无效了。
我按如下方式部署了该服务:
apiVersion: v1
kind: Service
metadata:
name: mediawiki
spec:
type: NodePort
selector:
app: mediawiki
ports:
- protocol: TCP
port: 80
nodePort: 30090
部署如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mediawiki
labels:
app: mediawiki
spec:
replicas: 1
selector:
matchLabels:
app: mediawiki
template:
metadata:
labels:
app: mediawiki
spec:
containers:
- name: mediawiki
image: mediawiki
ports:
- containerPort: 80
volumeMounts:
- name: localsettings
mountPath: "/var/www/html/LocalSettings.php"
readOnly: true
subPath: LocalSettings.php
- name: logo
mountPath: "/var/www/html/resources/assets/wiki.png"
readOnly: true
subPath: logo.png
volumes:
- name: localsettings
configMap:
name: localsettings
- name: logo
configMap:
name: logo
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。