我正在尝试使用nginx代理传递node.js-socket.io应用程序。
客户端是一个带有一些javascript的html文件;
<html>
<head>
<script src="socket.io.js"></script>
<script>
var socket = io('http://localhost:80');
socket.on('welcome', function(data){
console.log('Server says:' + data);
socket.emit('client-response', 'thank you!');
});
</script>
</head>
<body>
Socket.io
</body>
</html>
应该代理的服务器块在nginx.conf文件中传递是这样的;
server {
listen 80;
listen [::]:80;
#root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass "http://localhost:2156";
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
我已将node.js应用程序启动并在端口“2156”中运行。
当我测试这个时,客户端尝试到达端口80上的socket.io并因404错误而失败(因为nginx应该将代理传递给端口2156,但它没有)。
我在这里缺少什么?
答案 0 :(得分:2)
编辑:我已将客户端更改为"http://localhost/socket.io/"
处的连接并重写了nginx.conf,如下所示:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /usr/share/nginx/html;
location /socket.io/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_pass http://localhost:2156/socket.io/;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
它有效。