Javascript NGINX with Express.js&;socket.io无法获取
我在运行端口3002的Ubuntu服务器上安装了一个Javascript NGINX with Express.js&;socket.io无法获取,javascript,node.js,express,nginx,socket.io,Javascript,Node.js,Express,Nginx,Socket.io,我在运行端口3002的Ubuntu服务器上安装了一个节点/express.js/socket.io应用程序。我已经打开了机器上的所有端口 当我转到11.111.111.1:3002/时,一切都很好地工作(socket.io和express.js)。我正试图通过代理将应用程序传递到/mediaDev/,这似乎很有效,因为我从express.js或node收到一条错误消息,上面说: “无法获取/mediaDev” 其中,as或未找到节点应用程序返回502坏网关 但直接进入我的IP地址加端口的应用程序
节点/express.js/socket.io
应用程序。我已经打开了机器上的所有端口
当我转到11.111.111.1:3002/
时,一切都很好地工作(socket.io和express.js)。我正试图通过代理将应用程序传递到/mediaDev/
,这似乎很有效,因为我从express.js或node收到一条错误消息,上面说:
“无法获取/mediaDev”
其中,as或未找到节点应用程序返回502坏网关
但直接进入我的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
?发现执行以下操作会给我所需的行为,但如果有人想给出更好的答案,我觉得这个解决方案不合适理想
app.get('/mediaDev', function (req, res) {
res.render('index')
})
这种方法似乎要求我将要在nginx中使用的位置硬编码到node.js应用程序中。理想情况下,我希望有一个更模块化的解决方案。发现执行以下操作可以让我获得所需的行为,但如果有人想给出更好的答案,我觉得这个解决方案并不理想
app.get('/mediaDev', function (req, res) {
res.render('index')
})
这种方法似乎要求我将要在nginx中使用的位置硬编码到node.js应用程序中。理想情况下,我希望有一个更模块化的解决方案。对于NGINX,在URI中添加一个尾随斜杠很重要(在
位置和代理过程中)。如果设置正确,可以让它从请求路径中删除前缀
试试这个:
location /mediaDev/ {
proxy_pass http://localhost:3002/;
}
这样,对NGINX的/mediaDev/
请求将“转换”为对“/”的Express请求。它作为前缀,因此NGINX端的/mediaDev/socket.io
将请求Express端的/socket.io
。对于NGINX,如果在URI中添加一个尾部斜杠(在位置和代理传递中都是如此)。如果设置正确,可以让它从请求路径中删除前缀
试试这个:
location /mediaDev/ {
proxy_pass http://localhost:3002/;
}
这样,对NGINX的/mediaDev/
请求将“转换”为对“/”的Express请求。作为前缀,因此,NGINX端的/mediaDev/socket.io
将请求Express端的/socket.io
。您是在尝试代理将整个连接传递到端口3002还是仅代理socket.io?整个连接您是在尝试代理将整个连接传递到端口3002还是仅代理socket.io?当我使用“;”时,整个连接使用尾随斜杠,我得到一个nginx错误。“proxy_pass”不能在正则表达式给定的位置中包含URI部分,或者在命名的locatoin中包含URI部分,或者……”@PhilipKirkbride,并且您也更改了位置
?如果在我使用“;”时继续使用~^/mediaDev
,我会得到一个nginx错误。“proxy_pass”“不能在正则表达式给定的位置中,或在名为locatoin的位置中,或……”PhilipKirkbride,您也更改了位置
?如果继续使用~^/mediaDev