Before i deploy the nodejs app, forcing http to https is working (tested just for index.html)…
Now i deploy nodejs app in cyberpanel, all work well, but force http to https is not working,
i already added this to vHost Conf
context / {
type appserver
location /home/houze.homes/public_html
binPath /usr/bin/node
startupFile server.js
appType node
maxConns 100
rewrite {
}
addDefaultCharset off
}
i already add this to .htaccess
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
but its not working force http to https, why?
Welcome @afandiazmi Happy you are here
Try
# the nodejs app port consumed
RewriteCond %{SERVER_PORT} ^3000$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Thanks for the reply, but still not working
Did you check your code ? You might be bypassing secure routes
this is my server.js file
const mongoose = require('mongoose');
const dotenv = require('dotenv');
dotenv.config({ path: './config.env' });
const app = require('./app');
const port = process.env.PORT || 3000;
const server = app.listen(port, () => {
console.log(`App running on port ${port}...`);
});
process.on('unhandledRejection', (err) => {
console.log('UNHANDLED REJECTION! 💥 Shutting down...');
console.log(err.name, err.message);
server.close(() => {
process.exit(1);
});
});
and this is my app.js file
const path = require('path');
const express = require('express');
const helmet = require('helmet');
const xss = require('xss-clean');
const hpp = require('hpp');
const cookieParser = require('cookie-parser');
const compression = require('compression');
const myRouter = require('./routes/myRoutes');
const app = express();
app.set('view engine', 'pug');
app.set('views', path.join(__dirname, 'views'));
app.use(express.static(path.join(__dirname, 'public')));
app.use(
helmet.contentSecurityPolicy({
useDefaults: true,
directives: {
'img-src': ["'self'", 'https: data:'],
'frame-src': ["'self'", 'https: data:'],
defaultSrc: ["'self'", 'data:', 'blob:'],
},
})
);
// Development logging
if (process.env.NODE_ENV === 'development') {
// do something here
}
// console.log(process.env.NODE_ENV);
// Limit request from same API
const limiter = rateLimit({
windowMs: 60 * 60 * 1000, // 15 minutes
max: 100,
message: 'Too many request from this IP, please try again in an hour',
});
app.use('/api', limiter);
app.use(express.json({ limit: '20kb' }));
app.use(express.urlencoded({ extended: true, limit: '20kb' }));
app.use(cookieParser());
app.use(xss());
app.use(compression());
app.use('/', myRouter);
app.all('*', (req, res, next) => {
next(new AppError(`Can't find ${req.originalUrl} on this server!`, 404));
});
app.use(globalErrorHandler);
module.exports = app;
You can use native https.createServer()
function and pass ssl key and certificate in your app.js or your entry file/point
ok i will try that later, btw can i know how to change NODE_ENV to production?
var https = require("https");
app.get("/", function (req, res) {
res.send("hello world");
});
https
.createServer(
{
key: fs.readFileSync("server.key"),
cert: fs.readFileSync("server.cert"),
},
app
)
.listen(3000, function () {
console.log(
"ExpressJS App is running on port 3000 using SSL"
);
});
You can access environment variable like this
var env = process.env.NODE_ENV
// or
app.get('env')
To set it using SSH
export NODE_ENV=production
thanks all for reply, now i have fix the problem by doing this,
go to https://yourdomain.com:7080, refer here for login credential, https://www.interserver.net/tips/kb/how-to-reset-the-litespeed-admin-credentials/
then go to Virtual Host, and select the my webApp
then simply edit our app server
and lastly just add this
Thanks all for you guys help
system
Closed
13
This topic was automatically closed 3 hours after the last reply. New replies are no longer allowed.