nginx入口重定向到基于报头的https

ih99xse1  于 2023-02-18  发布在  Nginx
关注(0)|答案(2)|浏览(204)

我有一个EKS设置,其中流量以下列方式发送。
用户-〉Cloudfront-〉ALB-〉EKS。EKS有一个NginX入口控制器。
目前"force-ssl-redirect"已启用,因此NginX入口控制器将所有HTTP流量重定向到HTTPS。
我希望Cloudfront使用HTTP与ALB连接。因此,我希望在NginX控制器中有一个条件HTTPS重定向。
因此,
1.我将为来自Cloudfront的请求设置自定义标头
1.如果找到这个新的头,我希望NginX控制器返回HTTP中的正确响应,如果没有,我希望重定向到HTTPS。
如何才能做到这一点?

icomxhvb

icomxhvb1#

我假设您希望在Cloudfront上添加一个自定义头,然后在Nginx端进行重定向。
1.您可以通过Cloudfront Functions -https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-functions.html向请求添加自定义标头
1.然后,我认为您需要使用Ingress Kubernetes资源中的nginx.ingress.kubernetes.io/configuration-snippet注解来向Nginx位置添加自定义配置。

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: redirect
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
        if ($http_x_custom_header) {
            return 301 http://$host$request_uri;
        }
        return 301 https://$host$request_uri;
spec:
  rules:
  - host: ...
gkl3eglg

gkl3eglg2#

您可以使用NginX配置Map进行条件HTTPS重定向。
您需要创建带有自定义代码段的Nginx配置,以检查CloudFront设置的自定义头。

apiVersion: v1
Kind: ConfigMap

Metadata:
Name: nginx-config

Data:

Ssl-redirect-snippet:  |
If ($http_cf_custom_header) {
Return 301 http://$server_name$request_uri;
}
Return 301 https://$server_name$request_uri;

如果头存在,NginX返回301重定向和HTTP;如果不存在,它将使用HTTPS重定向到相同URL
现在您需要将配置Map添加到NginX入口控制器

apiVersion: networking.k8s.io/v1
Kind: Ingress
Metadata:
Name: my-ingress
Annotations:
nginx.ingress.kubernetes.io/configuration-snippet:  |
Include /etc/nginx/ssl-redirect-snippet;

Spec:
Rules:
-host: my.domain.com
Http:
Paths:
-Path: /
pathType: Prefix
Backend:
Service:
Name: my-service
Port:
Name: http

转发到ALB时,您需要将CLoudFront设置为包含“http_cf_custom_header”。请查看此官方page,有关详细信息,请查看AWS官方documentation

相关问题