This Github repository has several Multi-Site examples in the folders starting with the words multi-site-
. Here is an overview of a few of them.
Basic Multi-Site configured in server.json
Here is a basic server.json
configuring several sites. Here we have some defaults configured in the web
object for all sites, including a single HTTP binding to all IPs on port 80. There is a custom host alias configured on each site. There is a site called "default" which is set to the default site with default=true
in the site object.
Copy {
"name" : "commandbox-test-multi-site-basic" ,
"web" : {
"accessLogEnable" : "true" ,
"aliases" : {
"/js" : "javascript"
} ,
"allowedExt" : "log" ,
"errorPages" : {
"404" : "404.cfm"
} ,
"GZIPEnable" : "true" ,
"gzipPredicate" : "regex('^.*\\.txt$')" ,
"mimeTypes" : {
"log" : "text/plain"
} ,
"rules" : [
"path(/tea)->set-error(418)"
] ,
"rulesFile" : ".rules.txt" ,
"welcomeFiles" : "custom.cfm,index.cfm" ,
"bindings" : {
"HTTP" : {
"listen" : "80"
}
}
} ,
"sites" : {
"site1" : {
"hostAlias" : "site1.com" ,
"webroot" : "site1"
} ,
"site2" : {
"hostAlias" : "site2.com" ,
"webroot" : "site2" ,
"accessLogEnable" : "false" ,
"aliases" : {
"/js" : "site2/javascript"
} ,
"allowedExt" : "log2" ,
"GZIPEnable" : "false" ,
"mimeTypes" : {
"log2" : "application/xml"
} ,
"rules" : [
"path(/brad)->set-error(123)"
] ,
"rulesFile" : "site2/.rules.txt" ,
"welcomeFiles" : "index.cfm" ,
"directoryBrowsing" : true ,
"blockCFAdmin" : true
} ,
"site3" : {
"hostAlias" : "site3.com" ,
"webroot" : "site3" ,
"aliases" : {
"/js-brad" : "site3/javascript"
} ,
"errorPages" : {
"404" : "missing.cfm"
} ,
"welcomeFiles" : "main.cfm,default.cfm,index.cfm" ,
"directoryBrowsing" : false ,
"blockCFAdmin" : false
} ,
"default" : {
"default" : true ,
"webroot" : "default" ,
"rules" : [
"rewrite(/index.cfm)"
]
}
}
}
Full example here: https://github.com/Ortus-Solutions/commandbox-tests/tree/master/multi-site-basic
Custom Bindings
This example server contains custom HTTP and SSL bindings for each server. You'll probably never need anything this complex, but we support it all! The HTTP port 81 binding on all IPs, SSL binding on port 444, and AJP binding on port 8010 are shared by all sites. Each site then adds additional bindings specific to the site. Needless to say, there are multiple URLs that lead to each site.
Copy {
"name" : "commandbox-tests-multi-site-bindings" ,
"web" :{
"host" : "0.0.0.0" ,
"HTTP" : {
"port" : "80"
} ,
"SSL" : {
"enable" : "true" ,
"port" : "443" ,
"certFile" : "../certs/ServerCert-all-SAN.pfx"
} ,
"AJP" : {
"enable" : "true" ,
"port" : "8009" ,
"secret" : "8009secret"
} ,
"bindings" : {
"HTTP" : {
"listen" : "0.0.0.0:8080"
} ,
"SSL" : {
"listen" : "0.0.0.0:8443" ,
"certFile" : "../certs/ServerCert-all-SAN.pfx"
} ,
"AJP" : {
"listen" : "0.0.0.0:16009" ,
"secret" : "16009secret"
}
}
} ,
"sites" :{
"site1" : {
"hostAlias" : "site1.com" ,
"webroot" : "site1" ,
"bindings" : {
"HTTP" : {
"listen" : "81"
} ,
"SSL" : {
"listen" : "444" ,
"certFile" : "../certs/ServerCert-all-SAN.pfx"
} ,
"AJP" : {
"listen" : "8010" ,
"secret" : "8010secret"
}
}
} ,
"site2" : {
"hostAlias" : "site2.com" ,
"webroot" : "site2" ,
"bindings" : {
"http" : [
{
"listen" : "0.0.0.0:80"
} ,
{
"listen" : "0.0.0.0:82"
}
] ,
"ssl" : {
"listen" : "0.0.0.0:446" ,
"certFile" : "../certs/ServerCert-all-SAN.pfx"
} ,
"AJP" : {
"listen" : "0.0.0.0:8011" ,
"secret" : "8011secret"
}
}
} ,
"site3" : {
"webroot" : "site3"
}
} ,
"hostAlias" : "site3.com"
}
Full example here: https://github.com/Ortus-Solutions/commandbox-tests/tree/master/multi-site-bindings
Web root convention
This example server configures some defaults in the web
object and then simply points to the web root of several sites where a .site.json
file is waiting to further configure each site:
Copy {
"name" : "commandbox-test-multi-site-json-webroot-convention" ,
"web" :{
"mimeTypes" : {
"log" : "text/plain"
} ,
"rules" : [
"path(/tea)->set-error(418)"
] ,
"welcomeFiles" : "custom.cfm,index.cfm" ,
"bindings" : {
"HTTP" : {
"listen" : "80"
}
}
} ,
"sites" :{
"site1" : {
"webroot" : "site1"
} ,
"site2" : {
"webroot" : "site2"
} ,
"site3" : {
"webroot" : "site3"
} ,
"default" : {
"webroot" : "default"
}
}
}
And here are the .site.json
files from each of the web roots:
Copy {
"hostAlias" : "site1.com"
}
Copy {
"hostAlias" : "site2.com" ,
"accessLogEnable" : "false" ,
"aliases" :{
"/js" : "javascript"
} ,
"allowedExt" : "log2" ,
"GZIPEnable" : "false" ,
"mimeTypes" :{
"log2" : "application/xml"
} ,
"rules" :[
"path(/brad)->set-error(123)"
] ,
"rulesFile" : "site2/.rules.txt" ,
"welcomeFiles" : "index.cfm" ,
"directoryBrowsing" : true ,
"blockCFAdmin" : true
}
Copy {
"hostAlias" : "site3.com" ,
"aliases" :{
"/js-brad" : "javascript"
} ,
"errorPages" :{
"404" : "missing.cfm"
} ,
"welcomeFiles" : "main.cfm,default.cfm,index.cfm" ,
"directoryBrowsing" : false ,
"blockCFAdmin" : false
}
Full example here: https://github.com/Ortus-Solutions/commandbox-tests/tree/master/multi-site-json-webroot-convention
Per-site siteConfigFile
This example is similar to above, but instead of pointing to the web root of each site, it points to the site config file for each site, which is stored outside of the web roots:
Copy {
"name" : "commandbox-test-multi-site-siteConfigFile" ,
"web" :{
"bindings" : {
"HTTP" : {
"listen" : "80"
}
}
} ,
"sites" :{
"site1" : {
"siteConfigFile" : "site1.json"
} ,
"site2" : {
"siteConfigFile" : "site2.json"
} ,
"site3" : {
"siteConfigFile" : "site3.json"
} ,
"default" : {
"siteConfigFile" : "default.json"
}
}
}
In this example, the site1.json
, site2.json
, site3.json
, and default.json
files all live in the same directory as the server.json and would point to their respective webroots like so:
Copy {
"hostAlias" : "site1.com" ,
"webroot" : "site1"
}
Full example here: https://github.com/Ortus-Solutions/commandbox-tests/tree/master/multi-site-siteConfigFile
SiteConfigFiles globbing pattern
In this example, we have a single file globbing pattern that points to a directory of JSON files that define the sites:
Copy {
"name" : "commandbox-test-multi-site-siteConfigFiles-globbing" ,
"web" :{
"bindings" : {
"HTTP" : {
"listen" : "80"
}
}
} ,
"siteConfigFiles" : "sites-enabled/*.json"
}
In this example, we have a folder called sites-enabled
in the same directory as the server.json
with one or more JSON files. Here is an example:
Copy {
"hostAlias" : "site1.com" ,
"webroot" : "../site1"
}
Note the relative paths are always relative to this JSON file.
Full example here: https://github.com/Ortus-Solutions/commandbox-tests/tree/master/multi-site-siteConfigFiles-globbing