我正在遇到这个问题。我的应用程序需要仅使用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"
现在,如果我确实使用卷曲请求,则不会重定向请求。如果我尝试运行我的前端应用程序,则在WSS被迫重定向后使用HTTPS
之后,每个请求Request URL: http://foo.bar.com/2/symbols
Request Method: OPTIONS
Status Code: 307 Internal Redirect
Referrer Policy: no-referrer-when-downgrade
关于如何实现这一目标的任何建议?
最后,我对其进行了整理。如果有人正在阅读本文,那么您并不孤单!
开玩笑,nginx-controller
在第一个https呼叫之后将标题Strict-Transport-Security
放置(我的情况下是socket.io进行了轮询)。该标头迫使浏览器将TLS用于下一个请求。您可以在此处阅读有关此标头的更多信息https://developer.mozilla.org/it/docs/web/http/headers/strict-transport-security
我所做的是禁用选项,在ingress-controller
的配置对象上添加条目hsts: false
。您可以在此处找到更多信息希望这可以帮助您:)
还有另一个解决方案。
如果您想禁用HST,则只需将最大值零。像这样!
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($scheme = https) {
add_header Strict-Transport-Security "max-age=0;";
}
链接:https://justin-g.tistory.com/176