1

自分のサイトの特定のページをhttpsでのみ利用できるようにしたい。page.erlでプロトコルを正しく認識してから、正しいURLにリダイレクトしても問題ないと思います。何かのようなもの

case Protocol of
    http -> wf:redirect('https://' ++ UrlWithNoProtocol);
    _ -> ok
end

もちろん、URLを「://」で分割するだけでProtocolとUrlWithNoProtocolを取得できます。しかし、問題は、私にはわかりません。ページの完全なURLを取得する方法は?

4

2 に答える 2

2

カウボーイのpeer_portが間違っているため、simple_bridgeにプルリクエストを送信しました:)

peer_port(ReqKey) ->
    ?GET,
    {Port, NewReq} = cowboy_http_req:port(Req),
    NewRequestCache = _RequestCache#request_cache{request=NewReq},
    ?PUT,
    Port.

乾杯!

于 2012-11-01T15:39:56.780 に答える
1

窒素メーリングリストでの私の回答は、マークダウンのようなフォーマットのためにここに複製されています。

私はこれを2つの方法のいずれかで行います。どちらも、Nginxのようなリバースプロキシの背後に窒素を配置することを意味します。

最初の方法は、特定のページにSSLを強制する単純な書き換えルールをnginxに設定することです。たとえば、nginxで、/ adminで始まるすべてのリクエストをHTTPS経由にリダイレクトする場合は、HTTPセクションでこれを行うことができます。

location ^~ /admin {
     rewrite ^ https://$http_host$request_uri? permanent;
}

SSLを介して実行するためのnginxの構成については、https ://github.com/nitrogen/nitrogen_core/blob/master/doc/org-mode/config.orgで読むことができます。

次の選択肢は、(もう一度)リバースプロキシの背後に窒素を配置することですが、今回は、リクエストが安全であることを示すヘッダーの存在を確認します(このヘッダーはnginxによって挿入されます)。

たとえば、nginx構成の「ssl」セクションに次のようなヘッダーを設定するルールを追加できます。

proxy_set_header X-Forwarded-SSL on;

次に、wf:header(x_forwarded_ssl)を使用してヘッダーの存在を確認できます。

リバースプロキシを使用していない場合、最も簡単なチェックは、リクエストを取得してサイトが提供されているポートをチェックし、次にソケットポートをチェックすることです。

Req = wf_context:request_bridge(),
Port = Req:peer_port().

次に、ポートが80の場合はhttp、443の場合はhttpsであるかどうかを確認します。

個人的には、nginxソリューションを選択します。これは、どの程度のスケーリングでも、サーバーを追加してnginxに負荷分散とSSL処理を行わせることで、単純にスケールアウトできると便利だからです。

于 2012-10-31T21:32:02.847 に答える