Как заставить 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.

Как я могу исправить эти проблемы, чтобы это работало без проблем?

Спасибо за любой вклад!

Ответы на вопрос(4)

Ваш ответ на вопрос