Как заставить BrowserSync работать с прокси-сервером nginx?
(При необходимости, см.мой последний вопрос для дополнительной информации.)
Я занимаюсь разработкой приложения, которое использует разделенный фронт и бэкэнд:
Бэкэнд представляет собой приложение Rails (обслуживается наlocalhost:3000
) который в первую очередь предоставляет REST API.Интерфейс - это приложение AngularJS, которое я создаю вместе с Gulp и обслуживаю локально (используяBrowserSync) наlocalhost:3001
.Чтобы два конца разговаривали друг с другом, соблюдая при этомполитика того же происхожденияЯ настроил 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'
Все это в основном работает, но с несколькими оговорками, которые я пытаюсь решить:
Когда я запускаю задачу gulp, основываясь на приведенной выше конфигурации, BrowserSync загружает вкладку Chrome по адресуhttp://localhost:3001/index.html#/foo
, Так как я использую прокси-сервер nginx, мне нужно, чтобы порт был 3002. Есть ли способ сказать BrowserSync, «запустить на порту 3001, но запустить на порту 3002»? Я пытался использовать абсолютный путь дляstartPath
, но он ожидает только относительный путь.Я получаю (казалось бы, доброкачественную) ошибку JavaScript в консоли каждый раз, когда запускается BrowserSync: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.Как я могу исправить эти проблемы, чтобы это работало без проблем?
Спасибо за любой вклад!