2015-02-17 5 views
0

Я пытаюсь использовать Faye gem на тонком сервере с Rails в рабочей среде, но я не могу заставить его работать. Я использую apache 2.4, а ws_tunnel также включены прокси-модули. Моя настройка похожа на ниже.Попытка запустить веб-сайт Faye на Apache с использованием прокси

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.ru файл

require 'faye' 

Faye::WebSocket.load_adapter('thin') 

app = Faye::RackAdapter.new(:mount => '/faye', :timeout => 25) 

run app 

И я начинаю Фея с помощью следующей команды

rackup faye.ru -E production -s thin 

Таким образом, я могу достичь faye.js набрав в браузере следующий URL-адрес.

https://mysite.example.com/faye/faye.js 

Но когда я печатаю https://mysite.example.com/faye/, например, я получаю следующий результат

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 
[email protected] 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> 

что странно, потому что я получаю только «Конечно, вы не ищете/Faye?» в развитии.

Я звоню Фей в application.js, как

client = new Faye.Client("https://mysite.example.com/faye/faye") 

И я получаю сообщение об ошибке, как

POST https://mysite.example.com/faye/faye 400 (Bad Request) 

Я также попытался использовать протокол WSS в настройках прокси-сервера, а также предоставление мои пути к сертификатам для тонких, чтобы начать с SSL, но ничего не получилось.

Я предполагаю, что это может происходить из-за прокси-сервера или модуля ws_tunnel, потому что, когда я запускаю следующую команду из оболочки на сервере

curl http://localhost:9292 

я получаю только «Конечно, вы не ищете/фей? сообщение.

Кто-нибудь пришел на что-то подобное?

Буду признателен, если кто-то может мне помочь.

Заранее благодарен.

ответ

0

Для тех, кто имеет такую ​​же проблему, мой совет - независимо от того, какую версию 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; 
    } 
}