web-dev-qa-db-ja.com

App EngineFlexibleでのHTTPからHTTPSへのリダイレクト

私はこれの答えに従いました: グーグルクラウドでhttpからhttpsにリダイレクトします しかしそれは現在もはや正確ではないようです。参照されているアンカー( https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml#security )は削除されたようですが、交換のメモ。

参考までに、私はGoogleアプリ(フレックス)エンジンを介してNodeJSを提供しています。答えによると、私はapp.yaml

handlers:
- url: /.*
  script: IGNORED
  secure: always

HTTPSは明らかに私のExpressエンジンに到達する前に終了するので(そしてそこでのリダイレクトは役に立たないでしょう)。現在どのように正しく実装されていますか?

役立つ可能性があります。コンソールの[カスタムドメイン]タブから外部ドメインを接続していて、SSL証明書が構成されています(ユーザーが手動でhttps://.comにアクセスした場合は、すべて問題ありません)。

13
Art

フレキシブル環境は現在、app.yamlのハンドラーをサポートしていません。 https://リダイレクトが必要な場合は、いくつかのオプションがあります。

  • helmet を使用してHSTS関連の処理を行い、独自の初期リダイレクトを実装します。
  • 私は、エクスプレスのすべてのルートで常にSSLを強制する幸せな小さなライブラリを作成しました yes-https

デフォルトでは、allトラフィックをSSLに自動リダイレクトすることを検討しています。それはあなたのアプリにとって良いことだと思いますか?

18
Justin Beckwith

Justinのyes-httpsライブラリを利用して、これを機能させることができました。

var app = express();
app.use(function(req, res, next){
  if (req.Host != 'localhost' && req.get('X-Forwarded-Proto') == 'http') {
    res.redirect(`https://${req.Host}${req.url}`);
    return;
  }

  app.router(req, res, next);
});

最初は、appengineサブドメインにいて、HSTSを使用できなかったので、そうしなければならないと思いました。次に、HSTSがサブドメインで正常に機能することを学びました。 :)とにかく、何らかの理由でyes-httpsを使用したくない場合は、使用する魔法のビットが何であるかを知りたいと思うかもしれません。

ジャスティン、デフォルトですべてのトラフィックをSSLに自動リダイレクトすることは、私には素晴らしいことだと思います。 https://developers.google.com/web/Fundamentals/Engage-and-retain/app-install-banners /

6
Ojan