我将nodejs Web服务器部署到GAE
灵活的环境中。
访问Web服务器时,它使用https
协议。
我尝试使用http
协议,但似乎无法访问。
GAE
是否支持http
?
我希望http
和https
都可以正常工作。
更新1
app.yaml
runtime: nodejs8
env_variables:
NODE_ENV: production
PORT: 8080
app.flex.yaml
service: get-started-flex
runtime: nodejs
env: flex
env_variables:
NODE_ENV: production
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
server.js
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const package = require('./package.json');
console.log('version: ', package.version);
console.log('process.env.NODE_ENV: ', process.env.NODE_ENV);
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/', (req, res) => {
res.send(`Hello from App Engine! version:${package.version}`);
});
app.get('/submit', (req, res) => {
res.sendFile(path.join(__dirname, '/views/form.html'));
});
app.post('/submit', (req, res) => {
console.log({
name: req.body.name,
message: req.body.message
});
res.send('Thanks for your message!');
});
// Listen to the App Engine-specified port, or 8080 otherwise
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.log(`Server listening on port ${PORT}...`);
});
答案 0 :(得分:2)
在App Engine标准中,您可以选择使用secure
标签来声明每个处理程序的安全性,但是,在Flexible中,这是不可能的。
此外,在Flexible中,您可以使用some restrictions向处理程序进行http
和http
请求。请注意,正如您在this documentation中所见,应用程序根据请求的X-Forwarded-Proto
标头知道要使用哪种协议。
但是,我相信您可以在应用程序的应用程序级别上更改此行为。我的猜测是,您正在应用程序的某些部分执行https
,例如,如果您的应用程序中有行require("https")
。
此外,我发现this answer可以为您提供帮助。如果在处理程序中禁用SSL安全检查,即使连接不安全,您也可以处理请求,但这会使您的应用程序不安全。