ActionCable + Nginx + Puma和java.io.EOFException

问题描述 投票:0回答:1

我正在尝试连接到一个ActionCable websocket,一切正常,只需Puma并且没有nginx就可以在本地运行。

但是,当我尝试在我的暂存环境中执行完全相同的操作时,连接在连接后立即关闭。我能够得到下游的欢迎消息,也许是ping。

但是,连接突然关闭而没有任何onClose回调,所以我的猜测是nginx不会让连接持续存在。

这是我的网站nginx配置。

upstream app {
  # Path to Puma SOCK file, as defined previously
  server unix:/home/deploy/my-app/shared/tmp/sockets/puma.sock fail_timeout=60;
  keepalive 60;
}

server {
        listen 80;
        server_name localhost;
#       websocket_pass websocket;

        root /home/deploy/my-app/current/public;

        try_files $uri/index.html $uri @app;

        location @app {
          proxy_pass http://app;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
          proxy_redirect off;
        }

        #location / {
        #        proxy_set_header X-Forwarded-Proto $scheme;
        #        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #        proxy_set_header X-Real-IP $remote_addr;
        #        proxy_set_header Host $host;
        #        proxy_redirect off;
        #        proxy_http_version 1.1;
        #        proxy_set_header Connection '';
        #        proxy_pass http://app;
        #}

        location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt {
          gzip_static on;
          expires max;
          add_header Cache-Control public;
        }

        location /cable {
          proxy_pass http://app;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "Upgrade";
        }

        error_page 500 502 503 504 /500.html;
        client_max_body_size 4G;
        keepalive_timeout 10;
}

我还在nginx错误日志中发现了这个错误:

2019/02/11 21:08:35 [错误] 10233#10233:* 2 recv()失败(104:对等连接重置)代理升级后的连接,客户端:xxxx,服务器:localhost,请求:“GET / cable / HTTP / 1.1“,上游:”http://unix:/home/deploy/wr-api/shared/tmp/sockets/puma.sock:/cable/“,主持人:”xxxx“

ruby-on-rails nginx ruby-on-rails-5 actioncable nginx-reverse-proxy
1个回答
0
投票

所以过了一段时间,我们注意到staging环境cable.yml有url的这个值:

url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>

删除该值以及adapter: staging以外的所有其他值为我们修复了它。

新的cable.yml staging配置:

staging:
  adapter: redis

工作!

© www.soinside.com 2019 - 2024. All rights reserved.