node.js - 如何防止 Apache 代理服务器和 nuxt 应用程序的远程服务器读取错误
问题描述
在过去的几周里,我一直在用头撞我的桌子,试图弄清楚这一点。我需要一些请!
我有一个家庭服务器,在 Ubuntu 18.04 上运行 Apache 2.4.41,我将通过代理运行Nuxt SSR应用程序,并通过安全 SSL 对其进行公开访问。从所有估计来看,SSL 似乎安装正确,但是在访问主页 url 时收到以下错误:
代理服务器收到来自上游服务器的无效响应。从远程服务器读取错误
虚拟主机配置
#Normal HTTP
<VirtualHost *:80>
ServerName example.com
# Redirect any HTTP request to HTTPS
Redirect / https://example.com/
ProxyRequests Off
ProxyPass / http://example.com:3102/ retry=1 acquire=3000 timeout=2200 Keepalive=On
ProxyPassReverse / http://example.com:3102/
</VirtualHost>
#Secure HTTPS Config
<VirtualHost *:443>
ServerName www.example.com
ProxyRequests off
ProxyPass /.well-known/ !
<Location />
ProxyPass http://localhost:3102/
ProxyPassReverse http://localhost:3102/
ProxyPreserveHost On
</Location>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLEngine on
SSLCertificateKeyFile /etc/apache2/ssl/private/example.com.key
SSLCertificateFile /etc/apache2/ssl/example.com.crt
SSLCertificateChainFile /etc/apache2/ssl/example.com.ca-bundle
</VirtualHost>
服务器端脚本
const consola = require('consola')
const session = require('express-session');
const fs = require('fs');
const http = require('http');
const https = require('https');
const { Nuxt, Builder } = require('nuxt')
async function start() {
const logger = require("./api/base/logger")
// Import and Set Nuxt.js options
let nuxt_config = require('../nuxt.config.js')
const express = require('express')
const bodyParser = require('body-parser')
const session = require('express-session')
nuxt_config.dev = !(process.env.NODE_ENV === 'production')
process.env.is_dev = !(process.env.NODE_ENV === 'production');
// Init Nuxt.js
consola.info("\tNuxt Engine Started");
const nuxt = new Nuxt(nuxt_config)
let { host, port } = nuxt.options.server
try {
// Build only in dev mode
if (nuxt_config.dev) {
port = nuxt.options.server.dev_port;
consola.info("[--- Dev Mode ( " + port + " ) ---]");
const builder = new Builder(nuxt)
await builder.build()
} else {
port = nuxt.options.server.prod_port;
consola.info("[ Prod Mode ( " + port + " ) ]");
await nuxt.ready()
}
} catch (err) {
console.log("EveServer-Root failure", err);
}
const app = express()
var router = express.Router();
//------------------------------------------------------------------
// Uses
//------------------------------------------------------------------
// Give nuxt middleware to express
app.use(nuxt.render)
app.use(express.json());
app.use(bodyParser.json()); // to support JSON-encoded bodies
//app.use('/', router);
// Transform req & res to have the same API as express
// So we can use res.status() & res.json()
router.use((req, res, next) => {
Object.setPrototypeOf(req, app.request)
Object.setPrototypeOf(res, app.response)
req.res = res
res.req = req
next()
})
app.disable('x-powered-by')
app.use(function (req, res, next) {
next()
})
// Sessions to create `req.session`
app.use(session({
secret: 'super-secret-key',
resave: false,
saveUninitialized: false,
cookie: { maxAge: 60000 }
}))
app.use(bodyParser.urlencoded({ extended: true })); // to support URL-encoded bodies
var https_setting = {
cert: fs.readFileSync( '/home/username/AppDev/Web/example.com/positivessl/example.com.crt', "utf8"),
ca: fs.readFileSync( '/home/username/AppDev/Web/example.com/positivessl/example.com.ca-bundle', "utf8"),
key: fs.readFileSync( '/home/username/AppDev/Web/example.com/positivesslexample.com.key', "utf8")
} ;
https.createServer(https_setting, app).listen(port, host);
consola.ready({
message: `Server listening on http://${host}:${port}\n\tServer is live`,
badge: true
})
}
start()
Nuxt index.js
我的主要问题:除了显示以下内容外,我无法显示网页:
代理服务器收到来自上游服务器的无效响应。代理服务器无法处理请求原因:从远程服务器读取错误
非常感谢任何建议!先感谢您。
解决方案
推荐阅读
- javascript - 允许/白名单特定的单词/代码在 textarea 中写入
- c++ - 使用并行线程查找加到给定数字的所有组合
- node.js - 如何在 Node.js 中静默 XML DOM 的所有警告消息
- python - 有没有一种方法可以在 python 中被动地收集键盘数据,而不需要用户输入 python 控制台本身?
- python - pynput 按键积压
- python - 如何从标签“澳大利亚”中获取“澳大利亚”
- docker - 当外部驱动器断开连接时,停止 Docker 创建根目录?
- javascript - 为什么以特定方式单击图标时我的网页部分会消失?
- f# - F# 不会匹配列表的所有元素
- asp.net-core - 从集合中删除对象时,.net core 2.2 razor 页面视图无法正确更新