web-dev-qa-db-ja.com

`http://`と `www.`のURLを永続的に` https:// `にリダイレクトする方法は?

Google App Engineプロジェクトがあります。このプロジェクトでは、カスタムドメインとSSL証明書をセットアップしました。したがって、https://www.mysite.xxxhttp://www.mysite.xxx、およびネイキッドドメインmysite.xxxのみを使用できます。

最後の2つを永続的にリダイレクトして、常に安全なhttps://ドメインを開発者コンソールを使用して使用することはできますか、それともコードでリダイレクトする必要がありますか?

28
Chez

したがって、yamlファイルに「secure:always」を追加できます

https://cloud.google.com/appengine/docs/python/config/appconfig?hl=ja#Python_app_yaml_Secure_URLs

21
Tom

(Nodeの場合)、app.yamlで、以下を追加します:

handlers:
- url: /.*
  secure: always
  redirect_http_response_code: 301
  script: auto

リファレンス: https://cloud.google.com/appengine/docs/standard/nodejs/config/appref

10
Dave Welling

完全を期すために。 Java方法は、このようにトランスポート保証を機密に設定することです。

<security-constraint>
  <web-resource-collection>
    <web-resource-name>profile</web-resource-name>
    <url-pattern>/profile/*</url-pattern>
  </web-resource-collection>
  <user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
  </user-data-constraint>
</security-constraint>

これも見つけることができます ドキュメントのここに

9
konqi

念のため、App Engine Flexibleのapp.yamlにセキュアハンドラーを含めることはできません。これらのハンドラーはサポートされていません。

ハンドラーでの安全な設定は、App Engineフレキシブル環境では非推奨になりました。 SSLリダイレクトが必要な場合は、アプリケーションコードを更新し、X-Forwarded-Protoヘッダーを使用してhttpトラフィックをリダイレクトできます。 (参照: https://cloud.google.com/appengine/docs/flexible/Java/upgrading#appyaml_changes

参照はJavaからですが、Nodeでも同じようです。ハンドラーを含めようとしましたが、機能しませんでした。

ご覧のとおり、可能な解決策は「X-Forwarded-Protoヘッダーを使用してhttpトラフィックをリダイレクトする」ことです。 App Engineスタンダードに移行するため、これを試したことはありませんが、誰かがそれを実行して説明しました こちら

3
Ruben Lopez

ドメインを購入するか、を Googleドメイン に移管した場合は、 G-SuiteSynthetic records セクションの下にあります:

screencapture-domains-google-redirect-registrar-chetabahana-com-dns-2019-05-27-21_19_24

1
Chetabahana

アプリケーションで行う必要があります。この投稿を確認してください https://stackoverflow.com/a/54289378/5293578

私は次のコードを試してみましたが、うまくいきました(これをデフォルトのリクエストとエラーハンドラの前に置く必要があります)。

/**==== File: server.js =======**/

/** Express configuration **/

// HTTPS Redirection
if (process.env.NODE_ENV === 'production') {
  app.use (function (req, res, next) {
    var schema = (req.headers['x-forwarded-proto'] || '').toLowerCase();
    if (schema === 'https') {
      next();
    } else {
      res.redirect('https://' + req.headers.Host + req.url);
    }
  });
}

/** ... more configuration **/

// Default request handler
app.use(function(req, res, next) {
  // ... your code
});

// Default error handler
app.use(function(err, req, res, next) {
  // ... your code
});