我有一个非常普通的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
这是解决这个问题的正确方法吗?
好吧,这些天社区看起来已经死了(希望我错了)
答案是:
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)