Как предотвратить ошибку чтения удаленного сервера с прокси-сервером Apache и приложением nuxt - PullRequest
1 голос
/ 25 января 2020

Последние несколько недель я стучал головой по столу, пытаясь понять это. Мне нужно немного, пожалуйста!

У меня есть домашний сервер, работающий Apache 2.4.41 на Ubuntu 18.04, чтобы я запускал 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

Моя основная проблема : я не могу отобразить веб-страницу, кроме отображения:

Прокси-сервер получил неверный ответ от вышестоящего сервера. Прокси-сервер не смог обработать запрос Причина: Ошибка чтения с удаленного сервера

Любые рекомендации приветствуются! Заранее спасибо.

...