diff --git a/server.js b/server.js index 54a91f8..d2603df 100644 --- a/server.js +++ b/server.js @@ -3,7 +3,7 @@ const path = require('path') const express = require('express') const wo = (global.wo = { - envi : require('base.enviconfig').mergeConfig({ + envar : require('base.enviconfig').mergeConfig({ Commander_Option_List: [ // 命令行里可以接受的参数。将传给 config.js 里的 commander。每个参数的定义格式是 [参数名,参数键,描述],后两者用于传给commander,取值后覆盖掉Config里的同名变量。 ['Web_Protocol', '-P, --Web_Protocol ', 'Web protocol: http|https|httpall.'], @@ -25,8 +25,8 @@ const wo = (global.wo = { */ }) }) -if (typeof wo.envi.Web_Ssl === 'string') { - wo.envi.Web_Ssl = eval(`(${wo.envi.Web_Ssl})`) +if (typeof wo.envar.Web_Ssl === 'string') { + wo.envar.Web_Ssl = eval(`(${wo.envar.Web_Ssl})`) } ;(function serve() { @@ -41,13 +41,13 @@ if (typeof wo.envi.Web_Ssl === 'string') { // communityMember: false, // store: require('greenlock-store-fs'), // email: 'ssl@faronear.org', -// approvedDomains: wo.wo.envi.sslDomains, +// approvedDomains: wo.wo.envar.sslDomains, // configDir: path.resolve(__dirname, 'ssl'), // app: server, // }) /*** 通用中间件 ***/ - server.use(require('morgan')('development' === wo.envi.prodev ? 'dev' : 'combined')) + server.use(require('morgan')('development' === wo.envar.prodev ? 'dev' : 'combined')) server.use(require('body-parser').json()) server.use(require('body-parser').urlencoded({ extended: false })) server.use(require('cookie-parser')()) @@ -57,14 +57,14 @@ if (typeof wo.envi.Web_Ssl === 'string') { // vhost 匹配了域名,就执行;不匹配,就next() // express.static 找到了具体文件,就返回;找不到,就next() // 所以,如果 vhost匹配了域名,且static找到了文件,就结束了。如果 vhost 匹配了域名,但static找不到文件,就继续往下。 - if (!wo.envi.vhosts) { + if (!wo.envar.vhosts) { server.use( - express.static(path.join(process.cwd(), wo.envi.Web_Root).replace('\\', '/'), { index: wo.envi.Web_Index }) // 可以指定到 node应用之外的目录上。windows里要把 \ 换成 /。 + express.static(path.join(process.cwd(), wo.envar.Web_Root).replace('\\', '/'), { index: wo.envar.Web_Index }) // 可以指定到 node应用之外的目录上。windows里要把 \ 换成 /。 ) - //server.use(require('serve-favicon')(path.join(process.cwd(), wo.envi.Web_Root, 'favicon.ico'))) + //server.use(require('serve-favicon')(path.join(process.cwd(), wo.envar.Web_Root, 'favicon.ico'))) } else { let vhost = require('vhost') - for (let h of wo.envi.vhosts) { + for (let h of wo.envar.vhosts) { for (let domain of h.domainList) { server.use( vhost( @@ -83,8 +83,8 @@ if (typeof wo.envi.Web_Ssl === 'string') { /*** 启动 Web 服务 ***/ let webServer - if ('http' === wo.envi.Web_Protocol) { - let portHttp = wo.envi.Web_Port || 80 + if ('http' === wo.envar.Web_Protocol) { + let portHttp = wo.envar.Web_Port || 80 webServer = require('http') .createServer(server) .listen(portHttp, function (err) { @@ -92,19 +92,19 @@ if (typeof wo.envi.Web_Ssl === 'string') { console.error(err) } else { console.log({time: new Date().toJSON()}, - `Server listening on ${wo.envi.Web_Protocol}://${wo.envi.Web_Hostname}:${portHttp} for ${wo.envi.prodev} environment` + `Server listening on ${wo.envar.Web_Protocol}://${wo.envar.Web_Hostname}:${portHttp} for ${wo.envar.prodev} environment` ) } }) - } else if ('https' === wo.envi.Web_Protocol) { - let portHttps = wo.envi.Web_Port || 443 + } else if ('https' === wo.envar.Web_Protocol) { + let portHttps = wo.envar.Web_Port || 443 webServer = require('https') .createServer( -// wo.wo.envi.Web_Ssl.type==='greenlock' ? greenlock.httpsOptions : +// wo.wo.envar.Web_Ssl.type==='greenlock' ? greenlock.httpsOptions : { - key: fs.readFileSync(wo.envi.Web_Ssl.file.key), - cert: fs.readFileSync(wo.envi.Web_Ssl.file.cert), - // ca: [ fs.readFileSync(wo.envi.Web_Ssl.file.ca) ] // only for self-signed certificate: https://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener + key: fs.readFileSync(wo.envar.Web_Ssl.file.key), + cert: fs.readFileSync(wo.envar.Web_Ssl.file.cert), + // ca: [ fs.readFileSync(wo.envar.Web_Ssl.file.ca) ] // only for self-signed certificate: https://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener }, server ) @@ -113,17 +113,17 @@ if (typeof wo.envi.Web_Ssl === 'string') { console.error(err) } else { console.log({time: new Date().toJSON()}, - `Server listening on ${wo.envi.Web_Protocol}://${wo.envi.Web_Hostname}:${portHttps} for ${wo.envi.prodev} environment` + `Server listening on ${wo.envar.Web_Protocol}://${wo.envar.Web_Hostname}:${portHttps} for ${wo.envar.prodev} environment` ) } }) - } else if ('httpall' === wo.envi.Web_Protocol) { - let portHttp = wo.envi.Web_Port?.portHttp || 80 - let portHttps = wo.envi.Web_Port?.portHttps || 443 -// if (wo.wo.envi.Web_Ssl.type==='greenlock') { + } else if ('httpall' === wo.envar.Web_Protocol) { + let portHttp = wo.envar.Web_Port?.portHttp || 80 + let portHttps = wo.envar.Web_Port?.portHttps || 443 +// if (wo.wo.envar.Web_Ssl.type==='greenlock') { // greenlock.listen(portHttp, portHttps, function (err) { // if (err) console.error(err) -// else console.log(`Server listening on [${wo.wo.envi.Web_Protocol}] http=>https://${wo.wo.envi.Web_Hostname}:${portHttp}=>${portHttps} for ${server.settings.env} environment`) +// else console.log(`Server listening on [${wo.wo.envar.Web_Protocol}] http=>https://${wo.wo.envar.Web_Hostname}:${portHttp}=>${portHttps} for ${server.settings.env} environment`) // }) // }else { require('http') @@ -137,8 +137,8 @@ if (typeof wo.envi.Web_Ssl === 'string') { console.error(err) } else { console.log({time: new Date().toJSON()}, - `Server redirecting from http://${wo.envi.Web_Hostname}:${portHttp} for ${ - wo.envi.prodev + `Server redirecting from http://${wo.envar.Web_Hostname}:${portHttp} for ${ + wo.envar.prodev } environment` ) } @@ -146,9 +146,9 @@ if (typeof wo.envi.Web_Ssl === 'string') { webServer = require('https') .createServer( { - key: fs.readFileSync(wo.envi.Web_Ssl.file.key), - cert: fs.readFileSync(wo.envi.Web_Ssl.file.cert), - // ca: [ fs.readFileSync(wo.envi.Web_Ssl.file.ca) ] // only for self-signed certificate: https://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener + key: fs.readFileSync(wo.envar.Web_Ssl.file.key), + cert: fs.readFileSync(wo.envar.Web_Ssl.file.cert), + // ca: [ fs.readFileSync(wo.envar.Web_Ssl.file.ca) ] // only for self-signed certificate: https://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener }, server ) @@ -157,16 +157,16 @@ if (typeof wo.envi.Web_Ssl === 'string') { console.error(err) } else { console.log({time: new Date().toJSON()}, - `Server listening on https://${wo.envi.Web_Hostname}:${portHttps} for ${ - wo.envi.prodev + `Server listening on https://${wo.envar.Web_Hostname}:${portHttps} for ${ + wo.envar.prodev } environment` ) } }) // } - } else if ('redirectHttp2Https' === wo.envi.Web_Protocol) { - let portHttp = wo.envi.Web_Port?.portHttp || 80 - let portHttps = wo.envi.Web_Port?.portHttps || 443 + } else if ('redirectHttp2Https' === wo.envar.Web_Protocol) { + let portHttp = wo.envar.Web_Port?.portHttp || 80 + let portHttps = wo.envar.Web_Port?.portHttps || 443 webServer = server.all('*', function (ask, reply) { reply.redirect(301, `https://${ask.headers.host.replace(`:${portHttp}`, `:${portHttps}`)}${ask.url}`) }) @@ -175,18 +175,18 @@ if (typeof wo.envi.Web_Ssl === 'string') { console.error(err) } else { console.log({time: new Date().toJSON()}, - `Server listening on ${wo.envi.Web_Protocol}://${wo.envi.Web_Hostname}:${portHttp} for ${wo.envi.prodev} environment` + `Server listening on ${wo.envar.Web_Protocol}://${wo.envar.Web_Hostname}:${portHttp} for ${wo.envar.prodev} environment` ) } }) - }else if ('proxyHttps2Http' === wo.envi.Web_Protocol) { - let portHttp = wo.envi.Web_Port?.portHttp || 80 - let portHttps = wo.envi.Web_Port?.portHttps || 443 + }else if ('proxyHttps2Http' === wo.envar.Web_Protocol) { + let portHttp = wo.envar.Web_Port?.portHttp || 80 + let portHttps = wo.envar.Web_Port?.portHttps || 443 var proxy=require('http-proxy').createProxyServer({ ssl: { - key: fs.readFileSync(wo.envi.Web_Ssl.file.key), - cert: fs.readFileSync(wo.envi.Web_Ssl.file.cert), - // ca: [ fs.readFileSync(wo.envi.sslCA) ] // https://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener + key: fs.readFileSync(wo.envar.Web_Ssl.file.key), + cert: fs.readFileSync(wo.envar.Web_Ssl.file.cert), + // ca: [ fs.readFileSync(wo.envar.sslCA) ] // https://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener }, target: `http://127.0.0.1:${portHttp}`, // iOS 的 AppStore 要求支持IPv6,只能用国外的vultr.com服务器,因此再代理回国内的solet主机。 // secure: true, // proxying https to https @@ -201,7 +201,7 @@ if (typeof wo.envi.Web_Ssl === 'string') { console.error(err) } else { console.log({time: new Date().toJSON()}, - `Server listening on ${wo.envi.Web_Protocol}://${wo.envi.Web_Hostname}:${portHttps} for ${wo.envi.prodev} environment` + `Server listening on ${wo.envar.Web_Protocol}://${wo.envar.Web_Hostname}:${portHttps} for ${wo.envar.prodev} environment` ) } })