編輯:我繼續四處搜尋,並且進一步了一點。現在,打電話給我的端點時,我得到以下錯誤:如何設置端點以處理nginx後面的快速表單網址
GET /?EIO=3&transport=polling&t=LhnJ9p5 404
所以,現在它在正確的地方結束了,但它執行輪詢請求,而不是WS連接。儘管如此,直接調用後端仍然可以正常工作,但是通過Nginx來解決我的請求。
客戶
import io from 'socket.io-client';
...
//Does work
io.connect('localhost:10007');
// Does not work
io.connect('http://localhost', {path:'/my/path'});
socket.on('connect', function(){console.log('Connected!');});
socket.on('event', function(data){console.log('Data: ', data);});
socket.on('disconnect', function(){console.log('Disconnected!');});
服務器
// Lots of initiation, middleware, routing etc.
let app = express.init('src/');
let server = http.createServer(app);
var io = require("socket.io")(server);
server.listen(10007,'127.0.0.1');
io.on('connection', function(socket){
console.log("User Connected");
});
nginx.conf
location /my/path/ {
proxy_pass http://127.0.0.1:10007/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
翻翻互聯網nd所以我偶然發現了類似的問題,並且似乎都指向了nginx.conf中的配置。雖然它似乎適用於其他人,但我錯過了其他的東西。
我有一個後端設置在Nginx代理後面。後端基於express並且像API一樣處理對GET/POST/DELETE等的不同調用.Nginx設置代理以將調用轉發到後端服務器,並且一切都很好。
現在我需要實現一個websocket連接到後端,我似乎沒有把它做對。電話永遠不會通過後端,我不知道爲什麼。這裏是我的服務器代碼:
function setRoutes(app) {
...
/**
* Set up socket.io to the endpoint
*/
let server = require('http').Server(app);
let io = require('socket.io')(server);
io.on('connection', (socket) => {
console.log('Client is connected: ', socket);
});
// If I uncomment this, I am able to connect to localhost:80 on the client
//server.listen(80);
}
如上評論指出,如果我忽略服務器後端設置,並繞過它直接聽取他們對本地主機端口80,WebSocket的連接工作。但所有其他端點都從Nginx的代理地址中刪除。我希望websocket連接到服務器其餘部分使用的相同端點地址。
讀了這條一點,我注意到這個here散步低谷,但這似乎設整端點WebSocket的,而我想確定我的路由我的快件的代碼,而不是在我的Nginx的設置。例如,如果我想將幾個不同的websocket端點設置爲同一個代理,我將不得不在兩個不同的地方管理路由。如果可能,我想遠離這一點。
對不起,遲到的迴應,但我在這段時間沒有分配任務,所以我剛回來處理這個問題。你的解釋確實解決了我的問題,但我不能把我的手指放在與我的測試不同的地方並嘗試。但是現在我的問題是,當在我們的測試平臺上嘗試相同的設置時,這種情況會以相同的反應失敗......但是,由於這個問題已經增加並超出了可讀性,我將用新信息回答一個新問題。 –