亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Nodejs多站點切換Htpps協議詳解及簡單實例

2019-11-19 17:26:50
字體:
來源:轉載
供稿:網友

Nodejs多站點切換Htpps協議詳解

純屬趕個時髦,折騰了兩天終于將個人小站的全部服務由http協議切換到了https,整個過程雖然也不算太麻煩,但也不得不承認,個人對互聯網安全這方面的知識確認比較欠缺;

Letsencrypt是由Mozilla、思科和EFF等組織發起的,免費向廣大互聯網網站提供SSL證書,目的在于加速推進互聯網由Http過渡到Https,很高興周末能夠與其不期而遇,這對于一個互聯網散戶來說,絕對是大大的福利,所以決定乘周末折騰一番:先搞到證書,再改程序;

獲取letsencrypt頒發的免費的SSL證書也是相對比較簡單的,我還是個windows服務器,目前沒能耐去折騰Linux,所以要下載letsencrypt-win-simple的安裝包,運行letsencrypt.exe就開始了:第一步輸入郵箱,如果不是第一次申請會跳過前兩步,然后有5個選項供你選擇,一般選M,輸入M,Enter就到了讓你輸入需要證書的域,接著輸入這個域對應的站點的根目錄,輸入一個線上運行的域即可,指定的根目錄需要是能夠直接訪問的,因為他會訪問你輸入的域以及根目錄下的某個文件,我很納悶他是怎么在我站點新建的那些目錄和驗證文件,也就是說,他會在你指定的目錄下新建兩層目錄和一個他需要訪問的驗證文件,準確的說他要知道這個亂碼文件里的一段亂碼內容來完成認證;完成認證后就會在C:/Users/Administrator/AppData/Roaming/letsencrypt-win-simple/httpsacme-v01.api.letsencrypt.org目錄下生成證書文件;接下來的步驟就相對可以隨意些了;

如果你就一個主域和一個站點,那么就可以拿證書去改程序了;

如果真的這樣就完事了,那么是否感覺太快了,以致于沒啥體驗了;按照上面的步驟一個域下面可以生成一次證書,那么重復這些步驟,生成多個域下面的多個證書自然也是可以的了,問題在于必要性,或許折騰就是在為你的天真弱知買單;

Ok,我很天真;我為主域和兩個二級域各生成了一次證書,接下來改程序咯!

我的站點是用Nodejs搭建的,內部由http-proxy代理來串起來的3個小站點,沒有使用Nginx完全是為了以業余的玩性多去理解一點Nodejs;接下來主站監聽443端口,二級站點由http-proxy代理分發;

 var https=require('https');var http=require('http');var fs=require('fs');var server = http.createServer(app);var httpsServer=https.createServer({ key: fs.readFileSync('./privatekey.pem'), cert: fs.readFileSync('./certificate.pem')},app);httpsServer.listen(443);server.listen(80);

  代理中間件大概的樣子:

app.use(function(req,res,next){  var proxy = httpProxy.createProxyServer({    headers:{      'x-forward-ip':req.ip.match(/([/w/.]+)/g)[1]    }  });  proxy.on('error', function (err, req, res) {    res.writeHead(500, {      'Content-Type': 'text/plain'    });    res.end('Something went wrong.');  });    switch (req.headers.host){    case 'm.famanoder.cn':    proxy.web(req, res, { target: 'https://localhost:2333' });    break;    case 'cdn.famanoder.cn':     proxy.web(req, res, { target: 'https://localhost:3222' });    break;    default:       next();  }});

  這樣主域用https訪問一點問題沒有,問題在于二級站點的訪問瀏覽器始終會提示網站的證書不受信任,沒辦法,只好這樣訪問二級站點:https://cdn.famanoder.com:4000/,是的,帶端口訪問當然沒問題,這樣的話就沒走代理了,可始終感覺不太方便,別扭,只能重想辦法了;

