Apache2虚拟主机错误



我有这个带有节点应用程序的服务器,它运行得很好。它日夜不停地工作,现在我正试图解决这个问题。

我使用apache2VirtualHost来运行这个服务器

虚拟主机代码:

<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.log("SERVER STARTED");
});

发生了什么:

我收到错误"EADDRINUSE"。

我使用的是端口"8080"。因此,我搜索了错误"EADDRINUSE",并尝试将端口更改为3000。

我使用FileZilla来更新服务器中的文件。我添加了带有app.listent(3000(的新app.js文件,并更新了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

我试图运行与pm2分离的node app.js,结果出现了以下错误:

error listen EADDRINUSE :::3000

我使用了killall节点,但它说没有节点过程。

所以我重新启动了VPN:

重新启动VPN后,我再次使用node app.js,效果非常好。然后我使用了pm2启动app.js,它也运行得很好。但如果没有VirtualHost ,我仍然无法访问网站

所以我启动了apache/VirtualHost,问题又开始了。

问题出在VirtualHost代码上?我该怎么解决这个问题?

主要问题是pm2正在崩溃。库的一个依赖项(piduse(破坏了pm2。(参考:https://github.com/Unitech/pm2/issues/3827)这在pm2(3.0.2(的下一个版本中得到了修复。

这在许多项目中造成了很多问题,因为pm2被广泛使用。

最新更新