Ответ 1
Я сам столкнулся с этой проблемой, но у меня уже были настроены заголовки прокси-сервера, и он все еще не работал. Но, по-видимому, Cloudflare вызывает проблемы. Вот отличная статья на эту тему: https://meteorhacks.com/cloudflare-meets-meteor
Насколько я нашел, существует три решения:
Вариант 1: Используйте Enterprise CloudFlare, поддерживающий сокеты.
Вариант 2: Отключить веб-узлы Meteor, что повлияет на вашу производительность, поскольку оно возвращается обратно для использования sock.js в качестве замены. Для этого просто установите среду метеоров следующим образом:
export DISABLE_WEBSOCKETS=1
Вариант 3: В Cloudflare создайте субдомен ddp для websocket (ddp.yourdomain.com), а затем отключите Cloudflare в новом субдомене. После этого установите среду метеоров следующим образом:
export DDP_DEFAULT_CONNECTION_URL=http://ddp.example.com
После этого моя конфигурация nginx нуждалась в некоторых настройках, так как теперь это стало настройкой перекрестного происхождения (CORS). Это моя новая конфигурация nginx:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80 proxy_protocol;
listen [::]:80 proxy_protocol;
server_name mydomain.com ddp.mydomain.com;
## This allows the CORS setup to work
add_header Access-Control-Allow-Origin 'http://example.com';
## This hides the CORS setup from the Meteor server
## Without this the header is added twice, not sure why?
proxy_hide_header Access-Control-Allow-Origin;
## Idealy the two options above should be disabeled,
## Then use this one instead, but that caused issues in my setup.
# proxy_set_header Access-Control-Allow-Origin 'http://example.com';
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host; # pass the host header
proxy_set_header Upgrade $http_upgrade; # allow websockets
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Real-IP $remote_addr; # Preserve client IP
proxy_set_header X-Forwarded-For $remote_addr;
proxy_http_version 1.1;
# Meteor browser cache settings (the root path should not be cached!)
if ($uri != '/') {
expires 30d;
}
}
}
Наконец, не забудьте перезапустить nginx.