(. Nếu cần, vui lòng xem my last question cho một số thông tin nền hơn)Làm cách nào để làm cho BrowserSync hoạt động với máy chủ proxy nginx?
Tôi đang phát triển một ứng dụng mà sử dụng một tách riêng phía trước và backend:
- Backend là một ứng dụng Rails (phục vụ trên
localhost:3000
) chủ yếu cung cấp API REST. - Giao diện người dùng là ứng dụng AngularJS, tôi đang xây dựng với Gulp và phục vụ tại địa phương (sử dụng BrowserSync) trên
localhost:3001
.
Để có được hai đầu để nói chuyện với nhau, trong khi tôn vinh các same-origin policy, tôi cấu hình nginx để hoạt động như một proxy giữa hai, có sẵn trên localhost:3002
. Dưới đây là nginx.conf tôi:
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;
}
}
}
Về cơ bản, bất kỳ yêu cầu .json
file, tôi gửi đến máy chủ Rails, và bất kỳ yêu cầu khác (ví dụ, đối với tài sản tĩnh), tôi gửi đến máy chủ BrowserSync .
Nhiệm vụ BrowserSync từ gulpfile.coffee
tôi:
gulp.task 'browser-sync', ->
browserSync
server:
baseDir: './dist'
directory: true
port: 3001
browser: 'google chrome'
startPath: './index.html#/foo'
này tất cả về cơ bản hoạt động, nhưng với một số khó khăn mà tôi đang cố gắng để giải quyết:
- Khi tôi chạy nhiệm vụ ngụm, dựa trên cấu hình ở trên, BrowserSync tải một tab Chrome tại
http://localhost:3001/index.html#/foo
. Vì tôi đang sử dụng proxy nginx, tuy nhiên, tôi cần cổng là 3002. Có cách nào để nói với BrowserSync không, "chạy trên cổng 3001, nhưng bắt đầu trên cổng 3002"? Tôi đã thử sử dụng đường dẫn tuyệt đối chostartPath
, nhưng nó chỉ mong đợi một đường dẫn tương đối. - Tôi nhận được lỗi JavaScript (dường như lành tính) trong bảng điều khiển mỗi lần BrowserSync bắt đầu:
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
. Bạn không chắc chắn điều này có nghĩa là chính xác, nhưng giả định của tôi là BrowserSync bị nhầm lẫn bởi proxy nginx.
Làm cách nào để khắc phục những sự cố này để chạy liên tục?
Cảm ơn mọi đầu vào!
Cảm ơn rất nhiều! Điều này làm việc tuyệt vời. Tôi đã phải thực hiện một vài chỉnh nhỏ - (a) trong gulpfile, truy cập url thông qua thuộc tính 'bs.options.urls.local' thay vì' bs.options.url' (có vẻ như API có thể đã thay đổi chút ít ?), và (b) trong nginx.conf, đặt proxy BrowserSync thành 'http: // localhost: 3001' thay cho' http: // localhost: 3002' (tôi giả định đó có nghĩa là chỉ định máy chủ BrowserSync, chứ không phải là proxy nginx). Cảm ơn bạn một lần nữa vì đã dành thời gian và giúp đỡ - chúng được đánh giá cao! – Bungle