弹性环境中部署的React应用强制使用https?"/>
如何对在Google App Engine node.js弹性环境中部署的React应用强制使用https?
我想为在Google App Engine node.js灵活环境中部署的React应用强制https连接。我的React应用是使用
创建的npx create-react-app my-cool-app
而且我在项目根目录中放置了一个app.yaml。 app.yaml包含以下内容:
env: flex
runtime: nodejs
service: frontend-staging
我使用npm头盔库看到了此处提到的其他问题/答案。但是我不明白这对我的情况有何影响。 Google App Engine是否不使用Nginx提供静态构建目录?这里没有Express服务器-只是前端代码。如果我只有前端代码,如何使用此库设置http安全标头?我是否需要在Nginx和React东西之间放置一个Express应用服务器?
[我还问过Google支持人员有关修改nginx.conf文件的信息。但是,根据他们的说法,我将必须通过SSH进入实例并以这种方式修改文件。好吧,如果实例上的负载增加并且GAE自动启动另一个实例会发生什么?现在,我必须以某种方式进行检测,然后手动将SSH插入该实例以修复nginx.conf文件?我也看到这里提到的潜在解决方案,但这似乎是一个糟糕的选择。请帮忙。谢谢。
注意:这不是重复的。我专门问如何针对GAE node.js flex环境使用nginx + Express + React +代码示例实现头盔库,而不是更高层次的策略问题。
回答如下:我终于自己解决了。您需要创建一个Express服务器,运行一个“ yarn build”,并提供从Express服务器上由“ yarn build”脚本生成的那些静态文件。因此,我建议像这样配置您的目录结构:
appRoot
->client
->create-react-app contents here
app.yaml
app.js
package.json
请注意,此配置中有两个package.json。一个位于客户端文件夹内,并在运行“ create-react-app”时作为安装程序的一部分创建。另一个用于您的nodejs服务器应用程序,位于appRoot目录中。在app.js文件中,您将放置用于提供静态React文件的代码:
const express = require('express');
const helmet = require('helmet')
const app = express();
const port = process.env.PORT || 3000;
const sixtyDaysInSeconds = 5184000
app.use(helmet.hsts({
maxAge: sixtyDaysInSeconds
}))
//Serve up all of our static assets
app.use( express.static('client/build') );
//Make all incoming GET requests return the index.html in order to take advantage of the client side router
app.get('/*', function(req, res) {
res.sendFile(__dirname + '/client/build/index.html', function(err) {
if (err) {
res.status(500).send(err);
}
})
})
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
确保通过运行将“头盔”库添加到依赖项中>
yarn add helmet
当然也可以通过运行添加快递
yarn add express
您的所有app.yaml需要具备的是:
env: flex runtime: nodejs service: frontend-staging
现在将您的应用程序部署到GAE,您应该随每个请求一起提供HSTS标头。请注意,提供HSTS标头不会立即将用户重定向到https。从Mozilla开发人员网络中,“首次使用HTTPS访问您的站点并返回Strict-Transport-Security标头时,浏览器会记录此信息,以便将来尝试使用HTTP加载站点时将自动使用HTTPS。” >
换句话说,您的用户必须尝试使用https至少访问一次该网站,以便发送HSTS标头。
更多推荐
如何对在Google App Engine node.js弹性环境中部署的React应用强制使用https?
发布评论