2016-05-27 9 views
1

我々は含まライトニング展開戦略を使用して、当社のエンバーアプリケーション展開している:エンバーCLIの展開を通じて照明戦略

  • EC2インスタンスが
  • nginxの(HTTPサーバ)
  • のRedis、同じインスタンス上に構成(奉仕するをインスタンスを打つ時に、index.htmlにはサーブなると、AWS S3からjsファイルや資産

をコンパイルしたindex.html)

  • dをクリックし、続いてApp内の任意のルートをクリックすると、Appルートが配信されます。

    しかしEmber AppのURLに正しいルートを手動で入力すると、Nginxはルートが見つからないというエラーをスローします。私たちがここでやっていることは間違っていますか?

  • 答えて

    3

    するとサブリクエストは、たとえば、mydomain.com/loginは、URLで打撃されたか、ページが更新されると、ブラウザはnginxに要求を送信し、nginxのは、どこにでもloginページを見つけることができませんと404 errorを返します。これは、nginxがサブルートをindex.htmlページに渡すことができなくなり、サブルートを処理できるようになるためです。これを解決するために、以下のロケーションブロックがnginxで使用されています。

    # This block handles the subrequest. If any subroutes are requested than this rewrite the url to root and tries to render the subroute page by passing the subroute to index file (which is served by the redis). 
        location ~*/{ 
        rewrite ^/last; 
        } 
    

    ここでは、root (/)場所にURLを書き換え、任意のサブリクエストのために、nginxのに言って(ルートの場所は、Redisのからのインデックスページを提供しています)と、要求されたページを見つけています。 lastオプションは、nginxで定義されているblocksをすべて再訪して特定のページを検索しようとします。その結果、rootの場所に移動することができます。 詳しい説明とフルnginx設定はhereです。

    2

    私が正しく理解していれば、すべてのルーティングにemberを対応させる必要があります。

    あなたはindex.htmlをヒットするとredisがインスタンスを提供しますが、他のURLをヒットした場合、同じindex.htmlを提供するようにnginxに指示し、ルートを処理できるようにする必要があります。

    私はEmber Discussでこれを見つけました。

    server { 
    listen 80 default; 
    server_name my.domain.com; 
    root /path/to/app/root; 
    
    location/{ 
        rewrite^/index.html break; 
    } 
    
    location /assets/ { 
        # do nothing and let nginx handle this as usual 
    } 
    } 
    

    私がプレイFrameworkを使用していると私は同様にライティング展開戦略を使用していると私は順番にRedisのからインデックスを取得し、私のコントローラへのルートを取得するルート/*を作成する必要がありました。

    +0

    この場合、 'openresty lua-nginx'モジュールを使用して' redis'から 'nginx' itslef経由で' index file'を取り出します。したがって、あなたのソリューションはうまくいきません。 –

    +0

    私が正しく理解しているかどうかわかりませんが、インデックスファイルで同じことをする「すべてをキャッチ」ルールを作成できませんか? –

    +0

    私は 'ngx.say(" index page html content ")'を通してnginxでインデックスページを提供しています。今、ポイントは、このHTMLコンテンツにサブリクエストを追加する方法です。 –

    関連する問題