又是一個機緣巧合,準備起身下班時看到了一篇文章,除了標題,全英文的,但直覺告訴了我,內容有我想要的東西;一臉懵逼的走馬觀花的看了一遍,果然豁然開朗了:在命令行里啟動letsencrypt加--san參數來申請證書,可以為一個域綁定多個附帶的域,也就說多個域可以共用同一套證書,那么代理的問題自然就解開了;輸入主域后,再輸入多個域用逗號隔開,然后他會依次去每個域驗證,最后生成共用的一套證書;于是我決定了:今晚加餐!

Letsencrypt的驗證方式為訪問這個格式的地址:

http://cdn.famanoder.com/.well-known/acme-challenge/RHha4Dx3YaUzi7tu_C6p9mPk-TNpuLVN5hMQro2N1_Q

他會依次訪問每個域的這個亂碼文件,估計這個文件里有他想要的另一段亂碼內容,打開看看就知道了;主站用的Express,cdn站點使用的原生Nodejs,兩個站點的訪問結果都是直接下載了文件,可能MIME頭要改改,因為現在是多個域要訪問同一個目錄下的文件,索性在填寫根目錄時別填真正的根目錄,而是填一個多個根目錄共同所屬的目錄,比如D:/,修改路由文件如下:

 

 // www(Express)app.get('/.well-known/acme-challenge/:ids',function(req,res,next){  require('fs').readFile('D:/.well-known/acme-challenge/'+req.params.ids,function(err,data){    err&&console.log(err);    res.end(data);  });});// www(Koa2)router.get('/.well-known/acme-challenge/:ids',async (cx,next)=>{  await next();  let data=await fs.readFileSync('D:'+cx.request.url);  cx.response.body=data;});// cdnif (req.url.indexOf('acme-challenge')!=-1) {  var pathname=url.parse(req.url).pathname;  fs.readFile('D:'+pathname,function(err,data){    err&&console.log(err);    res.writeHead(200,{     'content-type':'text/html'    });    res.end(data);    return false;  });}return false;

  這樣,多個域依次驗證通過了,生成了同一套證書,有效期3個月,有效期內系統正常的話,3個月后會自動續期;那么就可以繼續走http-proxy代理了,二級站點的https訪問也不需要帶端口了;接下來就是替換所有的http為https了,或者直接去掉協議,//www.famanoder.com格式也可以,瀏覽器會自動識別采用相應的協議;

由于Letsencrypt的驗證域必須是線上可訪問的,所以本地開發要另外配置,比如用Git自帶的openssl生成一套證書作為開發調試時用也是可以的,只是瀏覽器會提示證書不受信用;

