gpt4 book ai didi

ssl - 您如何找到 Kubernetes 终止 SSL 的请求的原始协议(protocol)(或端口)?

转载 作者:太空宇宙 更新时间:2023-11-03 13:49:17 24 4
gpt4 key购买 nike

我想实现以下重定向并确保它们全部发生在一个步骤中:

我在 Digital Ocean 上有一个 Kubernetes (1.15.5) 集群,使用 stable/nginx-ingress(通过 helm 安装)并使用 cert-manager 处理 SSL .

在我的 Ingress 配置中,我禁用了 ssl 重定向,因为我想在服务本身中处理它:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: proxy
namespace: default
annotations:
kubernetes.io/tls-acme: "true"
kubernetes.io/ingress.class: "nginx"
certmanager.k8s.io/issuer: "letsencrypt-prod"
certmanager.k8s.io/acme-challenge-type: http01
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
tls:
- hosts:
- example.com
- www.example.com
secretName: tls-example-com
rules:
- host: example.com
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80
- host: www.example.com
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80

我的一项服务是 nginx 服务器:

server {
server_name example.com;
return 301 https://wwww.$host$request_uri;
}

server {
server_name www.example.com;

if ($scheme != "https") {
return 301 https://$host$request_uri;
}

# app
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}

然而,$scheme 在这里,始终是“http”,这是有道理的,因为我的服务只在端口 80 上接收请求。但正如原始地址(主机信息)被转发到我的服务,我怎样才能找到原来的端口是什么?

最佳答案

ingress controller 设置的 nginx 充当反向代理,并插入 X-Forwarded-* header 供其背后的服务读取。您的服务必须使用这些来获取正确的客户端 ip、端口或方案。

对于 nginx,你可以使用 $http_x_forwarded_proto:

  if ($http_x_forwarded_proto != "https") {
return 301 https://$host$request_uri;
}

关于ssl - 您如何找到 Kubernetes 终止 SSL 的请求的原始协议(protocol)(或端口)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58749392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com