配置 Apache 和 Passenger 以使用 websocket
Posted
技术标签:
【中文标题】配置 Apache 和 Passenger 以使用 websocket【英文标题】:Configure Apache and Passenger to use websocket 【发布时间】:2021-05-13 13:06:12 【问题描述】:我正在尝试将 apache 设置为在 Rails Web 套接字上与乘客一起使用 ruby。我知道Passenger + Apache不支持Action Cable,所以我尝试使用反向代理解决方案: https://www.phusionpassenger.com/library/deploy/standalone/reverse_proxy.html
主应用程序应继续使用Passenger Apache 模块,而websocket 应使用Passenger Standalone。
我启用了反向代理并更改了虚拟主机配置。
<VirtualHost *:80>
...
PassengerRuby /home/rails/.rvm/gems/ruby-2.5.1/wrappers/ruby
<Location "/cable">
ProxyPass "ws://127.0.0.1:4000/cable"
ProxyPassReverse http://127.0.0.1:4000/
ProxyPreserveHost on
</Location>
...
</VirtualHost>
当我从命令行启动乘客时
bundle exec passenger start --daemonize --address 127.0.0.1 --port 4000
它工作正常,但是当我在 Ubuntu 18.04.5 LTS 中使用 systemd 创建服务时
...
[Service]
Type=forking
WorkingDirectory=/mnt/xfeature/srv/www/f3.xxxx.xxx/current
Environment=RAILS_ENV=feature
User=rails
Group=www-data
UMask=0002
ExecStart=/home/rails/.rvm/bin/rvm-shell -c 'bundle exec passenger start --daemonize -e feature --address 127.0.0.1 --port 4000 --log-level 5'
ExecStop=/home/rails/.rvm/bin/rvm-shell -c 'bundle exec passenger stop --port 4000'
....
它通常会因为这个错误而失败。
[ E 2021-05-13 09:52:13.3607 21447/Tz age/Cor/App/Implementation.cpp:221 ]: Could not spawn process for application /mnt/xfeature/srv/www/f3.xxx.xxx/releases/20210513094622: An operating system error occurred while preparing to start a preloader process: Cannot change the directory '/tmp/passenger.spawn.XXXXgMx55z/envdump' its UID to 1001 and GID to 1001: Operation not permitted (errno=1)
Error ID: 847da63a
Error details saved to: /tmp/passenger-error-5S5Syq.html
并且无法建立 websocket 连接。我检查了 /tmp 权限,一切正常。
有什么建议吗?
【问题讨论】:
【参考方案1】:我们最近在 Apache 和 Passenger 上遇到了一些奇怪的问题。事实证明 Apache 自动更新并将 PrivateTmp 设置更改为 true,这导致了类似的错误消息。
我不确定这是否是导致您的错误的原因,但您可以检查以验证 PrivateTmp 是否设置为 false。
我们的配置是:
/etc/systemd/system/apache2.service.d/override.conf
override.conf 内容:
PrivateTmp=false
我不确定 override.conf 文件是如何加载的。我假设某处有一个配置正在寻找覆盖文件并且它正在使用它。
【讨论】:
以上是关于配置 Apache 和 Passenger 以使用 websocket的主要内容,如果未能解决你的问题,请参考以下文章
简单 Rails 4 ActionController::Live 示例不适用于 Apache + Passenger
实战Puppet 集中配置管理系统——Puppet dashboard与nginx+passenger安装配置
Rails 3.1.1 HTTP 流与 Apache + Passenger