如何获得含氮网页的完整URL?
我想让我的网站的某些页面只能通过https访问。我认为可以在page.erl中正确识别协议,然后重定向到 正确的URL。差不多如何获得含氮网页的完整URL?,url,erlang,nitrogen,Url,Erlang,Nitrogen,我想让我的网站的某些页面只能通过https访问。我认为可以在page.erl中正确识别协议,然后重定向到 正确的URL。差不多 case Protocol of http -> wf:redirect('https://' ++ UrlWithNoProtocol); _ -> ok end 当然,我可以使用noprotocol简单地将URL拆分为“:/”。但问题是,我不知道:如何获取页面的完整URL?我的,由于良好的标记格式,复制到这里: 我会用两种方法中的一种来
case Protocol of
http -> wf:redirect('https://' ++ UrlWithNoProtocol);
_ -> ok
end
当然,我可以使用noprotocol简单地将URL拆分为“:/”。但问题是,我不知道:如何获取页面的完整URL?我的,由于良好的标记格式,复制到这里:
我会用两种方法中的一种来做这件事,这两种方法都意味着把氮气放在像Nginx这样的反向代理后面
第一种方法是在nginx中使用简单的重写规则,强制某些页面使用SSL。例如,在nginx中,如果您希望将所有以/admin开头的请求重定向到HTTPS上,您可以在HTTP部分中执行此操作
location ^~ /admin {
rewrite ^ https://$http_host$request_uri? permanent;
}
您可以在以下位置阅读有关配置nginx以通过SSL运行的信息(一直在底部):
下一个替代方案是(再次)将氮气放在反向代理之后,但这一次,检查是否存在指示请求安全的标头(此标头将由nginx插入)
例如,您可以在nginx配置的“ssl”部分中添加一条规则,该规则设置如下标题:
proxy_set_header X-Forwarded-SSL on;
然后您可以使用wf:header(x_\u ssl)检查报头是否存在
如果您没有使用反向代理,那么最简单的检查可能是通过获取请求,然后是套接字端口来检查站点正在使用哪个端口
Req = wf_context:request_bridge(),
Port = Req:peer_port().
然后,只需检查端口是否为80,是否为http,如果为443,则为https
就我个人而言,我会选择nginx解决方案,因为在任何程度的扩展中,通过添加额外的服务器并让nginx为您进行负载平衡和ssl处理来扩展都是很好的,
因为牛仔身上的对等端口是错误的:)
干杯
peer_port(ReqKey) ->
?GET,
{Port, NewReq} = cowboy_http_req:port(Req),
NewRequestCache = _RequestCache#request_cache{request=NewReq},
?PUT,
Port.