SSE / EventSource 在第一个数据块后关闭(Rails 4 + Puma + Nginx)

2023-11-27

我跟着401-ActionController-LiveRailscast 和这个博客文章 about Server-Sent-Events在我的 Rails 应用程序中设置类似的东西。当我仅使用时打开与服务器的连接时,它工作得很好puma但与puma + nginx,连接在发送第一个数据块后关闭。

我也尝试遵循这些问题中提供的解决方案,但它们对我不起作用:

  • ActionController::Live Streaming 在发送第一个块后终止
  • EventSource / 服务器通过 Nginx 发送事件

这就是我得到的:

Curl response

This is 我如何设置我的服务器这是我目前的nginx配置:

upstream puma {
  server unix:///home/deploy/apps/outy/shared/tmp/sockets/outy-puma.sock;
  keepalive 16;
}

server {
  listen 80 default_server deferred;

  root /home/deploy/apps/outy/current/public;
  access_log /home/deploy/apps/outy/current/log/nginx.access.log;
  error_log /home/deploy/apps/outy/current/log/nginx.error.log info;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @puma;
  location @puma {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_pass http://puma;

    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
    proxy_cache off;
  }

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

我将分享有效的配置。

nginx

upstream app_server {
    server unix:/var/tmp/sockets/puma.sock
    fail_timeout=0;
}

server {
    listen 80 default_server;
    listen 443 ssl;
    client_max_body_size 8m;
    server_tokens off;

    server_name localhost;

    keepalive_timeout 5;

    location / {
        try_files @uri @app;
    }

    location @app {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
      proxy_set_header Host $http_host;
      proxy_redirect off;

      proxy_http_version 1.1;
      chunked_transfer_encoding off;

      proxy_buffering off;

      proxy_pass http://app_server;
    }
}

控制器

class StreamController < ActionController::Base
  include ActionController::Live

  def hello
    response.headers["Content-Type"] = "text/event-stream" #; charset=utf-8"

    10.times {
      response.stream.write("data: Hello World!!\n\n")
      sleep 1
    }
  rescue IOError
    puts "Stream IO Error"
    logger.info "Stream IO Error"
  ensure
    puts "Stream closed"
    logger.info "Stream closed"
    response.stream.close
  end
end

curl

$ curl -i -N http://localhost/stream/hello
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 29 Jul 2015 09:15:43 GMT
Content-Type: text/event-stream
Transfer-Encoding: chunked
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Cache-Control: no-cache
X-Request-Id: 41e80567-d792-4a48-9ec3-c661aa056081
X-Runtime: 0.062282
Vary: Origin

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSE / EventSource 在第一个数据块后关闭(Rails 4 + Puma + Nginx) 的相关文章

  • Capistrano + Thin + nginx 不允许用户使用 sudo howto?

    我有一个这样的场景 我想使用 capistrano 部署 ruby on Rails 应用程序 Web 应用程序位于瘦集群上 配置文件存储在 etc thin 下 etc init d thin 中还有一个初始化脚本 因此每当我的服务器需要
  • NGINX:在 access_log 中混淆密码

    我想记录 request body在访问日志中 但有些请求包含一些敏感的 JSON 字段 例如密码 Example 2019 03 28 201 POST api user add HTTP 1 1 x22email x22 email p
  • Rails 路由:嵌套、成员、集合、命名空间、范围和可定制

    我想更多地了解铁路路线 会员及收藏 Example resource route with options resources products do member do get short post toggle end collecti
  • Dokku:从应用程序监听多个端口

    我正在使用 dokku 部署一个节点应用程序 带有express js 我的应用程序由 2 个 Express js 应用程序组成 它们监听两个不同的端口 一个是主应用程序 另一个是网络界面kue 一个简单的 Node js 作业队列 当我
  • 将虚拟主机分配给 Docker 端口

    我设置了通配符 DNS 以便对自定义域 foo 的所有 Web 请求都映射到 Docker 主机的 IP 地址 如果我有多个运行 Apache 或 Nginx 实例的容器 每个容器都会将 Apache 端口 80 映射到某个外部入站端口 我
  • Amazon Linux 上的 Nginx + php-fpm = 在信号 11 上退出

    亚马逊 Linux 最新 PHP 5 4 19 cli 构建时间 2013 年 9 月 3 日 23 19 23 nginx版本 nginx 1 2 9 安装 PHP FPM PHP 5 4 19 fpm fcgi 构建时间 2013 年
  • 使用 nginx 将 PATCH 请求代理为 POST

    我尝试使用 nginx 将 HTTP PATCH 请求重定向到 HTTP POST 请求 我还尝试了以下配置 但它不起作用 我收到 400 错误请求 http map request method my method default req
  • nginx 代理重定向,带有来自 uri 的端口

    我正在尝试使用 nginx 进行重定向 这个想法是将某些端口的 uri id 1234 重定向到 localhost 1234 固定端口的重定向 location id 1234 rewrite id 1234 1 break proxy
  • Squid 可以在 nginx 后面运行吗?

    我正在尝试在 nginx 后面运行一个鱿鱼服务器 我这样配置 nginx server listen 8080 location proxy pass http localhost 3128 proxy set header Host ho
  • nginx + WordPress:SFTP + 自动更新的适当用户/文件权限?

    I used this http wordimpress com aws ec2 rds s3 cloudfront nginx wordpress tutorial roundup 在 Ubuntu VPS 上安装 nginx 和 Wor
  • 通过 ESI:include 设置 Cookie,如何?

    我正在尝试使用 esi 在我的网站上创建忍者缓存 这个想法是 该网站大部分是静态的 我只需要在用户是否登录时做一些花哨的事情 所以我试图在页面A上放置一个 并在页面B的应用程序中设置触发器 这样我就可以将页面 A 缓存在 varnish 上
  • 在使用 Let's Encrypt 和 Nginx 进行的 SSL Labs 测试中,如何在所有类别中获得 A+ 100 分?

    在 www ssllabs com 测试我的 SSL 证书时 我试图在所有类别上获得 100 分 然而 我正在努力争取所有分数都达到 A 和 100 关于我应该使用什么 NGINX 配置有什么建议吗 或者我应该如何生成 Let s Encr
  • Nginx 配置文件在 Elastic Beanstalk 部署期间被覆盖?

    我需要将 p3p 标头添加到标准 Nodejs 和 Nginx Elastic Beanstalk 上的静态资源位置 我创建了一个ebextension脚本如上所解释这个问题 https stackoverflow com question
  • 在同一个 nginx 服务器块上公开多个 api uri

    Goal 我的目标是在同一个 nginx 服务器上设置多个后端 api 容器 http localhost 80 api account gt 调用 http account service 9000 http localhost 80 a
  • 无法从外部访问在 docker swarm 上运行的容器

    我正在 docker swarm 上运行我的容器 资产前端service 是我的前端应用程序 它在容器内运行 Nginx 并公开端口 80 现在如果我这样做 curl http 10 255 8 21 80 http 10 255 8 21
  • 默认:Rails 资源路由的排除选项

    一个小问题 我正在将 Rails 用于 REST API 但由于它是 RESTful API 所以我并不真正需要 new or edit我的任何资源的路由 因为人们只会完全通过自动 JSON 请求而不是图形方式与此 API 交互 例如 不需
  • 如何使用国家宝石

    我正在尝试使用国家宝石 https github com hexorx countries 但是在我捆绑安装这个 gem 后 有一些关于如何合并它的基本问题 我是否需要创建新的控制器 模型才能访问这些国家 地区 如何创建一个简单的选择下拉列
  • node.js 本身还是 nginx 前端来提供静态文件?

    是否有更快的基准或比较 将 nginx 放在节点前面并让它直接提供静态文件或仅使用节点并使用它提供静态文件 nginx 解决方案似乎对我来说更易于管理 有什么想法吗 我不得不不同意这里的答案 虽然 Node 可以做得很好 但如果配置正确 n
  • JasperServer代理CSRF错误

    我在 Ubuntu 14 04 LTS 上使用捆绑的 Tomcat 和 Nginx 代理重新安装了 JasperReports Server 6 2 以便我可以访问https mydomain xyz jasperserver https
  • API 端点的 Django 子域配置

    我已经建立了一个 Django 项目 它使用django rest framework提供一些 ReST 功能 网站和其他功能都运行良好 然而有一个小问题 我需要我的 API 端点指向一个不同的子域 例如 当用户访问该网站时 他 她可以根据

随机推荐

  • C++ 中的扩展方法

    我正在寻找 C 中扩展方法的实现 并发现了这个 comp std c 讨论其中提到polymorphic map可以用于将方法与类相关联 但是 提供的链接似乎已失效 有谁知道这个答案指的是什么 或者是否有另一种方法以与扩展方法类似的方式扩展
  • 乔恩·斯基特 (Jon Skeet) 的 Singleton 澄清

    public sealed class Singleton Singleton public static Singleton Instance get return Nested instance class Nested Explici
  • 等效的隐式运算符:为什么它们是合法的?

    Update 请参阅下面我对 C 规范的一部分的剖析 我想我一定错过了一些东西 因为me看起来我在这个问题中描述的行为实际上违反了规范 更新2 好吧 经过进一步思考 并根据一些评论 我想我现在明白发生了什么 规范中的 源类型 一词指的是正在
  • 迭代器上的 Scala 映射不会产生副作用

    为什么会这样 scala gt List 1 2 3 4 iterator map x Int gt println x 不打印出来 1 2 3 4 while List 1 2 3 4 map x Int gt println x Lis
  • 如何将系统麦克风音频流传输到连接设备麦克风音频流

    I am trying to attach USB device used for tele calling which have pnp sound controller for mic and speaker Now i have tw
  • Spring Boot with Security OAuth2 - 如何通过 Web 登录表单使用资源服务器?

    I have 春季启动 1 2 1 RELEASE 服务的应用程序OAuth2 2 0 6 RELEASE 授权和资源服务器位于一个应用程序实例中 它使用自定义UserDetailsService实现利用MongoTemplate在 Mon
  • Pandas:列的指数平滑函数

    我有以下包含交易数据的 DataFrame df pd DataFrame Trader Carl Mark Carl Joe Mark Carl Max Max split Quantity 5 2 5 10 1 5 2 1 Date D
  • Javascript 和反斜杠替换

    这是我的字符串 var str This is my string 这是我的代码 var replaced str replace 我无法让我的输出为 This is my string 我已经尝试了我能想到的正则表达式和替换值的所有组合
  • 在meteor.js 中处理发布数据的简单方法?

    我需要在我的meteor js 应用程序中处理一些POST 数据 有没有一种简单的方法可以做到这一点 非常基本 如果它是一个 PHP 应用程序 我只需要 POST 变量 流星路由器 https github com tmeasday met
  • 如何确定 Apache 运行时的用户和组?

    在 DreamHost 共享主机上 我正在设置 htpasswd 但 Apache 无权读取该文件 我如何授予它权限 我想更改所有者或组 htpasswd文件而不是授予它不安全的权限 我认为我无权访问httpd conf文件 所以我不能使用
  • 将 ResourceProcessor 迁移到 HATEOAS 1.0.0 M1

    在我当前的 Spring HATEOAS 0 25 1 RELEASE 项目中 我大量使用资源处理器接口 Bean public ResourceProcessor
  • 使用 chunksize 迭代获取推断的数据帧类型

    如何使用 pd read csv 迭代地对文件进行分块并 保留数据类型和其他元信息 就像我阅读了整个内容一样 一次数据集 我需要读取太大而无法装入内存的数据集 我想使用 pd read csv 导入文件 然后立即将块附加到 HDFStore
  • JavaFX:设置文本控件的背景颜色

    我正在使用 TextFlow 和一些文本项来显示样式文本 但我找不到一种方法来设置简单的背景颜色Text items 我可以设置填充颜色和字体 但它没有设置其背景颜色的 java 方法或 css 属性 基于此solution 这是一种为所有
  • 如何在flutter中显示交付更新的进度条

    i wanna add a progress bar in my app but i dont know how to do this thing i just a beginer for flutter and wanna learn h
  • Nodejs中的AES 256 GCM加密解密

    我正在nodejs中实现一组基本的加密 解密函数 并且在解密部分不断收到以下错误 Error Unsupported state or unable to authenticate data 到目前为止 这是我的代码 import cryp
  • 让 CMake 在 Windows 上找到 flex

    我正在尝试在项目中使用 flex 并且我正在尝试使用 CMake 将 flex 与我的项目链接起来 我在网上找到了我正在使用的 FindFLEX cmake 你可以找到它here 默认情况下 这应该在 CMake 中 但我认为不是 我的目录
  • 导入字符串值中包含逗号的 CSV

    我正在尝试将一个简单的 CSV 导入 Postgres 8 4 数据库 这是一个表 CREATE TABLE public sample a VARCHAR b VARCHAR WITHOUT OIDS 以下是 CSV 文件示例 foo b
  • 支持 JSON 数组的 Hive JSON SerDe

    我尝试过 Amazon 为 EMR 实例提供的 JSON SerDe 如果您需要将 JSON 字典字段寻址 映射到列 它会非常有效 但是我无法弄清楚如何对 JSON 数组执行相同的操作 例如 如果有一个 JSON 数组如下 23123 32
  • Symfony2 和 Doctrine:如何获取同一个 id 的两个不同对象?

    我有这样的场景 对象 A 对其他对象 B C D 有一些引用 对象 B 对其他对象 A F G 有一些引用 对象 C 对其他对象 A 有一些引用 等等 在我的代码中 出于临时原因 我需要制作一个对象 比如A 的 副本 不 我不能使用不同的结
  • SSE / EventSource 在第一个数据块后关闭(Rails 4 + Puma + Nginx)

    我跟着401 ActionController LiveRailscast 和这个博客文章 about Server Sent Events在我的 Rails 应用程序中设置类似的东西 当我仅使用时打开与服务器的连接时 它工作得很好puma