(如果需要的話,請參閱my last question一些更多的背景資料)如何使BrowserSync與nginx代理服務器一起使用?
我開發使用分離型的前端和後端的應用程序:
- 後端是一個Rails應用程序(服
localhost:3000
),主要提供一個REST API。 - 前端是一個AngularJS應用程序,我使用Gulp構建並在
localhost:3001
上在當地提供服務(使用BrowserSync)。
爲了得到兩端來相互交談,同時保持高same-origin policy,我配置nginx的充當兩者之間的代理,在localhost:3002
可用。這裏是我的nginx.conf:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 3002;
root /;
# Rails
location ~ \.(json)$ {
proxy_pass http://localhost:3000;
}
# AngularJS
location/{
proxy_pass http://localhost:3001;
}
}
}
基本上,.json
文件的任何要求,我發送到Rails的服務器,以及任何其他請求(例如,對於靜態資產),我發送到BrowserSync服務器。
的BrowserSync任務從我gulpfile.coffee
:
gulp.task 'browser-sync', ->
browserSync
server:
baseDir: './dist'
directory: true
port: 3001
browser: 'google chrome'
startPath: './index.html#/foo'
這基本上都有效,但需要注意幾個問題,我試圖解決:
- 當我運行一飲而盡任務,根據上面的配置,BrowserSync將加載Chrome標籤
http://localhost:3001/index.html#/foo
。因爲我使用nginx代理,但是,我需要的端口是3002.有沒有辦法告訴BrowserSync,「在端口3001上運行,但在端口3002上啓動」?我嘗試使用絕對路徑startPath
,但它只是預期相對路徑。 - 每次BrowserSync啓動時,控制檯中都會出現(看似良性)JavaScript錯誤:
WebSocket connection to 'ws://localhost:3002/browser-sync/socket.io/?EIO=3&transport=websocket&sid=m-JFr6algNjpVre3AACY' failed: Error during WebSocket handshake: Unexpected response code: 400
。不知道這意味着什麼,但我的假設是,BrowserSync在某種程度上被nginx代理弄糊塗了。
如何解決這些問題以使其無縫運行?
感謝您的任何意見!
非常感謝!這很好。我不得不做一些小調整 - (a)在gulpfile中,通過屬性'bs.options.urls.local'訪問網址而不是'bs.options.url'(看起來像API可能已經稍微改變了(b)在nginx.conf中,將BrowserSync proxy_pass設置爲「http:// localhost:3001」而不是「http:// localhost:3002」(我假設這意味着指定BrowserSync服務器,而不是nginx代理)。再次感謝您的時間和幫助 - 他們非常感謝! – Bungle