解决upstream prematurely closed connection while reading response header from upstream问题(nginx)

2023-05-16

问题描述:

使用docker部署了前端和nginx,前端有需求要使用websocket,所以在nginx中配置了websocket转发,配置如图:

server {
    listen       80;
    server_name  127.0.0.1;

    charset utf-8;
    
    # websocket转发
    location /websocket/ {
        proxy_pass http://websocket:3600;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade; 
        proxy_set_header Connection $connection_upgrade;
    }}
}

发现报错upstream prematurely closed connection while reading response header from upstream,然后去网上找答案,有的说是ngxin缓存目录权限问题,有的说是 keepalive_timeout 时间设置太短,试了以后,发现均不能解决问题。

问题原因:

经过仔细排查,发现目标服务并没有收到转发,websocket服务需要的是http://ip:port/Infer/?token='abc',结果真实路径是http://ip:port/websocket/Infer/?token=‘abc’,网上查了那么多答案,没有一个人提到转发不对也可能造成这个错误,可能还是我太菜了,做前端太难了...      既然原因知道了,那解决很简单,就是让路径满足要求就行,修改为如下配置后websocket连接成功。

server {
    listen       80;
    server_name  127.0.0.1;

    charset utf-8;
    
    # websocket转发
    location /websocket/ {
        proxy_pass http://websocket:3600/;  #重点就是端口后的这个斜杠
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade; 
        proxy_set_header Connection $connection_upgrade;
    }}
}

  知识延展:

上述问题,解决起来看似很简单,知识在proxy_pass路径后加 / ,那么这个斜杠到底该怎么用呢?规律如下:

原始请求:192.168.1.123:80/static/a.html
代理后ip: 192.168.2.321:81

# 情况1 location后没有/    转发网站没有/
实际转发后请求:192.168.2.321:81/static/a.html

# 情况2 location后有/     转发网站没有/
实际转发后请求:192.168.2.321:81/static/a.html


# 情况3 location后没有/    转发网站有/
实际转发后请求:192.168.2.321:81/a.html

192.168.1.123:80/static/a.html
# 情况4 location后有/      转发网站有/
实际转发后请求:192.168.2.321:81/a.html

