在Yaws和Cowboy的氮气中自动从端口80重定向到端口433

时间:2014-03-11 09:37:25

标签: linux erlang yaws cowboy nitrogen

我正在使用氮气框架开发我的应用程序,该框架在Yaws和Cowboy Web服务器上运行。我的客户只知道这个'do​​main-name.xx'或'www.domain-name.xx',它默认命中端口80(不安全的http),但总是希望'https://www.domain-name.xx'用于安全的http(端口433) ) - 他们不愿继续进入浏览器。

我在http://nitrogenproject.com/doc/config.html

上看到了为nginx web服务器执行此操作的配置

我请求社区帮助我提供Cowboy和Yaws的配置更改,我可以始终确保无论浏览器条目如何,每个人都被重定向到端口433或“https://www.domain-name.xx”而不是端口80或'http://www.domain-name.xx'。

谢谢。

2 个答案:

答案 0 :(得分:1)

我建议制作自定义安全处理程序。

示例:

-module (my_security_handler).
-behaviour (security_handler).
-export ([
    init/2,
    finish/2
]).


init(_Config, State) ->
    Bridge = wf:request_bridge(),
    case Bridge:protocol() of
       http ->
          NewURI = "https://" ++ Bridge:header(host) ++ "/" ++ Bridge:uri(),
          wf:status_code(301),
          wf:header(location, NewURI);
       https ->
          ok
    end,
    {ok, State}.

finish(_Config, State) ->
    {ok, State}.

然后将它加载到nitrogen_yaws.erl和nitrogen_cowboy.erl(你在同一台服务器上运行它们?看起来像一个奇怪的方式去)。只需在两行之间添加nitrogen:handler(my_security_handler)

nitrogen:init_request(RequestBridge, ResponseBridge),
nitrogen:handler(my_security_handler),  %% <---- added here
nitrogen:run().

请注意:直到最近,protocol()功能才能用于针对牛仔的simple_bridge。但是我已经修改了simple_bridge以适当地支持它,所以请确保从最新的master_bridge中获取。

答案 1 :(得分:1)

对于Yaws,您可以修改rel/nitrogen/etc/yaws.conf文件以添加以下服务器块:

<server domain-name.xx>
    port = 80
    listen = 0.0.0.0
    <redirect>
        / = https://www.domain-name.xx
    </redirect>
</server>

然后重新启动,或运行rel/nitrogen/lib/yaws/bin/yaws --hup告诉Yaws重新加载其配置。