将 HTTP 重定向到 HTTPS,除非它来自特定的引荐来源

将 HTTP 重定向到 HTTPS,除非它来自特定的引荐来源

我有一个 http 服务,我的 Web 应用程序在生产和开发期间必须使用它。我想将此http服务上的所有流量重定向到,https除非请求来自lvh.me:9292引荐来源(即我们在开发期间使用的 URL)。我的天真做法如下map

map "$scheme:$http_referrer" $redirect_https {                                                        
    ~/^https/            0;                                                                           
    ~/.*lvh\.me:9292.*/  0;                                                                           
    default              1;                                                                           
}

据我理解,这应该只是将$scheme和连接起来$http_referrer,然后将与我定义的(粗略)表达式匹配。然后重定向写成如下形式:

if ($redirect_http = 1) {                                                                           
    return 301 https://$host$request_uri;                                                          
}

然而总是无论我请求什么 URL(带或不带 https,带或不带匹配的 referrer),都会导致无休止的重定向循环。我是不是误解了某些重要的东西?我简化的正则表达式是否不正确?有没有更好的方法来实现我想要的效果?

相关内容