#结论
proxy_pass后路径只要跟了斜杠,nginx转发时就会把location后对应的url部分去掉

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决upstream prematurely closed connection while reading response header from upstream问题(nginx) 的相关文章

  • Arduino 以太网扩展板未连接到 Web 服务器

    我在让 Arduino 以太网扩展板与服务器通信时遇到问题 串行监视器上的结果始终是 我的arduino代码是 include
  • BluetoothSocket 未连接到目标设备

    我正在尝试通过蓝牙将我的设备连接到另一台设备 但是当我选择要连接的设备时 我得到一个IOException saying 读取失败 套接字可能关闭或超时 读取 ret 1 只是为了说明我的应用程序是如何工作的 我有一个RecyclerVie
  • 登录失败 (pyodbc.InterfaceError) ('28000', "[28000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]用户 'xxxx' 登录失败

    我在使用 python 3 8 连接到 sql 服务器时遇到了很大的问题 我想知道我是否需要降级到 3 7 python 是否还有其他问题我做错了 这是我的代码和错误消息 params urllib parse quote plus Dri
  • HTTP 连接池

    服务 A 通过 HTTP 调用服务 B 这种情况经常发生 并且传输的数据量不是很大 我发现重新使用相同的 TCP 连接从 A 向 B 发送多个请求似乎可以改善延迟 很自然地 我想到了连接池的想法 打开与服务 B 的多个连接并保持它们处于活动
  • 三星 Android 手机从另一台设备上出现 USB 问题

    早上好 我有一部三星 Android 手机 我通过 USB 电缆将其连接到另一台设备 不是电脑 对于这种情况 我在 android 中启用了 USB 调试和开发人员模式 如果我使用另一台 Android 手机 它工作正常 另一台设备正在闪烁
  • 如何从 MySql 服务器到 Android 应用程序?

    我有一个 MySql 数据库 里面有一些体育比赛结果 我想写一个Android应用程序来在手机上显示这些数据 我在网上搜索过这个问题 我认为MySql数据库和Android应用程序之间不可能有直接连接 这是正确的吗 所以我的问题如下 我怎样
  • 使用 OpenVPN 创建 VPN

    我在 Android 10 上连接 VPN 时遇到问题 并在 logcat 中收到以下消息 这是权限错误 寻找解决方案 还在 Mainfest 中添加了 android requestLegacyExternalStorage true 但
  • 检查 iOS 应用程序上的互联网连接,Cordova Phonegap 3.3.0 无法正常工作

    我尝试过以下this http cordova apache org docs en 3 3 0 cordova connection connection md html The 20Command Line 0AInterfaceCor
  • Visual Studio 2012“扩展和更新”“无法连接到远程服务器”

    不幸的是 过去几个月的情况就是如此 我无法安装新的或更新的软件包工具 gt 扩展和更新我尝试了一切 但无法找到原因 我试过了 访问 NuGet 并从 下载包 包管理器控制台 安装包 SUCCESS 使用 Web 浏览器访问存储库 Visua
  • 使用批处理检查互联网连接

    因此 最近我的互联网连接确实不太令人满意 因此我正在尝试收集尽可能多的数据 以了解中断的时间和持续时间 我尝试了一些 连接监控 程序 但它们没有按照我想要的方式工作 所以我决定制作一个 我是一个十足的菜鸟 但通过过去一个小时的谷歌搜索 我想
  • 通过限制性出站防火墙建立 TCP 连接

    我正在使用 Java 创建一个使用 TCP 进行通信的客户端 服务器应用程序 客户端运行的网络具有出站防火墙 可阻止客户端连接到服务器 有什么方法 解决方法可以通过此防火墙创建 TCP 连接吗 我尝试使用开放的常见端口 例如端口 80 44
  • 数据库连接和 OutOfMemoryError:Java 堆空间

    去年夏天 我制作了一个 Java 应用程序 它可以解析一些 PDF 文件并获取它们包含的信息并将其存储在 SQLite 数据库中 一切都很好 我每周左右都会向数据库添加新文件 没有任何问题 现在 我正在尝试提高应用程序的速度 我想看看如果我
  • Firebird数据库SYSDBA连接错误

    我刚刚安装了 Win64 版 Firebird 并且尝试连接到用 ISQL 预打包的员工数据库 按照Firebird官方的步骤进行操作快速入门指南 https www firebirdsql org file documentation h
  • ftp 在 java 中无法正确下载文件?

    当我使用以下代码下载文件时 它只是将文件写入本地目的地 但文件大小均为零 有人能说为什么会发生这种情况以及如何解决它吗 import org apache commons net ftp FTPClient import org apach
  • Jooq、Spring 和 BoneCP 连接关闭两次错误

    我正在将 Spring 4 0 0 以及 jOOQ 3 2 0 和 BoneCP 0 8 0 用于 Web 应用程序 我的 PersistenceContext 配置与本指南相同 请浏览一下 代码有点太多 无法粘贴到此处 http www
  • 指示远程主机已关闭连接的 NetworkStream.Read 的替代方案?

    关于使用以下命令处理 TCP IP 连接TcpClient类 除了等待之外 还有其他方法可以检查远程主机是否已关闭连接吗 NetworkStream Read返回0的方法 您可以使用IOControlCode KeepAliveValues
  • 将 Android 应用程序连接到远程数据

    谢什谈论的信息有限 我正在尝试让我的 Android 应用程序连接到在线数据库以访问信息 有相当多的信息 包括地理标签 这些信息将映射到我的应用程序上 开发者网站有非常丰富的信息 您可以使用网络 如果可用 在您自己的基于 Web 的服务上存
  • 将数据库导入 MATLAB 错误

    我正在尝试将表导入到我的 MATLAB 工作区 但它一直向我抛出错误 Undefined function or method fetch for input arguments of type struct 这是我尝试执行的代码 dyn
  • 从 MySql 迁移:MariaDB 服务器意外关闭客户端连接

    由于许可 商业使用原因 我们正在从 MySql 迁移到 MariaDB 我们已经成功用 MariaDB 客户端 jar 替换了 MySql 连接器 jar 第一次更改 现在正在尝试用 MariaDB 服务器替换 MySql 服务器而不更改数
  • 我该怎么做才能完全关闭与mcu的tcpClient连接?

    我现在正在研究与 ESP32 中运行的 tcp 服务器的 tcp 套接字连接 通信工作正常 但我无法关闭连接 在搜索关闭 重置 tcpClient 上的解决方案后 似乎关闭 tcpClient 的正确方法应该是 tcpClient GetS

随机推荐

  • 使用 Java 实现快速排序(详解)

    一 概述 最近在看一些面试题 xff0c 发现很多面试过程中都会要求手写快速排序 xff0c 查阅一些博客发现别人写的并不是特别清楚而且也很难记住 xff0c 所以为了更好的掌握这个算法 xff0c 所以在这篇文章中 xff0c 将自己的学
  • CentOS7搭建Samba共享文件夹 设置无密码登录

    搭建之前 xff1a 关闭防火墙 CentOS7默认的防火墙不是iptables xff0c 而是firewalle 停止firewalld服务 systemctl stop firewalld 禁用firewalld服务 systemct
  • 查看 openstack 组件日志

    openstack 部署方式 kolla ansible 使用 kolla ansible 部署方式时 xff0c 所有组件的日志文件会外挂到宿主机上 xff08 都是使用容器启动的 xff09 xff0c 可以在相应节点的 var log
  • 15th 【最短路 dijkstra】最小花费

    最小花费 在n个人中 xff0c 某些人的银行账号之间可以互相转账 这些人之间转账的手续费各不相同 给定这些人之间转账时需要从转账金额里扣除百分之几的手续费 xff0c 请问A最少需要多少钱使得转账后B收到100元 输入文件 第一行输入两个
  • 使用VNC远程登录百度智能云服务器

    使用VNC服务远程登录对浏览器有一定的要求 xff0c 现在只支持如下版本的浏览器 xff0c 使用之前注意VNC页面的提示 浏览器名称版本Google Chrome16 43 Firefox3 6 43 iOS Safari6 1 43
  • Linux环境下为普通用户添加sudo权限

    系统环境 xff1a Centos6 5 1 背景 xff1a sudo是Linux系统管理指令 xff0c 是允许系统管理员让普通用户执行一些或者全部root命令的一个工具 Linux系统下 xff0c 为了安全 xff0c 一般来说我们
  • 利用jquery实现当前时间动态显示

    html代码 xff1a lt div id 61 34 time 34 gt lt div gt jQuery代码 lt script type 61 34 text javascript 34 gt setInterval functi
  • Turtlebot3 Gazebo仿真环境下深度强化学习DQN开发环境构建

    1 Anaconda2 安装 2 Tensorflow安装 ubuntu18系统anaconda安装tensorflow qq 39429669的博客 CSDN博客 3 下载并编译源码 本文先使用github中开源的机器学习的源码进行学习
  • Python数据挖掘 - 第一部分

    文章目录 第一章 数据挖掘库的安装第二章 Matplotlib2 1 matplotlib简介2 2 折线图 xff08 plot xff09 与基础绘图功能2 3 散点图 xff08 scatter xff09 2 4 柱状图 xff08
  • TortoiseGit解决冲突

    TortoiseGit解决冲突 问题概述场景重现解决冲突 问题概述 在项目实施过程中 xff0c 多人维护同一份文件或代码时经常会在本地Commit完再从远程仓库Pull时出现冲突 这时需要保留自己的内容 xff0c 同时也保留远程仓库原来
  • axios的简单封装

    前言 在每次使用原装的axios发送 http请求时 如果需要token验证 xff0c 则都需要创建拦截器 xff0c 添加 39 token 39 请求头 xff0c 或者在config中具体的请求体中添加 xff0c 是一个非常麻烦的
  • 【操作系统】RT-Thread 入门学习

    一 嵌入式操作系统 1 1 软实时与硬实时 强实时操作系统 xff1a 严格限定在规定时间内完成任务 xff0c 否则就会导致灾难性的发生 xff0c 例如导弹拦截系统 汽车引擎系统等 弱实时操作系统 xff1a 可以允许偶尔出现一定的时间
  • windows10安装NVIDIA显卡驱动+cuda10.0教程

    windows10安装NVIDIA显卡驱动 43 cuda10 0教程 1 安装个鲁大师2 确定本机是否支持GPU加速3 更换至匹配的显卡驱动4 下载和安装cuda和cudnn5 验证6 游戏加速7 分享个漂亮的壁纸 1 安装个鲁大师 查看
  • 生成小批量数据集

    shell脚本随机筛选一个目录下后缀为2 4 6 8的 mp4文件 span class token function find span mnt sdb dataset 20181217 RX5 zheA5MV46 name mp4 sp
  • mapreduce二次排序案例

    为什么需要二次排序 在MapReduce操作时 xff0c 我们知道传递的 lt key value gt 会按照key的大小进行排序 xff0c 最后输出的结果是按照key排过序的 有的时候我们在key排序的基础上 xff0c 对valu
  • 浏览器缓存致使修改的样式不生效,解决方式

    我们使用缓存的资源越多 xff0c 网站的响应能力和性能就会越好 为了优化缓存 xff0c 过期时间设置得尽量长是一种很好的策略 对于定期或者频繁更新的资源 xff0c 这么做是比较稳妥的 xff0c 但是对于那些长期不更新的资源会有点问题
  • 数据清洗的步骤

    1 数据清洗的基本过程 S1 xff1a 数据分析 在数据清洗之前 xff0c 对数据分析 xff0c 对数据质量问题有更为详细的了解 xff0c 从而选择更好的清洗方案 S2 xff1a 定义清洗规则 通过数据分析 xff0c 掌握了数据
  • html前端之css绘制形状

    纯CSS绘制的图形 xff0c 有最简单的矩形 圆形和三角形 xff0c 也有各种常见的多边形 xff0c 甚至是阴阳太极和网站小图标 xff0c 非常强大 Square 正方形 square width 100px height 100p
  • 解决docker 运行standard_init_linux.go:219: exec user process caused: exec format error报错

    使用mac M1 build image 在linux上运行会报standard init linux go 219 exec user process caused exec format error 这个问题出现的主要原因是golang
  • 解决upstream prematurely closed connection while reading response header from upstream问题(nginx)

    问题描述 xff1a 使用docker部署了前端和nginx 前端有需求要使用websocket 所以在nginx中配置了websocket转发 xff0c 配置如图 xff1a server listen 80 server name 1