Ошибка Apache2 VirtualHost

У меня есть этот сервер с приложением узла, и он отлично работал. С ночи до дня он перестал работать, и теперь я пытаюсь это исправить.

Я использую apache2 VirtualHost для запуска этого сервера

Код VirtualHost:

<VirtualHost *:80 *:443>
   ServerName website.com
   ServerAlias www.website.com

   DocumentRoot /var/www/project
   <Directory /var/www/project>
      Options -Indexes +FollowSymLinks
      AllowOverride None
      Require all granted
   </Directory>

   ProxyRequests Off
   ProxyPreserveHost On
   ProxyVia Full
   <Proxy *>
      Require all granted
   </Proxy>

   <Location />
      ProxyPass http://127.0.0.1:3000/
      ProxyPassReverse http://1127.0.0.1:3000/
   </Location>

   ErrorLog ${APACHE_LOG_DIR}/error.log

   # Possible values include: debug, info, notice, warn, error, crit,
   # alert, emerg.
   LogLevel warn

   CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.website.com [OR]
RewriteCond %{SERVER_NAME} =website.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Мой файл app.js:

var express         = require("express");
var app             = express();

const session       = require('express-session');
const MongoStore    = require('connect-mongo')(session);  

var bodyparser      = require("body-parser"),
mongoose            = require("mongoose"),
passport            = require("passport"),
LocalStrategy       = require("passport-local"),
FacebookStrategy    = require('passport-facebook').Strategy,
TwitterStrategy     = require('passport-twitter').Strategy,
GoogleStrategy      = require('passport-google-oauth').OAuth2Strategy,
expressSanitizer    = require('express-sanitizer'),
methodOverride      = require("method-override"),
flash               = require('connect-flash'),
authData            = require('./auth.js'),
sm                  = require('sitemap'),
fs                  = require('fs');

var User                = require("./models/user");

mongoose.connect("databaselink");

app.use(bodyparser.json());
app.use(bodyparser.urlencoded({extended: true}));
app.use(expressSanitizer());
app.set("view engine", "ejs");
app.use(express.static(__dirname + "/public"));
app.use(methodOverride("_method"));
app.use(flash());


// PASSPORT CONFIGURATION
app.use(session({
    cookie : {
        maxAge : 7 * 24 * 60 * 60 * 1000
    },
    secret: "Bloom blaaaaa bliiiuuuummmmmmm",
    saveUninitialized: false, // don't create session until something stored
    resave: false, //don't save session if unmodified
    store: new MongoStore({ 
        mongooseConnection: mongoose.connection,
        autoRemove: 'native', // Default
        touchAfter: 24 * 3600 // time period in seconds 
    })
}));


app.use(passport.initialize());
app.use(passport.session());

passport.use(new LocalStrategy(User.authenticate()));

// used to   serialize the user
passport.serializeUser(function(user, done) {
        done(null, user.id);
    });

// used to deserialize the user
passport.deserializeUser(function(id, done) {
     User.findById(id, function(err, user) {
        done(err, user);
    });
});


// LISTEN
app.listen("3000", function(){
    console.info("SERVER STARTED");
});

Что происходит:

Я получал ошибку «EADDRINUSE».

Я использовал порт 8080. Итак, я поискал ошибку «EADDRINUSE» и попытался изменить порт на 3000.

Я использовал FileZilla для обновления файлов на сервере. Я добавил новый файл app.js с app.listen (3000) и обновил код VirtualHost.

Затем я перезапустил сервер apache, а также pm2 (я использую pm2, чтобы мои серверы узлов оставались в сети).

Но когда я пытаюсь перейти на свой сайт, я получаю следующую ошибку:

Service Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

Apache/2.4.7 (Ubuntu) Server at www.website.com Port 80

Я попытался запустить node app.js отдельно от pm2 и получил эту ошибку:

error listen EADDRINUSE :::3000

Я использовал узел killall, но он говорит, что процесса узла нет.

Итак, я перезапустил VPN:

После перезапуска VPN я снова использовал node app.js, и он работал очень хорошо. Затем я использовал pm2 start app.js, и он тоже работал очень хорошо. Но я все еще не могу получить доступ к веб-сайту без VirtualHost

Итак, я запускаю apache / VirtualHost, и проблемы начинаются снова.

Проблема в коде VirtualHost? Как я могу это исправить?

Вы используете Linux? У вас есть доступ к командной строке на компьютере, на котором вы это используете? Я знаю, что вы используете Filezilla для обновления файлов. Если у вас есть доступ, попробуйте запустить netstat -tulpn | grep 3000, чтобы узнать, какая программа прослушивает этот порт (3000). Вполне может быть, что pm2 запускает несколько экземпляров вашего приложения узла в одном и том же блоке, и первый экземпляр привязывается к 3000, а второй получает EADDRINUSE. Конечно, поскольку это работало раньше, это могло быть не так. Можете ли вы подтвердить, что pm2 действительно работает? Было недавнее обновление, которое сломало ситуацию.

Morfie 24.07.2018 23:44

Ссылка на вопрос о том, что pm2 недавно сломался из-за pidusage: github.com/Unitech/pm2/issues/3827

Morfie 24.07.2018 23:45

@Morfie Привет, использовал команду netstat -tulpn | grep 3000, и он показал один экземпляр app.js, работающий на порту 3000. Я удалил приложение app.js из pm2, и теперь я могу запустить узел app.js. Так что проблема действительно в pm2. Есть идеи, как я могу исправить pm2? Или что-то другое использовать вместо pm2? Спасибо

Bruno Pigatto 25.07.2018 00:19

Какую версию pm2 вы используете? Я использовал 3.0.1, и у меня возникли проблемы. Я понизил версию до 2.10.4, и все мои проблемы были устранены.

Morfie 25.07.2018 00:22

Они только (2 секунды назад) обновили PM2 до 3.0.2. Вы также можете попробовать это, поскольку это обновление было специально для решения этой проблемы.

Morfie 25.07.2018 00:28

@Morfie Только что установил PM2 3.0.2, запустите netstat -tulpn | grep 3000 и его единственный экземпляр app.js. Я перезапустил apache2, но теперь, когда я захожу на сайт, у меня появляется эта ошибка The proxy server received an invalid response from an upstream server. The proxy server could not handle the request GET /index. Reason: Error reading from remote server Apache/2.4.7 (Ubuntu) Server at www.listsroll.com Port 80

Bruno Pigatto 25.07.2018 00:39

@Morfie Я помню, что у меня уже была эта ошибка, когда я настраивал веб-сайт, я считаю, что проблема в коде VirtualHost?

Bruno Pigatto 25.07.2018 00:40

@Morfie Привет, сайт сейчас работает, у меня проблема только с mongoDB, но я могу это исправить, большое спасибо за помощь :)

Bruno Pigatto 25.07.2018 00:56

Это был PM2 или что-то еще?

Morfie 27.07.2018 07:47

@Morfie Я обновил PM2, и теперь он работает, проблема, с которой я столкнулся после обновления PM2, была с mongoDB. Теперь все нормально;)

Bruno Pigatto 27.07.2018 20:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
10
206
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основная проблема заключалась в том, что pm2 ломался. Одна из зависимостей библиотеки (pidusage) сломала pm2. (Ссылка: https://github.com/Unitech/pm2/issues/3827) Это было исправлено в следующей версии pm2 (3.0.2).

Это вызвало множество проблем во многих проектах, так как pm2 широко используется.

Другие вопросы по теме