【问题标题】:NGINX with Express.js & socket.io | Cannot GETNGINX 与 Express.js 和 socket.io |不能获取
【发布时间】:2017-04-29 18:17:53
【问题描述】:

我在 Ubuntu 服务器上设置了一个node/express.js/socket.io 应用程序,该应用程序在端口 3002 上运行。我已经打开了机器上的所有端口。

当我转到 11.111.111.1:3002/ 时,一切都运行良好(socket.io 和 express.js)。我正在尝试将应用程序代理传递给/mediaDev/,这似乎有效,因为我从 express.js 或节点收到一条错误消息,上面写着:

“无法获取 /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 都在工作。在实际的域快递上返回错误,但我的 socket.io 路径 /mediaDev/socket.io 仍然有效。

我觉得上面的内容有点奇怪。如果我是通过/mediaDev 的代理并让我的socket.io 路径/mediaDev/socket.io 不应该出现错误并且实际上是/mediaDev/mediaDev/socket.io

【问题讨论】:

  • 您是要代理_传递整个连接到端口 3002 还是只是代理 socket.io?
  • 整个连接

标签: javascript node.js express nginx socket.io


【解决方案1】:

发现执行以下操作给了我想要的行为,但如果有人想给出更好的答案,我觉得这个解决方案并不理想。

app.get('/mediaDev', function (req, res) {
  res.render('index')
})

这种方法似乎需要我将我想在 nginx 中使用的位置硬编码到我的 node.js 应用程序中。理想情况下,我希望有一个更加模块化的解决方案。

【讨论】:

    【解决方案2】:

    对于 NGINX,是否在 URI 中添加尾部斜杠很重要(在 locationproxy_pass 中)。如果你设置得当,你可以让它从请求路径中去掉前缀。

    试试这个:

    location /mediaDev/ {
      proxy_pass http://localhost:3002/;
    }
    

    这样,对 NGINX 的 /mediaDev/ 请求将被“翻译”为 Express 的“/”请求。它作为前缀,所以 NGINX 端的/mediaDev/socket.io 将请求 Express 端的/socket.io

    【讨论】:

    • 当我使用'localhost:3002;'使用尾部斜杠我得到一个 nginx 错误。 “proxy_pass”的 URI 部分不能位于正则表达式给出的位置,也不能位于命名的 locatoin 内,或者...”
    • @PhilipKirkbride 你也改了location?如果您继续使用~ ^/mediaDev,您将收到该错误
    猜你喜欢
    • 2019-07-05
    • 2021-04-08
    • 2015-10-06
    • 2019-08-21
    • 2016-09-09
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多