【问题标题】:Automatic redirection from port 80 to port 433 in nitrogen over Yaws and CowboyYaws 和 Cowboy 在氮气中从端口 80 自动重定向到端口 433
【发布时间】:2014-04-14 19:49:31
【问题描述】:

我正在使用在 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 网络服务器执行此操作的配置

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

谢谢。

【问题讨论】:

    标签: linux erlang yaws cowboy nitrogen


    【解决方案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 中提取 simple_bridge。

    【讨论】:

    • 实际上,我并没有在同一台服务器上同时运行两个 Web 服务器(cowboy 和 yaws),但我还没有确定要使用哪一个。
    • 啊,我明白了。这听起来像是柔术师编程的壮举:) 我上面的修复有帮助吗?
    • 我不明白你的请注意 ...我知道从哪里“拉”它
    • 通过拉取评论,我的意思是从 master 拉取 simple_bridge。如果您将 rebar.config 设置为使用 {branch, master} 作为 simple_bridge 依赖项,那么您只需使用 make upgrade 即可。
    【解决方案2】:

    对于 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 重新加载其配置。

    【讨论】:

      猜你喜欢
      • 2013-10-26
      • 2019-02-02
      • 2015-03-15
      • 2018-08-23
      • 2014-09-27
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多