繁体   English   中英

NGINX与Express.js&socket.io | 不能获取

[英]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中添加尾部斜杠(在locationproxy_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM