so my end goal is to have multiple node apps that connect to the same database and share sessions among users. So if you log out of one app it logs you out of all of them and same goes for logging in. So this IS WORKING in my dev environment. I have two node express apps connecting to the same Mongo session database so I can log into one app and the other automatically recognizes the session and logs me in. I have since pushed this to our live CentOS server and use PM2 and Nginx for serving it. It is currently creating a new session entry for each app. Both apps use the same database for sessions and users. I can see in the live session database that there is a separate session for each app. Thus, I have to log into each app right now instead of one. This must be something to do with Nginx because this works locally.
NOTE: i'm using connect-mongodb-session
Here is my main.js file in each express app (same for both except for port #):
var MongoDBStore = require('connect-mongodb-session')(express.session);
var configDB = require('./config/database.js');
var env = require('./config/env.js');
if(env.location == 'test'){
var store = new MongoDBStore({
uri: configDB.sessions_url,
collection: 'sess'
});
}else if(env.location == 'live'){
var store = new MongoDBStore({
uri: configDB.sessions_url_live,
collection: 'sess'
});
}
// Catch errors
store.on('error', function(error) {
assert.ifError(error);
assert.ok(false);
});
var app = express();
var port = process.env.PORT || 3008;
var mongoose = require('mongoose');
var passport = require('passport');
var path = require('path');
app.configure(function() {
app.use(express.cookieParser()); // read cookies (needed for auth)
app.use(express.bodyParser()); // get information from html forms
app.use(express.static(path.join(__dirname, '/static')));
app.use(express.session({
secret: 'supercoolpassword',
cookie: {
maxAge: 1000 * 60 * 60 * 24 * 7 // 1 week
},
resave: true,
saveUninitialized: true,
store: store,
name: "id",
proxy: true
}));
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
});
Here is my nginx Conf. I tried the suggestion here to add "proxy_set_header X-Forwarded-Proto $scheme":
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
upstream my_nodejs_upstream {
server orders.domain.com;
keepalive 64;
}
server {
listen 80;
server_name orders.domain.com;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_pass http://localhost:3008;
proxy_redirect off;
proxy_read_timeout 240s;
}
}
server {
listen 443 ssl;
server_name orders.domain.com;
ssl_certificate "/etc/nginx/ssl/certs/nginx-selfsigned.crt";
ssl_certificate_key "/etc/nginx/ssl/private/nginx-selfsigned.key";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_pass http://localhost:3008;
proxy_redirect off;
proxy_read_timeout 240s;
}
}
server {
listen 80;
server_name home.domain.com;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_pass http://localhost:3009;
proxy_redirect off;
proxy_read_timeout 240s;
}
}
server {
listen 443 ssl;
server_name home.domain.com;
ssl_certificate "/etc/nginx/ssl/certs/nginx-selfsigned.crt";
ssl_certificate_key "/etc/nginx/ssl/private/nginx-selfsigned.key";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_pass http://localhost:3009;
proxy_redirect off;
proxy_read_timeout 240s;
}
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}