1

任何人都可以 1) 告诉我该怎么做,或者 2) 向我指出如何在 Erlang Web 框架中运行/启用/使用 SSL 的资源吗?我在任何文档或在线网络搜索中都找不到任何内容,而且看起来他们邮件列表的最后一篇帖子已经有几年了。

谢谢。

4

1 回答 1

2

在 Erlang Web 应用程序中启用 SSL 的第一步是配置底层 Web 服务器。例如,如果您使用的是 Inets,则可以使用该文件:

config/inets_https.conf:

一个示例配置文件(使用类似 Apache 的语法)如下所示:

ServerName erlangweb_https
ServerRoot docroot
DocumentRoot docroot
BindAddress 0.0.0.0 
Modules e_mod_inets
Port 443
SocketType ssl
SSLCertificateFile my.cert
SSLCertificateKeyFile my.key
SSLVerifyClient 0

您还可以使用“erlang”语法对其进行配置:

[{inets, [...]}].

有关 Erlang Web 服务器配置文件的更多信息,请访问:

http://wiki.erlang-web.org/Eptic/ServerConfiguration

特别是对于 Inets:

http://www.erlang.org/doc/man/httpd.html

设置好之后,您可以在应用程序控制器中将用户重定向到 HTTPS,如下所示(假设服务器使用默认端口):

{redirect, "https://" ++ e_conf:host() ++ "/" ++ wpart:fget("__path")}.

如果您的服务器未使用默认端口,则上述重定向变为:

{redirect, "https://" ++ e_conf:host() ++ ":" ++ e_conf:https_port()
            ++ "/" ++ wpart:fget("__path")}.

有关 Erlang Web 中配置参数的更多信息:

http://wiki.erlang-web.org/ProjectConf

为了减少冗长,你可能想看看Erlang Web annotations。例如,您可以编写如下内容:

?BEFORE.
https(true, _Mod, _Fun, Args) ->
    case wpart:fget("__https") of
        false ->
            Host = e_conf:host(),
            Port = e_conf:https_port(),
            Path = wpart:fget("__path"),
            Redirect = "https://" ++ Host ++ ":" ++ Port  ++ "/" ++ Path,
            {skip, {redirect, Redirect}};
        true ->
            {proceed, Args}
    end.

然后在您的控制器功能强制使用 HTTPS 之前使用它:

?HTTPS(true).
my_function(Args) ->
    ....
于 2012-04-11T07:51:34.913 回答