2017-10-10 30 views
0

我想將Apache子目錄重定向到Node.js應用程序。我已經添加了以下在我的Apache虛擬主機.conf文件爲我的正常域:將Apache子目錄重定向到Node.js時訪問socket.io

<VirtualHost *:80> 

    # Already existing Apache lines here removed to keep this post short 

    # The following are all the new lines I have added 

    ProxyRequests Off 
    ProxyPreserveHost On 
    ProxyVia Full 
    <Proxy *> 
     Require all granted 
    </Proxy> 

    <Location /mysubdir> 
     ProxyPass http://127.0.0.1:3000 
     ProxyPassReverse http://127.0.0.1:3000 
    </Location> 
</VirtualHost> 

但是,試圖通過http://example.com/subdirname連接到我的網站現在當我得到一個404錯誤socket.io

在我app.js我有以下幾點:

var express = require('express'), 
    app = express(), 
    server = require('http').createServer(app), 
    io = require('socket.io').listen(server); 

基於另一個計算器後我改變了我的app.js這樣:

var express = require('express'), 
    app = express(), 
    server = require('http').createServer(app), 
    io = require('socket.io')(server, {path: '/mysubdir/socket.io'}).listen(server); 

但它仍然給了我一個404錯誤。我究竟做錯了什麼?

更新:我在下面發佈了一個答案,似乎在爲我工作。我現在只測試了幾分鐘,所以如果您發現任何會導致我出現問題的事情,請隨時查看。

回答

0

我發現我不需要對我的app.js進行任何更改,只對我的html代碼進行更改。所以要解決,我恢復了我app.js到:

var express = require('express'), 
    app = express(), 
    server = require('http').createServer(app), 
    io = require('socket.io').listen(server); 

而且在我的HTML代碼修改下面幾行:

我改變:

<script type="text/javascript" src="/socket.io/socket.io.js"></script> 

要:

<script type="text/javascript" src="/mysubdir/socket.io/socket.io.js"></script> 

我也變了:

var socket = io.connect(); 

要:

var socket = io.connect('http://example.com:3000'); 

現在一切都似乎是工作的方式應該。然而,有趣的是,我需要改變的只是客戶端。我發現的大多數其他示例都需要更改服務器端應用程序或將重定向添加到Apache主機文件。這些都不適合我。也許有一些我錯過了?