我们正在Azure AKS上运行几个k8s群集。 该服务(幽灵博客)位于Nginx入口后面,并由Letsencrypt提供的证书进行保护。所有这些都可以正常工作,但是重定向行为是我遇到的麻烦。
Ingress正确地从http://whatever.com重定向到 https://whatever.com —问题在于它使用308 重定向,只要用户共享一个即可删除所有帖子/页面元 网站上的页面。
此问题导致在大多数社交媒体资源上共享网站任何页面的用户都收到“预览链接”,该页面的标题和页面元预览不起作用,而是由“ 308永久重定向”代替文字-看起来像这样:
从ingress-nginx docs over here中,我看到这是预期的行为(即308重定向),我认为这不是在社交共享服务尝试创建页面预览时与社交共享服务的交互。
尽管默认情况下Facebook(或twitter等)直接指向https网站可以解决此问题,但我目前无法强制这些网站将https视为将用于创建https的内容。预览。
我还可以看到,我应该能够将重定向代码设置为所需的内容(我相信301重定向将使Facebook等人能够正确提取帖子/页面摘要元),{ {3}}。
问题是,当我按指定添加重定向代码注释时:
nginx.ingress.kubernetes.io/permanent-redirect-code: "301"
尽管能够(从我的kubectl代理中)看到重定向代码注释正确应用,但我仍然在资源上获得308重定向。作为参考,我在Ingress上的注释的完整列表如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ghost-ingress
annotations:
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/permanent-redirect-code: "301"
重申-我的问题是;通过自定义错误代码(在我的情况下为301)强制重定向到https的正确方法是什么?
答案 0 :(得分:3)
我的猜测是TLS重定向阴影nginx.ingress.kubernetes.io/permanent-redirect-code
注释。
您实际上可以为ConfigMap
更改nginx-configuration
,以使默认重定向为301。这就是您的nginx入口控制器用于nginx本身的配置。 ConfigMap
看起来像这样:
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
name: nginx-configuration
namespace: ingress-nginx
data:
use-proxy-protocol: "true"
http-redirect-code: "301"
您可以找到有关ConfigMap
选项here的更多信息。请注意,如果您更改ConfigMap
,则必须重新启动nginx-ingress-controller
窗格。
您也可以进入nginx-ingress-controller
窗格,并查看控制器创建的实际nginx配置:
kubectl -n ingress-nginx exec -it nginx-ingress-controller-xxxxxxxxxx-xxxxx bash
www-data@nginx-ingress-controller-xxxxxxxxx-xxxxx:/etc/nginx$ cat /etc/nginx/nginx.conf
答案 1 :(得分:0)
这些说明适用于Azure AKS用户,但是此解决方案的Facebook /社交媒体预览链接显示为308永久重定向的解决方案可能适用于任何云提供商(尽管尚未经过测试)-您只需要进行更改您登录/获取凭据等的方式。
感谢Rico提供解决方案!由于仅在Facebook上进行了测试,因此您可能会或可能不想走ConfigMap应用程序路线(Rico在上面提到过),这将通过手动编辑ConfigMap来完成,而不是使用kubectl apply -f
来应用本地保存的。 >
az login
)的皮卡AZ凭证az aks get-credentials --resource-group yourGroup --name your-cluster
az aks browse --resource-group yourGroup --name your-cluster
"data": {
"some-other-setting-here": "false",
"http-redirect-code": "301"
}
除了最后一个键/值行,您需要在每个键/值行后加一个逗号。helm upgrade ngx-ingress stable/nginx-ingress
其中ngx-ingress是您的头盔安装名称。还要注意,使用'--reuse-values'标志将导致您的升级失败(re:https://github.com/helm/helm/issues/4337)helm list
来找到它。curl myhttpdomain.com
您应该会收到类似这样的信息:```
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.15.3</center>
</body>
</html>
```
这里要注意的一件事是,如果您要更改301重定向以尝试修复facebook或其他社交媒体属性之一(推特等)的预览链接,则很可能会这样不会修复您已链接到的任何页面/帖子的任何链接-至少不会立即修复。
所有社交媒体资源均使用密集缓存来限制其资源使用量,但您可以通过链接到以前未引用的新页面/帖子来检查以上内容是否解决了预览链接问题。
因此,nginx-ingress使用代码308的主要原因是因为在您发送POST请求的情况下(与您使用浏览器进行的常规GET请求链接相反),它使“主体” /有效负载保持不变)。
对我而言,这不是问题,但是如果出于任何原因将其发布到http地址,并希望将其无缝重定向,则可能无法正常工作-在您切换到帖子中讨论的301重定向后,
但是,如果您在发送POST请求时不期望无缝重定向(我想大多数人可能不是,我知道我不是),那么我认为这是修复Facebook 308永久重定向行为的最佳方法。
>