最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何对在Google App Engine node.js弹性环境中部署的React应用强制使用https?

IT培训 admin 10浏览 0评论

如何对在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?

我想为在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标头。

发布评论

评论列表 (0)

  1. 暂无评论