一尘不染

Node.JS,Express和Heroku-如何处理HTTP和HTTPS?

node.js

我有一个非常普通的Express应用程序-
简单的服务器逻辑,视图,许多客户端JS。我必须执行许多AJAX请求。其中一些需要通过HTTPS协议保护(某些不需要)。

因此,我的服务器应同时使用HTTP和HTTPS。它也应该在本地计算机(正常运行nodemon)和Heroku上都可以工作。

据我了解,Heroku为您提供了一个您可以监听的端口(process.env.PORT),并通过代理处理了所有请求(因此,您的应用程序正在监听该端口,而无需担心协议-
是吗? )

所以,我说对了吗-我应该为开发机器和Heroku使用一些不同的代码吗?

喜欢

...
app = express()
...

if process.env.NODE_ENV == 'production'
  app.listen(process.env.PORT)
else
  https = require('https')
  http = require('http')
  http.createServer(app).listen(5080) # some local port
  options = {
    key: fs.readFileSync('key.pem'), 
    cert: fs.readFileSync('cert.pem') # my self-signed files
  }
  https.createServer(options, app).listen(5443) # some different local port

这是解决这个问题的正确方法吗?


阅读 250

收藏
2020-07-07

共1个答案

一尘不染

好吧,这些天社区看起来已经死了(希望我错了)

答案是:

a)是的,这是处理它的方法

b)检查您是否处于安全模式的方式也取决于环境:

if process.env.NODE_ENV == 'production'
  is_secure = (req) ->
    req.headers['x-forwarded-proto'] == 'https'
else
  is_secure = (req) -> req.secure

添加 如果您想强制使用HTTPS:

redirect_to_https = (req, res, next) ->
  if not is_secure(req)
    res.redirect config.SECURE_DOMAIN + req.url
  else
    next()

app
  .use(redirect_to_https)
2020-07-07