Phi*_*ide 1 javascript nginx node.js express socket.io
我node/express.js/socket.io在端口 3002 上运行的 Ubuntu 服务器上安装了一个应用程序。我已经打开了机器上的所有端口。
当我去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;
}
}
Run Code Online (Sandbox Code Playgroud)
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'
})
Run Code Online (Sandbox Code Playgroud)
注意:在 IP 地址上,express.js 和 socket.io 都在工作。在实际的域快递上返回了错误,但我的 socket.io 路径/mediaDev/socket.io仍然有效。
我觉得上面说的有点奇怪。如果我是代理传递/mediaDev并制作我的 socket.io 路径,我/mediaDev/socket.io不应该期望错误并且实际上是在/mediaDev/mediaDev/socket.io?
对于 NGINX,是否向 URI(inlocation和 in proxy_pass)添加尾部斜杠很重要。如果设置正确,您可以让它从请求路径中去除前缀。
尝试这个:
location /mediaDev/ {
proxy_pass http://localhost:3002/;
}
Run Code Online (Sandbox Code Playgroud)
这样,对 NGINX for 的请求/mediaDev/将被“转换”为对 Express 的“/”请求。它作为前缀,所以/mediaDev/socket.io在 NGINX 端会/socket.io在 Express 端请求。
| 归档时间: |
|
| 查看次数: |
2045 次 |
| 最近记录: |