express-subdomain
express-subdomain copied to clipboard
Multiple levels + NGINX
I'm trying to configure a multi level subdomain with nginx and express-subdomain.
In NGINX I have:
upstream backend-project { server unix://home/project/webserver/server.sock; } server { listen 80; server_name admin.project.example.com; location / { proxy_pass http://backend-project; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-for $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
And in Node:
app.use(subdomain('admin', require('./admin')(db)));
I've tried setting 'subdomain offset' but req.subdomains always returns [] except when I set it to 0 that returns backend-project.
Any idea? Locally using admin.localhost.dev (1 level) this module is working good
You might try something like this:
// app.js
import subdomain from 'express-subdomain'
import express from 'express'
// You're stuff here..
import api from './api'
app.use(subdomain('api', api()))
// api.js
import subdomain from 'express-subdomain'
import express from 'express'
import v1 from './v1'
const api = function() {
const apiRouter = express.Router()
apiRouter.use(subdomain('v1', v1()))
return apiRouter
}
module.exports = api
And
// v1.js
import express from 'express'
const v1 = function() {
const v1Router = express.Router()
v1Router.get('/', function(req, res) { res.json({name: 'Brian'}) })
// You can also use `v1Router.use('/user', user())` to handle different routes
return v1Router
}
module.exports = v1
This works pretty good for me..
Hi friends i got solution for dynamic domain to work locally:
Use nginx as a server!
If use using apache server, stop that and install nginx
first add all your domains and subdomains in /etc/hosts: (without this you can't able to make work in local system)
127.0.0.1 github.com 127.0.0.1 sameer.github.com
edit your nginx.conf file: Set a nginx reverse proxy
Add your node js project port, in my project i am using 5000, so i put 5000
server {
listen 80;
server_name github.com;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name *.github.com;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Instead of app.use(subdomain('yourstuff', router)); // static way Place the below code:
// get your dynamic subdomain
app.use(function(req, res, next) {
if (!req.subdomains.length || req.subdomains.slice(-1)[0] === 'www') return next();
// otherwise we have subdomain here
var subdomain = req.subdomains.slice(-1)[0];
// keep it
req.subdomain = subdomain;
next();
});
// render a page
app.get('/', function(req, res) {
// no subdomain
if (!req.subdomain) {
// render landing page
res.render('home');
} else {
// render subdomain specific data
res.render('user-page');
}
});