![](/img/trans.png)
[英]Why I cannot use express.js get method with Socket.io http server
[英]NGINX with Express.js & socket.io | Cannot GET
我在运行于端口3002的Ubuntu服务器上安装了node/express.js/socket.io
应用程序。我已经打开了计算机上的所有端口。
当我转到11.111.111.1:3002/
一切都正常运行(socket.io和express.js都可以)。 我正在尝试将应用程序代理传递到/mediaDev/
,这似乎起作用,因为我从express.js或node收到了一条错误消息,内容为:
“无法获取/ mediaDev”
在找不到节点应用程序的情况下,返回502 Bad Gateway。
但是直接通过我的IP地址和端口转到该应用程序,该应用程序可以按预期正常运行。
简化的NGINX:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location ~ ^/mediaDev {
proxy_pass http://localhost:3002;
}
}
与投放内容相关的node.js:
var app = express()
app.user(bodyParser.urlencoded({ extended:false}))
app.use(bodyParser.json())
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'ejs')
app.get('/', function (req, res) {
res.render('index')
})
var server = app.listen(PORT, function () {
console.log("listening on port 3002")
})
var io = require('socket.io')(server, {
path: '/mediaDev/socket.io'
})
注意:在IP地址上,express.js和socket.io都可以使用。 在实际域上,Express返回了错误,但我的socket.io路径/mediaDev/socket.io
仍然有效。
我以为上面有点奇怪。 如果我通过/mediaDev
代理并创建我的socket.io路径/mediaDev/socket.io
,我不应该期望出现错误,而实际上是/mediaDev/mediaDev/socket.io
吗?
对于NGINX,是否要在URI中添加尾部斜杠(在location
和proxy_pass
)都很重要。 如果设置正确,则可以从请求路径中删除前缀。
尝试这个:
location /mediaDev/ {
proxy_pass http://localhost:3002/;
}
这样,对NGINX的/mediaDev/
请求将被“翻译”为Express的“ /”请求。 而且它作为一个前缀,所以/mediaDev/socket.io
在NGINX方将要求/socket.io
在快递方面。
发现执行以下操作可以使我获得期望的行为,但是如果有人想提供更好的答案,我认为此解决方案并不理想。
app.get('/mediaDev', function (req, res) {
res.render('index')
})
这种方法似乎要求我将要在Nginx中使用的位置硬编码到我的node.js应用程序中。 理想情况下,我希望有一个更加模块化的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.