Были и другие подобные случаи в стеке, но все они в основном ссылаются на неверные порты или используют localhost в качестве IP-адреса вместо ip док-машины.
Приложение vue.js прекрасно подключается к веб-сокету и работает. Однако GET-запросы к 192.168.99.100:8080/meows
и другим конечным точкам достигают nginx 502 bad gateway
. Ручной доступ к конечным точкам (вместо vue.js) также вызывает 502 bad gateway
.
IP-адреса установлены правильно. Порты везде одинаковые :8080
. конечные точки имеют правильный http verb
, и все имеют nginx upstream
, указывающий на server location /..{}
. Пока нет проблем с подключением к сети, все данные проходят без проблем.
РЕДАКТИРОВАТЬ: я запускаю windows 7 с docker-toolbox, потому что моя версия для Windows не имеет всей виртуализации. Дальнейшая настройка после установки не производится.
Архитектура следующая:
докер-Compose
version: "3.6"
services:
meow:
build: "."
command: "meow-service"
depends_on:
- "postgres"
- "nats"
environment:
POSTGRES_DB: "meower"
POSTGRES_USER: "meower"
POSTGRES_PASSWORD: "123456"
NATS_ADDRESS: "nats:4222"
query:
build: "."
command: "query-service"
depends_on:
- "postgres"
- "nats"
environment:
POSTGRES_DB: "meower"
POSTGRES_USER: "meower"
POSTGRES_PASSWORD: "123456"
NATS_ADDRESS: "nats:4222"
ELASTICSEARCH_ADDRESS: "elasticsearch:9200"
pusher:
build: "."
command: "pusher-service"
depends_on:
- "nats"
environment:
NATS_ADDRESS: "nats:4222"
postgres:
build: "./postgres"
restart: "always"
environment:
POSTGRES_DB: "meower"
POSTGRES_USER: "meower"
POSTGRES_PASSWORD: "123456"
nats:
image: "nats-streaming:0.9.2"
restart: "always"
elasticsearch:
image: 'docker.elastic.co/elasticsearch/elasticsearch:6.2.3'
nginx:
build: "./nginx"
ports:
- "8080:80"
depends_on:
- "meow"
- "query"
- "pusher"
nginx.conf:
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
upstream meows_POST {
server meow:8080;
}
upstream meows_GET {
server query:8080;
}
upstream search_GET {
server query:8080;
}
upstream pusher {
server pusher:8080;
}
server {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
add_header Access-Control-Allow-Origin *;
location /meows {
limit_except GET POST OPTIONS {
deny all;
}
proxy_pass http://meows_$request_method;
}
location /search {
limit_except GET OPTIONS {
deny all;
}
proxy_pass http://search_GET;
}
location /pusher {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://pusher;
}
}
}
И чтобы показать, что приложение go также использует правильные порты, следующий порт прослушивает
func newRouter() (router *mux.Router) {
router = mux.NewRouter()
router.HandleFunc("/meows", listMeowsHandler).
Methods("GET")
router.HandleFunc("/search", searchMeowsHandler).
Methods("GET")
return
}
router := newRouter()
if err := http.ListenAndServe(":8080", router); err != nil {
log.Fatal(err)
}