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

socket.io nginx 代理问题

佟翰林
2023-03-14

我有一个socket.iowebservice运行端口8080在我的正式服,它响应超文本传输协议请求,但我认为它有困难解决代理时,我的客户端是发送通过web套接字协议(ws://)

我的客户告诉我服务器以400(错误请求)错误响应,所以要么是我客户端出了问题,要么是我正式服出了问题。我指望这是我的正式服,但我自己或我的同事都不知道具体在哪里。

这些是我们为节点生产盒提供的nginx配置.js。

我已将真实网址替换为 someapp.com

NGINX公司

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name app.someapp.com;

        location / {
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        Host            $http_host;
                proxy_pass              http://127.0.0.1:3000;
        }
}

server {
        listen 8080;
        server_name app.someapp.com;
        location / {
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        Host            $http_host;
                proxy_pass              http://127.0.0.1:4000;
        }
}

server {
        listen 80;
        server_name tools.someapp.com;
        root /var/www/bbclient/dist;
        location / {
                try_files $uri $uri/ /index.html;
        }
}

它是一个非常小而简单的socket.io node.js服务器,运行在生产中的端口8080上

插座。超正析象管(Image Orthicon)

const app = require('express')()
const http = require('http').Server(app)
const io = require('socket.io')(http)
const bodyParser = require('body-parser')

app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())

// this is not responding from the client
// this is working on localhost, but not in production
io.on('connection', (socket) => {
  socket.on('USER_ID', (userId) => {
    if (socket.userId) {
      socket.leave(socket.userId)
    }
    socket.userId = userId
    socket.join(userId)
  })
})

// this works over http, and responds in production
// by visiting http://app.someapp.com:8080 in the browser
app.get('/', (req, res) => {
  res.send('some app') 
})

http.listen(process.env.PORT || '8888', () => {
  console.log('listening')
})

以下是网络选项卡关于来自我的客户端的请求导致400错误的说明。

chrome浏览器网络选项卡

编辑1

NGINX错误日志:

2018/02/06 17:30:39 [error] 5954#5954: *86956 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 76.218.92.156, server: app.someapp.com, request: "GET /socket.io/?EIO=3&transport=polling&t=M5iAdrw&sid=Jays0pqU3StUhdjjAACb HTTP/1.1", upstream: "http://127.0.0.1:4000/socket.io/?EIO=3&transport=polling&t=M5iAdrw&sid=Jays0pqU3StUhdjjAACb", host: "someapp.com:8080", referrer: "http://tools.someapp.com/scorecards/estimating"

共有1个答案

蓬琦
2023-03-14

首先添加socket.io代理指令:

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

下面是一个示例。然后尝试增加代理连接超时:

    proxy_connect_timeout 75s;
    proxy_read_timeout 75s;
    proxy_send_timeout 75s;
 类似资料:
  • 代理过程可以分为两个组件,如下所示: 确定用户的领域和主服务器 将请求转发给用户的主服务器 在对代理问题进行故障排除时,请问问自己问题发生在这两个组件中的哪一个。 可以使用来自代理服务器的radtest或radclient程序来模拟将请求转发到主服务器。 实践中的许多问题与网络问题有关。 这些问题有时难以发现。 例如,当您在非高峰时段测试速度时,延迟可以很好,但是,在高峰时段,网络将变得如此拥挤,

  • 上面的错误有什么原因吗?

  • 问题内容: 我的Jenkins安装(1.442,不能选择升级,因为它是公司管理的中央安装),需要(通过https)访问代理后面的SVN存储库。我相应地配置了文件,还设置了和环境变量。 SVN连接从根本上起作用: 我可以结帐项目 我打电话给SVN储存库查询变更 但是,每当由于仓库中的更改而触发构建时(或者如果我在Jenkins工作区中还没有SVN更新时手动触发构建),就会发生以下错误。当詹金斯(Je

  • Wiremock代理存根在带有主机的端口1234上运行http://example.com,但httpURLConnection。getResponseCode()给出连接被拒绝错误。

  • 我在设置apache反向代理服务器时遇到问题,希望您能提供帮助。 我安装了带有apache的ubuntu服务器,并启用了以下模块: 然后我用以下内容在代理上设置000-default.conf: 路由器上的端口80和443被转发到代理服务器。在服务(1-3)服务器上,使用来自Lets Encrypt的证书启用SSL。 谢谢你的帮助!

  • 问题内容: 我将会话参数存储在Struts2会话映射中,该会话映射是使用SessionAware接口在操作中获得的。我的应用程序位于/ MyApp路径中。 在具有反向代理重定向的Apache服务器上设置struts2应用程序之后,该重定向使URL http://www.appdomain.com/ 指向本地 主机 上的本地tomcat :8080 / MyApp ,Struts2会话处理不再起作用