azure - 在后端服务中发起的 Nginx Ingress 服务调用未重定向到 https
问题描述
我在后端发起的呼叫中遇到 https 重定向问题。我有一个具有以下设置的 Nginx 入口控制器:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-sample
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/affinity: cookie
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: sample
servicePort: 8080
当客户端通过浏览器访问页面时它工作正常 - 它使用 https 与负载均衡器联系,并且从负载均衡器到集群中 pod 的流量使用 HTTP(因此 SSL 在 LB 级别终止,客户端被迫使用HTTPS)。但是,当我尝试从我的 Java 应用程序调用使用 HTTP 的 URL(就像客户端正在做的那样)时,我希望被自动重定向到 HTTPS。我收到正确的响应(308 永久重定向),但我的呼叫不会自动转移到 https。是否缺少一些注释?
解决方案
在我的 Java 应用程序中,我使用的是 Apache Http Client 4.5.5 版。此客户端使用处理重定向的 DefaultRedirectStrategy 类。我检查了实现,在这个版本中它不处理代码 308(不重定向)。因为我不想更改应用程序代码中的任何内容,所以我发现可以更改 Nginx 使用的重定向代码。可以通过 ConfigMap 来实现:
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: nginx-ingress
chart: nginx-ingress-0.17.1
component: "controller"
heritage: Tiller
release: sample-nginx
name: sample-ingress-controller
data:
http-redirect-code: "301"
4.5.5 版中的 Apache Http 客户端使用 301 响应代码进行重定向,因此现在一切正常。最近还有一个对 Apache Http Client repo 的提交,它处理 308 响应代码的方式与 301 相同。
推荐阅读
- pyspark - GraphFrames 的 PySpark 异常
- pytorch - 使用 dataloader pytorch 构建数据集出现错误无法导入名称“read_data_sets”
- python-3.x - Using a function to print the characters from a file?
- reactjs - 将 req.body 从 React 发送到 Express,然后发布到 api
- python - 图像插入无法正常工作。它作为框架出现在窗口上,但没有加载我要添加到框架中的特定图像
- ignite - Apache Ignite Web 控制台
- python - 尝试使用 ftplib 和 storbinary ==> UnicodeEncodeError 存储 png 图像
- r - 为什么 lubridate mdy() 在 lapply() 中返回错误?
- sql - 两个链接服务器中连接两个数据库时的查询
- mysql - 所选项目不必出现在 GROUP BY 子句中或在聚合函数中使用