總之,說復雜也不復雜,說簡單也不是那么簡單,事情就是那么個事情,折騰就是為天真弱知買單嘛!

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品十八以下禁看| 欧美在线性爱视频| 69av在线视频| 麻豆乱码国产一区二区三区| 91av视频在线免费观看| 精品无码久久久久久国产| 久久影院在线观看| 日韩av大片免费看| 91久久国产婷婷一区二区| 欧美成人精品一区| 久久精品国产亚洲7777| 国产精品久久国产精品99gif| 精品久久久在线观看| 亚洲精品国产美女| 91视频-88av| 91精品国产一区| 中文字幕一区电影| 8x海外华人永久免费日韩内陆视频| 亚洲精品电影网在线观看| 91精品国产综合久久久久久久久| 日日摸夜夜添一区| 国产精品久久一区主播| 久久久免费观看| 92福利视频午夜1000合集在线观看| 久久综合国产精品台湾中文娱乐网| 欧美日韩国产成人在线观看| 欧美一级大片在线免费观看| 91色琪琪电影亚洲精品久久| 日韩一区视频在线| 日韩成人在线网站| 欧美夫妻性视频| 欧美性视频在线| 91免费在线视频网站| 亚洲精品www久久久| 久久久女女女女999久久| 欧美一级黑人aaaaaaa做受| 国产精品一区二区3区| 日韩激情视频在线播放| 中文字幕自拍vr一区二区三区| 欧美一区二区三区艳史| 国产精品日韩在线观看| 91免费观看网站| 黄网动漫久久久| 夜夜狂射影院欧美极品| 久久久欧美一区二区| 日本午夜人人精品| 国产欧美日韩精品在线观看| 国内成人精品视频| 久久久亚洲天堂| 茄子视频成人在线| 亚洲欧美日韩国产精品| 中文字幕一区电影| 精品视频在线播放色网色视频| 亚洲一区二区三区四区在线播放| 91视频九色网站| 欧美在线亚洲在线| 亚洲tv在线观看| 亚洲国产毛片完整版| 国产在线观看一区二区三区| 成人av.网址在线网站| 亚洲xxxx视频| 国产福利精品在线| 亚洲综合中文字幕在线观看| 一区二区三区四区在线观看视频| www.色综合| 亚洲iv一区二区三区| 国产精品亚洲аv天堂网| 日韩成人中文字幕在线观看| 国产日韩在线亚洲字幕中文| 日韩欧美极品在线观看| 久久97久久97精品免视看| 97超级碰在线看视频免费在线看| 国产精品欧美一区二区| 欧洲美女7788成人免费视频| 成人亚洲激情网| 91免费福利视频| 色综合伊人色综合网| 亚洲一区二区久久久| 91国在线精品国内播放| 日韩在线免费av| 亚洲欧洲日本专区| 亚洲色图狂野欧美| 精品香蕉一区二区三区| 国产日韩欧美视频在线| 欧美丰满老妇厨房牲生活| 久久精品国产清自在天天线| 色妞色视频一区二区三区四区| 欧美高清视频在线观看| 日韩在线欧美在线国产在线| 日韩高清电影免费观看完整版| 国产成人97精品免费看片| 国产精品亚洲网站| 青草青草久热精品视频在线网站| 日韩大陆欧美高清视频区| 日韩免费在线免费观看| 91免费精品国偷自产在线| 日韩国产激情在线| 国产精品视频1区| 日韩中文在线不卡| 高清欧美性猛交xxxx黑人猛交| 久久久久久成人| 九九精品在线观看| 一区二区在线视频播放| 日韩高清欧美高清| 欧美成人精品一区二区| 成人在线激情视频| 国产视频一区在线| 欧日韩在线观看| 中文字幕精品视频| 欧美日韩人人澡狠狠躁视频| 97超级碰在线看视频免费在线看| 中文字幕久热精品在线视频| 国产女人精品视频| 日韩中文字在线| 51视频国产精品一区二区| 国产精品亚洲美女av网站| 亚洲国产精品成人av| 成人观看高清在线观看免费| 久久亚洲成人精品| 精品欧美国产一区二区三区| 欧美日韩国产123| 色哟哟亚洲精品一区二区| 在线播放日韩专区| 欧美精品国产精品日韩精品| 国产成人综合精品在线| 91免费看片网站| 奇米影视亚洲狠狠色| 久久免费视频这里只有精品| 少妇精69xxtheporn| 国产日韩欧美一二三区| 亚洲精品免费一区二区三区| 精品久久久久久国产| 亚洲精品一区二三区不卡| 日韩欧美在线观看视频| 日韩激情视频在线| 日韩中文字幕第一页| 久久99久久99精品中文字幕| 精品亚洲国产成av人片传媒| 欧美精品少妇videofree| 国产亚洲精品美女| 日韩视频永久免费观看| 国产精品九九久久久久久久| 国产精品视频免费在线| 国产精品国模在线| 国产精品1234| 亚洲一区二区三区四区在线播放| 欧美日韩高清区| 国产在线观看一区二区三区| 国产精品久久久av| 亚洲视频电影图片偷拍一区| 精品国产91乱高清在线观看| 中文字幕日本精品| 九九热视频这里只有精品| 亚洲最大福利视频网| 在线播放日韩精品| 免费av一区二区| 俺也去精品视频在线观看| 97精品视频在线播放| 久久午夜a级毛片| 国产成人精品日本亚洲专区61| 欧美国产欧美亚洲国产日韩mv天天看完整| 毛片精品免费在线观看| 成人精品视频久久久久| 神马久久久久久|