Как перенаправить навсегда "http://" и "www." URL к "https://"?

У меня есть проект Google App Engine. В этом проекте у меня есть настроенный домен и сертификат SSL. Поэтому я могу использовать https://www.mysite.xxx, http://www.mysite.xxx и просто голый домен mysite.xxx.

Можно ли перманентно перенаправить последние два, чтобы всегда использовать безопасный домен https:// с помощью консоли разработчика, или мне просто нужно перенаправить в коде?

Ответ 2

Ради полноты. Способ 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>

Вы также можете найти это здесь в документации.

Ответ 4

На всякий случай, невозможно включить защищенные обработчики в app.yaml на App Engine Flexible, их поддержка не поддерживается:

Настройка безопасности под обработчиками теперь не рекомендуется для гибкой среды App Engine. Если вам нужно перенаправление SSL, вы можете обновить код приложения и использовать заголовок X-Forwarded-Proto для перенаправления трафика HTTP. (Ссылка: https://cloud.google.com/appengine/docs/f flex/java/upgrading#appyaml_changes)

Ссылка с Java, но, похоже, то же самое для Node. Я пытался включить обработчики, и это не сработало.

Как видите, возможным решением было бы "использовать заголовок X-Forwarded-Proto для перенаправления трафика HTTP". Я не пробовал это, потому что я перейду на App Engine Standard, но кто-то сделал это и объяснил здесь.

Ответ 5

Это должно быть сделано в вашем приложении. Пожалуйста, проверьте этот пост fooobar.com/questions/2458386/...

Я пробовал следующий код, и он работал для меня (Вы должны поместить это перед запросом по умолчанию и обработчиком ошибок):

/**==== 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
});