【问题标题】:Reloading Passenger gracefully when running Nginx + Passenger + RoR application?运行 Nginx + Passenger + RoR 应用程序时优雅地重新加载乘客?
【发布时间】:2020-01-07 15:23:05
【问题描述】:

当使用 Nginx +Passenger 组合运行 Ruby on Rails 应用程序时,当我尝试重新加载 Nginx 以更新其配置时出现以下错误。

“nginx -s reload”和“kill -HUP NGINX_PID”都会导致同样的错误。

2019/09/04 15:00:32 [error] 5247#0: *53603 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 8.8.8.8, server: example.com, request: "GET /example/ HTTP/1.1", upstream: "passenger:unix:/var/run/passenger-instreg/passenger.hDDqk0o/agents.s/core:", host: "example.com", referrer: "https://example.com/example2"

这似乎发生在乘客重新启动时。尽管它记录了以下消息:

age/Cor/CoreMain.cpp:1216 ]: Received command to shutdown gracefully. Waiting until all clients have disconnected...

看起来它没有在等待,当前请求被丢弃,导致 502 错误。

当我仅使用 tmp/restart.txt 重新启动应用程序时,不会发生此问题。只有当我需要重新加载 Nginx 配置时才会发生这种情况。

有没有办法在不丢弃当前乘客请求的情况下重新加载 Nginx 配置?

我正在使用 Nginx 1.14.0 运行乘客 5.3.7。

【问题讨论】:

    标签: nginx passenger


    【解决方案1】:

    我找到的唯一解决方案是独立运行Passenger并使用Nginx作为代理。

    它需要一些配置更改,但现在我可以重新加载 Nginx 而不会丢失任何请求或收到 502 错误。

    我所做的是:

    1. 从 Nginx 配置文件中删除了所有与乘客相关的配置指令
    2. 独立启动乘客:passenger start --port 4000 -a 127.0.0.1 --user myapp /home/myapp/path #(您可能在此处为您的应用添加了一些自定义指令)
    3. 将 Nginx 配置为代理请求

    示例 Nginx 配置:

    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
    
    server {
        listen 80;
        server_name _;
    
        location / {
            proxy_pass http://127.0.0.1:4000;
            proxy_http_version 1.1;
            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;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_buffering off;
        }
    }
    

    如果您希望Passenger Standalone 也响应 SSL 请求,并且您可能希望为其设置某种类型或监控/自动启动,您将不得不使用 --ssl 和 --ssl-port,但我想这超出了范围这个问题。

    【讨论】:

      猜你喜欢
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2011-04-26
      • 1970-01-01
      相关资源
      最近更新 更多