Ruby on rails 尝试使用代理在Apache上运行Faye websocket

Ruby on rails 尝试使用代理在Apache上运行Faye websocket,ruby-on-rails,apache,proxy,websocket,faye,Ruby On Rails,Apache,Proxy,Websocket,Faye,我试图在生产环境中使用FayeGem和Rails在瘦服务器上运行,但我无法让它正常工作。我使用的是Apache2.4和ws_tunnel,同时还启用了代理模块。我的设置如下所示 Apache配置 <VirtualHost *:443> ServerName mysite.example.com ServerAlias mysite.example.com DocumentRoot /var/www/html/mysite/current/public

我试图在生产环境中使用FayeGem和Rails在瘦服务器上运行,但我无法让它正常工作。我使用的是Apache2.4和ws_tunnel,同时还启用了代理模块。我的设置如下所示

Apache配置

<VirtualHost *:443>
    ServerName mysite.example.com
    ServerAlias mysite.example.com
    DocumentRoot /var/www/html/mysite/current/public

    SSLEngine on
    SSLCertificateFile "/etc/httpd/conf/keys/ServerCertificate.cer"
    SSLCertificateKeyFile "/etc/httpd/conf/keys/example.com.key"
    SSLCertificateChainFile "/etc/httpd/conf/keys/CACertificate-1.cer"

    RewriteEngine On
    SSLProxyEngine On
    ProxyRequests off
    ProxyPreserveHost on

    ProxyPass /faye !
    ProxyPassReverse /faye !

    ProxyPass / balancer://thinservers/
    ProxyPassReverse / balancer://thinservers/
    <Proxy *>
        Require all granted
    </Proxy>

    <Location /faye>
         ProxyPass ws://localhost:9292
         ProxyPassReverse ws://localhost:9292
    </Location>

    RequestHeader set X_FORWARDED_PROTO 'https'
    # Custom log file locations
    ErrorLog  /etc/httpd/logs/error-unilever.log
    CustomLog /etc/httpd/logs/access-unilever.log combined
 </VirtualHost>
我用下面的命令启动faye

rackup faye.ru -E production -s thin 
通过这种方式,我可以通过在浏览器中键入以下url来访问faye.js

https://mysite.example.com/faye/faye.js
但当我输入例如,我得到以下结果

Sure you're not looking for /faye ?<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator at 
root@localhost to inform them of the time this error occurred,
and the actions you performed just before this error.</p>
<p>More information about this error may be available
in the server error log.</p>
</body></html>
我得到一个错误,比如

POST https://mysite.example.com/faye/faye 400 (Bad Request)
我还尝试在代理设置中使用wss协议,并从SSL开始将证书路径提供给精简,但没有任何效果

我假设这可能是由于代理或ws_tunnel模块造成的,因为当我从服务器中的shell运行以下命令时

curl http://localhost:9292
我只收到“确定你不是在找费伊?”的信息

有人遇到过这样的事吗

如果有人能帮助我,我将不胜感激


提前感谢。

对于那些有同样问题的人,我的建议是,无论您使用的是哪个版本的Apache,都要毫不犹豫地将其更改为nginx。配置和运行它非常容易

我正在为我的名为example的应用程序使用以下配置。正确设置nginx后,其他一切都运行得很好

希望这对别人有帮助

# app: example
# locally running on port 7000
upstream example {
    server 127.0.0.1:7000;
    server 127.0.0.1:7001;
}

# Faye is set to run on port 9292
upstream example_socket{
    server 127.0.0.1:9292;
}

server {
    # listen 80 if it's a non SSL site
    listen 443;
    server_name www.example.com;
    location /faye {
        proxy_pass http://example_socket;
        # Including common configurations
        include /etc/nginx/conf.d/proxy.conf;
        include /etc/nginx/conf.d/proxy_socket.conf;
   }

    location / {
        root /var/www/vhost/example/current/public;
        proxy_pass http://example;
        # Including common configurations
        # can be found on Internet easily
        include /etc/nginx/conf.d/proxy.conf;
    }
}
curl http://localhost:9292
# app: example
# locally running on port 7000
upstream example {
    server 127.0.0.1:7000;
    server 127.0.0.1:7001;
}

# Faye is set to run on port 9292
upstream example_socket{
    server 127.0.0.1:9292;
}

server {
    # listen 80 if it's a non SSL site
    listen 443;
    server_name www.example.com;
    location /faye {
        proxy_pass http://example_socket;
        # Including common configurations
        include /etc/nginx/conf.d/proxy.conf;
        include /etc/nginx/conf.d/proxy_socket.conf;
   }

    location / {
        root /var/www/vhost/example/current/public;
        proxy_pass http://example;
        # Including common configurations
        # can be found on Internet easily
        include /etc/nginx/conf.d/proxy.conf;
    }
}