【发布时间】:2017-04-17 09:56:39
【问题描述】:
我正在使用 AWS CloudFront 在访问我的后端之前终止我的 SSL,并且需要将此流量与非 CloudFront 流量区分开来以在 Nginx 中设置 proxy_set_header。
我相信最好的方法是检查 X-Amz-Cf-Id 标头 (added by CloudFront),并在 proxy_set_header 存在时设置它。但是,我知道在 Nginx if 语句中设置 proxy_set_header 是不可能的,这导致了我的问题。
如何仅在存在该标头时设置proxy_set_header 值?
【问题讨论】:
-
当它终止 SSL 时,您不能在亚马逊云前端设置该标头吗?
-
感谢@seb,我尝试将自定义标题设置为标题名称 =
proxy_set_header和值 =X-Forwarded-Proto https,但它没有按预期工作。我需要将它添加到我的 Nginx 配置的特定行中,所以不要认为这种方法会起作用。我的最终目标是告诉我的应用 CF 连接是通过 HTTPS 进行的。 -
我不使用云前端,但快速搜索给了我这个结果:docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/… 所以云前端能够设置标题。如果云前端可以设置标头,那么在此处设置标头比在 nginx 中更有意义。或者您可以搜索并找到此解决方案:serverfault.com/questions/506972/…
-
谢谢,我已经阅读了您链接的那些页面,但无法弄清楚。如前所述,我在 CloudFront 中设置了标头。根据this answer,
proxy_set_header指令设置了 Nginx 发送到后端的标头,所以我相信我仍然需要 Nginx 中的指令,如果我遗漏了什么,请纠正我。 -
我检查了来自 CloudFront 的请求标头,它们包括
CloudFront-Forwarded-Proto: https,所以我设置了proxy_set_header X-Forwarded-Proto $http_cloudfront_forwarded_proto;,这似乎正在完成这项工作。我猜这个变量在不可用时变为 nil 。将进行更多测试并将其标记为答案,如果它坚持。
标签: ssl nginx amazon-cloudfront