2016-10-22 52 views
0

我有一個運行在我的服務器上的FeathersJS構建的節點應用程序,我希望它在apache後面,我試圖在apache中使用mod_proxy模塊來完成此操作,但我遇到了問題。如何通過Apache配置ProxyPass websocket請求節點應用程序?

這是我的Apache mod_proxy的部分是什麼樣子:

<IfModule mod_proxy.c> 
    ProxyRequests off 

    ProxyPass /ws/api/phone/ ws://localhost:3030 
    ProxyPassReverse /ws/api/phone/ ws://localhost:3030 

    ProxyPass /api/phone/ http://localhost:3030/ 
    ProxyPassReverse /api/phone/ http://localhost:3030/ 
</IfModule> 

我已經把我的客戶端套接字配置如下:

var socket = io('/', { path: '/ws/api/phone/socket.io/', transports: ['websocket']}); 

當我嘗試打開使用的應用程序,我得到以下錯誤:

WebSocket connection to 'ws://local.mysite.com/ws/api/phone/socket.io/?EIO=3&transport=websocket' failed: Error during WebSocket handshake: Unexpected response code: 500 

我啓用了Apache日誌記錄,這就是錯誤的樣子:

127.0.0.1 - - [22/Oct/2016:14:48:32 -0400] "GET /ws/api/phone/socket.io/?EIO=3&transport=websocket HTTP/1.1" 500 540 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36" 

如果我運行通過本地主機的一切,它的作品完美,沒有任何問題,所以這顯然是與ProxyPass僞問題。任何幫助將不勝感激,或者如果有另一種方式,我可以完成將節點應用程序放在apache後面而不使用ProxyPass,我很樂意聽到任何其他解決方案。

在此先感謝。

回答

0

這對我有什麼工作於2.4.10: 它是因爲我已經配置了此一段時間,但我知道我不能使它工作使用純的ProxyPass

ServerName api.example.com 

RewriteEngine On 
RewriteCond %{HTTP:Connection} Upgrade [NC] 
RewriteRule ^/(.*) ws://localhost:3030/$1 [P,L] 

ProxyPass/http://localhost:3030/ 
ProxyPassReverse/http://localhost:3030/ 
+0

你還記得任何事情得到錯誤:'WebSocket連接到URL失敗:WebSocket握手期間出錯:無效的狀態行'? –

+0

這已經是一年,時間很短。我不確定實際的錯誤是什麼。它「只是不會連接」。你有沒有嘗試過以上? – j2L4e

相關問題