当前位置: 首页 > 知识库问答 >
问题:

Nodejs+socket.io+Nginx反向代理不工作

孟增
2023-03-14
server {
        listen 80;
        server_name iptv-staging.northpoint.org;
        location / {
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;

                proxy_pass http://localhost:3001;

                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }
}

据我所知,问题必须与Ngnix反向代理和websockets如何路由有关。服务器对ping请求的答复似乎没有发送到客户端。但我似乎无法确定原因。任何帮助都是非常感谢的。

共有1个答案

穆旭尧
2023-03-14
apiRoutes.get('/options', (req, res) => {

  Log.info('Received request for app options.');

  // This isn't applicable to you, just showing where options declared.
  let options = JSON.parse(JSON.stringify(config.get('healthcheck.options')));

  // Decide what port to use.  It might be a port for a dev instance or from Env
  if ((process.env.PORT !== options.port) && (process.env.PORT > 0)) {
    options.port = process.env.PORT;
  }

  // This is the important bit...
  var internalUri = req.originalUrl;
  var externalUri = req.get('X-Real-URI') || internalUri;
  options.basePath = externalUri.substr(0, externalUri.length - internalUri.length + 1);

  res.status(200).send(JSON.stringify(options));
});
export async function getOptions() {

  const res = await axios.get('/api/options');

  return res.data;

}
componentDidMount() {

    getOptions()
        .then((res) => {
            this.setState({ port: res.port });

        // Call a client-side function to build URL.  Incl later.
        const socketUrl = getSocketUrl(res.port);

        console.log(`Attempting to connect to sockets at ${socketUrl}.`);

        // This is where it all comes together...
        const socket = io(socketUrl, { path: `${res.basePath}socket.io` });
        socket.on('connect', function () { console.log(`Connected to ${socketUrl}`); });

        socket.on('message', (result) => {
          console.log(result);
        });

        socket.on('data', (result) => {
          console.log(`Receiving next batch of results.`);

          const filteredResults = JSON.parse(result));

          // Do something with the results here...

        });

    });

.....
function getSocketUrl(port) {

  console.log(`${window.location.hostname}`);

  if (window.location.hostname.toString().includes('local')) {
    return `localhost:${port}`;
  }

  return `${window.location.hostname}`;

}
 类似资料:
  • 我有一个带有Express和Socket.io(Ubuntu18.04)的Nodejs服务器应用程序。在nGinx(1.14)反向代理进入场景之前,它总是工作得很好。nginx服务器运行在Node.js应用程序的不同机器上,每个应用程序都在同一网络中的自己的虚拟机上。 2.1.1版本上的服务器和客户端。 我还尝试删除path选项,并为socket.io东西配置了一个特定的/位置(出于测试目的):

  • 我有一个与节点.js服务器通信的小角度应用程序。两者都部署在 aws 上,我使用 Nginx 反向代理在端口 4000 上访问节点.js服务器。 nodejs.server 的所有endpoint都工作正常,除了 socket.io 连接。当我在我的机器中运行两个应用程序(前端应用程序和节点.js服务器)时,socket.io 连接工作正常,但是当我尝试在 aws 上部署它时,我在前端应用程序中收

  • 我有一个Apache-Server在端口80上运行我的PHP应用程序。PHP应用程序通过端口3000与NodeJS-Server(socket.io)通信。

  • 主要内容:1. 代理服务器介绍,2. 将请求传递给代理的服务器,3. 传递请求标头,4. 配置缓冲区,5. 选择传出IP地址本文介绍代理服务器的基本配置。 您将学习如何通过不同协议将NGINX请求传递给代理的服务器,修改发送到代理服务器的客户端请求标头,以及配置来自代理服务器的响应缓冲。 代理服务器的基本配置目录 代理服务器介绍 将请求传递给代理的服务器 传递请求标头 配置缓冲区 选择传出IP地址 1. 代理服务器介绍 代理通常用于在多个服务器之间分配负载,无缝地显示来自不同网站的内容,或者通过

  • Nginx 是一个高性能的 HTTP 和反向代理服务器,代码完全用 C 实现,基于它的高性能以及诸多优点,我们可以把它设置为 hyperf 的前置服务器,实现负载均衡或 HTTPS 前置服务器等。 配置 Http 代理 # 至少需要一个 Hyperf 节点,多个配置多行 upstream hyperf { # Hyperf HTTP Server 的 IP 及 端口 server

  • 我试图使用Apache创建一个反向代理。我正在使用Apache为一个php应用程序提供服务,并在node中编写了一个使用Express的API。 在我的PHP应用程序中,我使用AJAX调用node来检索JSON。我希望使用端口80进行PHP应用程序中的调用,并使用Apache来表达一个反向代理。