全部的Demo都不是完整的程序,全部未上線的程序都僅僅是個Demo;前端
Nodejs做爲Web開發的後起之秀,在如今的國內環境下,雖比不上PHP的火熱,沒有.net那麼廣大的羣衆基礎,蓋不過Java的高大上,但Nodejs基於谷歌V8引擎的極速,異步IO與事件模型,無疑將是Web開發的重大革新;我是一個小前端,自從知道Nodejs,就覬覦其很久,翹首以盼終於在業餘用Express4.x斷斷續續作了一個我的博客;node
爲了讓個人博客不僅是一個躺在本地的Demo,我買了個服務器,搭建好環境,選好日子,準備上線了,上線後就發現本身傻逼了……在目前的國內,Nodejs算是小衆的,最可能是個比較有情調的,適合有閒情雅緻的人去消遣;固然,問題不可避免,牢騷你也能夠隨便,但既然選擇了,就要相信本身不是盲目的,固然還得堅決的走下去;在此和那些喜歡Nodejs,喜歡前端的小夥伴們分享一下關於上線後首先要解決的域名綁定問題;可能你搞過.net、PHP什麼的,有IIS、一鍵建站的軟件,那麼這些都無所謂,我只是站在一個小前端的視角,分享下基於Nodejs的建站問題;nginx
如今已經很是流行Nginx反向代理的方式了,當我百度後最開始也是選擇了用Nginx來反向代理個人博客站點;我是個服務器小白,一開始真心傷不起啊,不過也沒什麼可怕的,你只須要按照別人分享的模子,修改爲你的就能夠了,除非你想正兒八經的搞運維;固然不可避免的確定會出現些未預知的小問題,好比:代理後客戶端的IP獲取問題(我那時獲取全部客戶的IP都是同樣的……),上傳文件的大小限制問題,都須要你再次從新配置相關的Nginx配置項;web
基本配置方式以下:瀏覽器
命令行進入nginx.exe目錄 -> start nginx (啓動nginx) -> 打開conf目錄裏的nginx.conf 文件 –> 新增一段upstream服務器
upstream nodejs{ server 127.0.0.1:3000; //你的Express項目端口 # server 127.0.0.1:3001; keepalive 64; }
-> 在後面的server{}裏引用這裏定義好的nodejs app
完整的片斷以下:運維
server { listen 80; server_name www.famanoder.com famanoder.com; //請求到80端口的host location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; proxy_set_header Connection ""; proxy_pass http://nodejs; } } 重啓nginx:nginx –s reload或者nginx –c conf/nginx.conf
那麼不出意外的話,你如今能夠用域名訪問你的博客了;異步
Nodejs是強大的;ui
幾天後我知道了Nodejs的http-proxy模塊,就是用來建立代理服務器的;反正都是折騰,我毅然決然選擇了不用nginx,使用屬於Noders的http-proxy;並非nginx很差用,只是我的選擇偏好問題;相信前端出身的Noders們也確定會對自家的模塊更熱衷;
http.createServer()建立一個常規http服務器監聽80端口,經過http-proxy模塊proxy.createProxyServer()建立代理服務器,每次請求由proxy.web()方法來進行分發;
根目錄下新建一個proxy.js文件:
var proxy=require(‘http-proxy’).createProxyServer({}); proxy.on(function(err,req,res){ res.writeHead(500,{ ‘Content-Type’:’text/plain’ }); }); var server=require(‘http’).createServer(function(req,res){ var host= req.headers.host; switch(host){ case ‘www.famanoder.com’: proxy.web(req,res,{target:’http://localhost:3000’}); break; case 'famanoder.com': proxy.web(req, res, { target: 'http://localhost:4030' }); break; default: res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Welcome to my server!'); } }); console.log("listening on port 80") server.listen(80);
是否是也很不錯啊,看起來就很爽,OK,接下來就是到app.js下去使用proxy模塊了;
加一句:require(‘./proxy’);就好了,到瀏覽器裏看看是否是同樣實現了反向代理。
至此,Nodejs反向代理的兩種方式就都實現了,這不是Demo,你的程序真正在跑了;接下來就是要根據具體的其餘業務,後續跟進和進一步探索了;
上個週末出去溜達時,看到一個大叔的後背上印着一行字:「要作就作大將軍!」,當時我就在內心爲這位大叔點了一萬個贊,我本布衣,一介碼農,路漫漫其修遠兮,道阻且長,但是——咱們正青春!