обслуживать приложение angularjs, размещенное в cloudfoundry, только через https

0

У меня есть приложение angularjs, которое было размещено в ibm cloudfoundry. Моя проблема в том, что мне нужно, чтобы приложение обслуживалось только через https, потому что я использую обмен сообщениями firebase. я нашел решение, но проблема в том, что навигатор застрял из-за слишком большого количества перенаправлений:

var finalhandler = require('finalhandler')
var http = require('http')
var connect = require('connect');
var serveStatic = require('serve-static');
var port = (process.env.VCAP_APP_PORT || 3001);
var host = (process.env.VCAP_APP_HOST || 'localhost');
var serve = serveStatic(__dirname+'/www')
var server = http.createServer(function onRequest (req, res) {
  if (req.secure) {
    serve(req, res, finalhandler(req, res))
  } else {
      res.writeHead(302, {'Location': 'https://'+req.headers.host + req.url});
      res.end();
  }
})
server.listen(port,host)

как справиться с этой проблемой, пожалуйста?

Теги:
ibm-cloud
cloudfoundry

1 ответ

0

Если вы используете только статический контент, вы можете использовать статический файл buildpack. Опция "force ssl" будет делать именно то, что вы хотите.

https://docs.cloudfoundry.org/buildpacks/staticfile/index.html#config-process

Чтобы включить, вы можете запустить cf set-env <your-app> FORCE_HTTPS true или добавить эту переменную среды в файл cf cli manifest.yml.


Если вам почему-то нужно использовать Node.js buildpack, то трюк заключается в том, что вы должны посмотреть заголовки X-Forwarded-Proto или X-Forwarded-Port. Для прежних вы должны проверить https а последний - на 443. Либо укажите, что соединение безопасно.

if (req.headers['x-forwarded-proto'] === 'https') {
  serve(req, res, finalhandler(req, res))
} else {
  res.writeHead(302, {'Location': 'https://'+req.headers.host + req.url});
  res.end();
}

Если вы используете Express, есть возможность сделать это автоматически, app.enable('trust proxy').

https://expressjs.com/en/guide/behind-proxies.html

Надеюсь, это поможет!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню