(如果需要的话,请参阅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