我应用程序中的某些API端点需要HTTPS连接。
我试图通过使用以下express.js代码来实施这一点:
if (!req.connection.encrypted) {
return res.status(401).json({errors: [{code: 'INSECURE_REQUEST', message: 'Reseller API requires HTTPS'}]})
}
但是req.secure
在Google Cloud上不断返回false
。是否有任何一种请求转发不会在Google Cloud内部内部转发HTTPS?还有其他方法可以确保Google Cloud上的Express应用程序中的HTTPS连接?
确保应用引擎标准中HTTPS流量的一种简单方法是为您的app.yaml文件中的每个处理程序添加secure: always
元素。
如果您使用的是灵活的环境,则有2个选项,具体取决于您是否使用自定义域。
如果没有,则可以用-dot-替换URL中的实际点。更多信息在这里。
如果您使用的是自定义域,则可以在此处查看整个过程。
我希望有帮助!
google cloud doc包含一个答案:https://cloud.google.com/appengine/docs/flexible/nodejs/runtime#https_and_and_forwarding_proxies
App Engine终止了Load Balancer处的HTTPS连接,并将请求转发到您的应用程序。一些应用程序需要确定原始请求IP和协议。用户的IP地址可在标准X-Forwarded-For-For-header中找到。需要此信息的应用程序应配置其网络框架以信任代理。
使用express.js,使用信任代理设置:
app.set('trust proxy', true);