[英]Kubernetes Nginx Ingress HTTP to HTTPS redirect via 301 instead of 308?
[英]Kubernetes nginx controller: avoid loading assets (css, js, etc.) via 302 redirect to https in browser
我有一個帶有 nginx controller(通過 helm 安裝)的本地 kube.netes 集群 (k3s)。 我有兩個服務(Spring-Boot myapp 和一個 auth-server (OAuth2))。
我試圖讓我的應用程序僅適用於 http。 因此,我通過以下方式定義了一個入口資源:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/configuration-snippet: |-
if ($uri = /){
return 302 http://$http_host/myapp/;
}
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
ingressClassName: nginx
rules:
- host: myapp.cloud
http:
paths:
- path: /myapp
pathType: Prefix
backend:
service:
name: myapp
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: auth-server
port:
number: 8080
我還在 nginx-controller config-map 中添加了以下參數:
hsts: "false"
ssl-redirect: "false"
hsts-max-age: "0"
我還在瀏覽器(Safari 和 Firefox)中清除了 HSTS。 我的兩個后端服務都禁用了 SSL (server.ssl.enabled=false)。
加載http://myapp.cloud
時,我被正確重定向到 auth-server ( http://myapp.cloud/login
) 的登錄頁面。 但是,頁面未正確加載,因為未加載 static 資產(js、css)。 相反,加載它們的請求會通過 302 重定向到與 https 相同的資源。由於 nginx 的默認偽造證書無效,這些不會被加載。
如果我直接在瀏覽器中訪問這些資產(例如http://myapp.cloud/assets/style.css
),我也會被重定向 302 到http://myapp.cloud/assets/style.css
而這不會加載,因為 nginx 證書無效。
如果我直接通過 http 端口轉發到 k8s 服務,它們將被正確加載。
是否有可能僅使用 http 進行這項工作,還是我絕對需要使用證書管理器等並通過 https 進行這項工作? 我的配置/設置中缺少什么?
我已經決定 go 使用自簽名證書啟用 HTTPS,我認為目前沒有辦法解決它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.