我遇到了这个问题。我的应用程序仅需要使用WebSocket在SSL下接收连接。应该强制HTTP请求不被重定向。我的入口配置是
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: in-camonline
namespace: cl5
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.org/websocket-services: "svc-ws-api"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
ingress.kubernetes.io/affinity: "ClientIP"
spec:
tls:
- hosts:
- foo.bar.com
secretName: cl5-secret
rules:
- host: foo.bar.com
http:
paths:
- path: /socket.io
backend:
serviceName: svc-ws-api
servicePort: 8000
- path: /
backend:
serviceName: svc-http-service
servicePort: 80
我还禁用了ssl-redirect
,将全局项添加到ConfigMap中
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-configuration
namespace: ingress
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
data:
#use-proxy-protocol: "false"
ssl-redirect: "false"
现在,如果我确实使用curl请求,请求将不会被重定向。如果我尝试运行前端应用程序,则WSS之后的每个请求都将被强制重定向为使用HTTPS
Request URL: http://foo.bar.com/2/symbols
Request Method: OPTIONS
Status Code: 307 Internal Redirect
Referrer Policy: no-referrer-when-downgrade
关于如何实现这一目标的任何建议?
答案 0 :(得分:1)
最后,我整理了一下。如果有人正在阅读此书,那么您并不孤单!
开个玩笑,driver.takeScreenshot()
在第一个HTTPS调用之后设置了头文件nginx-controller
(在我的情况下是socket.io轮询)。此标头强制浏览器将TLS用于下一个请求。您可以在https://developer.mozilla.org/it/docs/Web/HTTP/Headers/Strict-Transport-Security
我所做的是禁用在Strict-Transport-Security
的ConfigMap对象上添加条目hsts: false
的选项。
您可以在这里https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#hsts找到更多
希望这可以帮助您:)
答案 1 :(得分:0)
还有另一种解决方法。
如果要禁用HSTS,只需将最大年龄设为零即可。像这样!
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($scheme = https) {
add_header Strict-Transport-Security "max-age=0;";
}