Last active
August 29, 2015 14:27
-
-
Save dennishall/d44867c22b758932e0b6 to your computer and use it in GitHub Desktop.
No need to run nginx when you're running nodejs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var fs = require('fs'); | |
var httpProxy = require('http-proxy'); | |
// use environment variables if present. | |
var httpPort = process.env.PORT || 8000; | |
var httpsPort = process.env.HTTPS_PORT || 443; | |
// | |
// Create the proxy server listening on httpsPort, defaulting to 443 | |
// | |
var proxy = httpProxy.createProxyServer({ | |
ssl: { | |
key: fs.readFileSync('cert/key.pem', 'utf8'), | |
cert: fs.readFileSync('cert/cert.pem', 'utf8') | |
}, | |
target: 'http://localhost:' + httpPort, | |
secure: false | |
}).listen(httpsPort); | |
proxy.on('error', function(e, req, res) { | |
res.writeHead(500, { | |
'Content-Type': 'text/plain' | |
}); | |
res.end('An error occurred with the proxied application.\n Perhaps it is not currently running.'); | |
}); | |
// add 'X-Forwarded-For' header | |
proxy.on('proxyRes', function(e, req, res) { | |
res.setHeader('X-Forwarded-For', req.connection.remoteAddress); | |
}); | |
console.log('Reverse proxy is proxying :' + httpPort + ' and listening on :' + httpsPort); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Module dependencies. | |
*/ | |
"use strict"; | |
var express = require('express'); | |
var enrouten = require('express-enrouten'); | |
var path = require('path'); | |
var http = require('http'); | |
var favicon = require('serve-favicon'); | |
var logger = require('morgan'); | |
var methodOverride = require('method-override'); | |
var session = require('express-session'); | |
var bodyParser = require('body-parser'); | |
var multer = require('multer'); | |
var errorHandler = require('errorhandler'); | |
var cookieParser = require('cookie-parser'); | |
var maxmind = require('maxmind'); | |
maxmind.init(path.join(__dirname, '/data/GeoLiteCity.dat')); | |
var _global = { | |
pageHeader: require('./models/page-header'), | |
pageFooter: require('./models/page-footer'), | |
redesignMessage: require('./models/redesign-message') | |
}; | |
var app = express(); | |
app.set('port', process.env.PORT || 8000); | |
app.set('https_port', process.env.HTTPS_PORT || 443); | |
app.set('views', path.join(__dirname, '/public/templates')); | |
app.set('view engine', 'vash'); | |
app.use(favicon(path.join(__dirname, '/public/favicon.ico'))); | |
app.use(logger('dev')); | |
app.use(methodOverride()); | |
app.use(session({ | |
resave: true, | |
saveUninitialized: true, | |
secret: 'secret phrase goes here'})); | |
app.use(bodyParser.json()); | |
app.use(bodyParser.urlencoded({ extended: true })); | |
app.use(multer()); | |
app.use(express.static(path.join(__dirname, '.build'))); | |
app.use(cookieParser()); | |
// default server ip address value, will only be used for super-rare race condition | |
var serverIP = '23.72.23.58'; | |
// get Server's IP address .. because for local development, server ip === user ip | |
http.get({ | |
host: 'icanhazip.com', | |
path: '/' | |
}, function(response) { | |
var body = ''; | |
response.on('data', function(d) { | |
body += d; | |
}); | |
response.on('end', function() { | |
console.log('SERVER IP ADDRESS: ', body); | |
serverIP = body; | |
}); | |
}); | |
app.use(function(req, res, next) { | |
res.global = _global; | |
var cookieName = 'KmxVisitor_0'; | |
var cookie = req.cookies[cookieName]; | |
// check if client sent cookie, if not, set the zipcode cookie | |
if (cookie === undefined) { | |
// according to the http spec, headers are NOT case sensitive, but I'd rather check both than have to redo it. | |
var ip = (req.headers['X-Forwarded-For'] || req.headers['x-forwarded-for'] || req.connection.remoteAddress).split(',')[0].trim(); | |
// correct for local development | |
if(ip.indexOf('127.0.0.1') !== -1){ | |
ip = serverIP; | |
} | |
var loc = maxmind.getLocation(ip); | |
var zip = loc && loc.postalCode || 23219; | |
res.append('Set-Cookie', cookieName + '=Zip=' + zip + '; Domain=.carmax.com; Path=/'); | |
} | |
next(); | |
}); | |
app.use('/', enrouten({ | |
directory: './controllers' | |
})); | |
if (app.get('env') !== 'production'){ | |
app.use(errorHandler()); | |
} | |
app.listen(app.get('port'), function () { | |
console.log("Express server listening on port " + app.get('port')); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment