NGINX INGRESS控制器仍然重定向到SSL



我正在遇到这个问题。我的应用程序需要仅使用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

最新更新