2017-01-30 8 views
4

私たちは、App Engineの柔軟なカスタムランタイムで、openjdk:8に基づいたDockerファイルを使用してメタベースのインスタンスを実行しています。現在、http://[metabase-project].appspot.com/https://[metabase-project].appspot.com/にアクセスできます。私はすべてのHTTPトラフィックをhttpsにリダイレクトすることによってSSLを強制したいと思います。App EngineにSSLを適用する柔軟な環境カスタムランタイム

Dockerfileはこのようなものになります。

FROM openjdk:8 
ADD https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 ./cloud_sql_proxy 
ADD http://downloads.metabase.com/v0.21.1/metabase.jar ./metabase.jar 
CMD ./cloud_sql_proxy -instances=$INSTANCE=tcp:$MB_DB_PORT -dir=/cloudsql & java -jar ./metabase.jar 

当社のapp.yamlは次のようになります。通常のApp Engineのapp.yamlファイルで

service: metabase 
runtime: custom 
env: flex 

、私は追加したいと思います:

handlers: 
- url: [something] 
    secure: always 

カスタムランタイムでは、このようなハンドラにはアクセスできません。すべてのトラフィックのリダイレクトを実行するようにFlexibleランタイムを設定する方法はありますか?

+0

ドメインプロバイダのオファーのドメイン転送をしていますか? 'http:'を 'https:'に転送することができます。 – GAEfan

+1

@GAEfanはカスタムドメインにのみ適用され、プロジェクトのappspot.comサブドメインはhttpを転送せずに許可します。 –

+1

修正すると、カスタムドメインでのみ機能します。私はappspotドメインの組み込みを認識していません。 'https'のリクエストヘッダーをテストし、非httpsリクエストに対して自分のリダイレクトを強制する必要があるかもしれません。 – GAEfan

答えて

2

あなたのアプリ(app.yamlを中env: flex)はSSL接続を終了nginxのリバースプロキシの背後で実行されているので、あなたはhttpまたはhttpsのいずれかになりますX-FORWARDED-PROTOヘッダをチェックする必要があります。それがhttpなら、あなたはリダイレクトを行うことができます。

+0

私は、nginxの設定を変更する機能を持っていないという印象を受けています(http://stackoverflow.com/questions/40853799/is-there-a-way-to-customize-nginx-proxy-in- google-flexible-appengine)。 私はメタベースを使用しています。メタベースは、ホスティングプラットフォームではサポートされていて、ツールではサポートされていないと明示的に決めています。彼らはリダイレクトを正しく設定するEB用の設定を持っていますが(https://github.com/metabase/metabase/issues/1356)、appengine flexで行う方法はないようです。 –

+0

メタベースはオープンソースのように見えるので、技術的に拡張することは可能です。 :) – zengabor

+0

"X-Forwarded-Proto"ヘッダーが現在存在し、 "http"または "https"であることを確認します。 –

2

これは私のために働いたものです。私のケースでは、LoopbackベースのNodeJSアプリケーションをCloud Sites App Engineの柔軟な環境で実行しています。

  1. 次のコード例server/middleware/https-redirect.jsため、ミドルウェアの作成:

    /** 
    * Create a middleware to redirect http requests to https 
    * @param {Object} options Options 
    * @returns {Function} The express middleware handler 
    */ 
    module.exports = function(options) { 
        options = options || {}; 
        var httpsPort = options.httpsPort || 443; 
        return function(req, res, next) { 
        if (req.protocol != 'https' && process.env.NODE_ENV !== 'development') { 
         var parts = req.get('host').split(':'); 
         var host = parts[0] || '127.0.0.1'; 
         return res.redirect('https://' + host + ':' + httpsPort + req.url); 
        } 
        next(); 
        }; 
    }; 
    

    (だけリダイレクトされ、ポストhttp://www.jonxie.com/blog/2014/11/12/setting-up-loopback-to-use-https-and-ssl-certificates/ステップ8に基づくがreq.protocol代わりにreq.secureを使用するように変更開発モードで実行していない場合)

  2. ファイルserver/server.jsを要求して変更します。

    var httpsRedirect = require('./middleware/https-redirect'); 
    
  3. アンその後、ブート行の後:app.set('trust proxy', true)はreq.protocolがX-Forwarded-Protoヘッダを読み聞かせします設定

    var httpsPort = app.get('https-port'); 
    app.use(httpsRedirect({httpsPort: httpsPort})); 
    app.set('trust proxy', true) 
    

参考文献:

関連する問題