架设WebSocket的最后一环,如何设置好nginx反向代理

news2025/1/11 5:59:30

WebScoket都已经完工快一个月,经过一段时间的测试,公司还是准备把服务器换到鹅厂,用EO来解决CDN内容分发和DDOS防护问题,由于EO并不支持URL 路径转发,只支持转发到一个站点的80或则443端口,如果想做路径分发,就必须用负载均衡,这个服务并不便宜,迫不得已,我只能在服务器上用Nginx来做反向代理。根据不同的路径转发到不同的服务器和端口。

Nginx 的配置文件很简单:

    map $http_upgrade $connection_upgrade {

        default upgrade;

        '' close;

    }    

    server {

        listen 80;

        server_name xxxx.cn;

        location  / {

            proxy_http_version 1.1;

            proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_set_header Host $http_host;

            proxy_set_header X-NginX-Proxy true;

            proxy_set_header Upgrade $http_upgrade;

            proxy_set_header Connection "$connection_upgrade";

            proxy_connect_timeout 5s;

            proxy_read_timeout 60s;

            proxy_send_timeout 30s;

            proxy_pass http://127.0.0.1:8360;

            proxy_redirect off;

        }

    }

这个是给缺省的Web服务器用的 ,接下来就是给游戏服务器的配置:

        location  /op {

            proxy_http_version 1.1;

            proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_set_header Host $http_host;

            proxy_set_header X-NginX-Proxy true;

            proxy_set_header Upgrade $http_upgrade;

            proxy_set_header Connection "$connection_upgrade";

            proxy_connect_timeout 5s;

            proxy_read_timeout 60s;

            proxy_send_timeout 30s;

            proxy_pass http://127.0.0.1:16001;

            proxy_redirect off;

        }

例如:游戏访问游戏服务器,用 ws://test.cn/op 作为URL来建立WebScoket,那么Nginx就必须对路径进行规划,比如发现有 op 作为路径的请求,全部转发给游戏服务器。

注意:无论是不是使用WebScoket,在设置反向代理的时候都必须用 http 协议,不能写 ws 作为地址开头,Nginx 不支持这种写法。

在测试的时候,这一切都运行都很好,但是在实际开服的时候,当人数达到一定程度,游戏就会出现无法登录的情况,然后报网络连接错误的错误,这让我很困惑,我尝试修改了nginx 的一些配置:

worker_processes  4;
 

events {

    worker_connections  4096;

}

建立了4个进程,并允许每个进程有4K的连接数量上限,但是并没有效果,连接不上的情况依旧出现。

我仔细观察了发生故障的时候的网络请求,一个获取版本号的URL得到了500错误,这让我很惊讶,但我很快注意到网页下面有nginx的版本号,证明这个是nginx返回的错误。

我打开了nginx的错误日志,在里面发现了大量的错误信息:

2024/04/30 10:55:48 [error] 8840#8344: *162104 maximum number of descriptors supported by select() is 1024 while waiting for request, client: xxxxxx, server: 0.0.0.0:80

在网上搜索了一下这个错误,原因是nginx编译的时候指定的参数导致的:

--with-cc-opt=-DFD_SETSIZE=1024

编译的时候的问题肯定是没办法的,好在给出了解决方案:

Index of /download/icon-default.png?t=N7T8http://nginx-win.ecsds.eu/download/

如果是使用Windows版本,可以直接访问这个 URL,下载其中的一个包

下载之后,上传到服务器,解压之后,执行一个注册表的修改文件:

其内容是:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpWindowSize"=dword:0000faf0
"MaxUserPort"=dword:0000F000
"TcpTimedWaitDelay"=dword:0000001e
"MaxFreeTWTcbs"=dword:000003E8
"MaxHashTableSize"=dword:0000800
"MaxFreeTcbs"=dword:0000800
"TcpNumConnections"=dword:00fffffe
; "StrictTimeWaitSeqCheck"=dword:00000001

主要是修改TCP相关的参数。

修改之后,把 nginx_basic.exe 拷贝到原来的 nginx 的目录,执行下面的命令停止nginx服务。

nginx -s stop

然后将原有的nginx.exe改一个名,比如 nginx.exe.bak ,然后将 nginx_basic.exe 改名成 nginx.exe。

重新启动nginx,问题得以解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1635983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从Paint 3D入门glTF

Paint 3D Microsoft Paint 3D是微软的一款图像编辑软件,它是传统的Microsoft Paint程序的升级版。 这个新版本的Paint专注于三维设计和创作,使用户可以使用简单的工具创建和编辑三维模型。 Microsoft Paint 3D具有直观的界面和易于使用的工具&#xff0…

小程序地理位置权限如何申请?

这篇内容会教大家如何快速申请“获取当前的地理位置(onLocationChange)”接口,以便帮助大家顺利开通接口。以下内容是本人经历了多次的申请经历得出来的经验,来之不易,望大家给予鼓励! 小程序地理位置接口有…

百川crm系统 汽车销售租赁CRM客户管理系统是不可或缺的利器?

在竞争激烈的汽车销售租赁市场中,如何提升客户满意度、优化业务流程、提高销售效率,成为了每一家汽车销售租赁公司必须面对的问题。而CRM(客户关系管理)客户管理系统,正是应对这些挑战的重要利器。本文将从汽车销售租赁…

18 如何设计微服务才能防止宕机?

在上一讲里,介绍了构建一个稳健的微服务的具体法则:防备上游、做好自己、怀疑下游, 并介绍了为什么要防备上游,以及一些防备上游的具体手段。 在本讲里,咱们一起来学习,做好微服务自身的设计和代码编写的常…

ollama-python-Python快速部署Llama 3等大型语言模型最简单方法

ollama介绍 在本地启动并运行大型语言模型。运行Llama 3、Phi 3、Mistral、Gemma和其他型号。 Llama 3 Meta Llama 3 是 Meta Inc. 开发的一系列最先进的模型,提供8B和70B参数大小(预训练或指令调整)。 Llama 3 指令调整模型针对对话/聊天用…

Centos7+Hadoop3.3.4+KDC1.15+Ranger2.4.0集成

一、集群规划 本次测试采用3台虚拟机,操作系统版本为centos7.6。 kerberos采用默认YUM源安装,版本为:1.15.1-55 Ranger版本为2.4.0 系统用户为ranger:ranger IP地址主机名KDCRanger192.168.121.101node101.cc.localKDC masterRanger Admin…

如何找到台式电脑的ip地址

在数字时代,每台接入网络的设备都拥有一个独特的标识,这就是IP地址。无论是手机、笔记本电脑还是台式电脑,IP地址都扮演着至关重要的角色,它帮助设备在网络世界中定位并与其他设备进行通信。对于许多电脑用户来说,了解…

JavaScript原型链深度剖析

目录 前言 一、原型链 1.原型链的主要组成 原型(Prototype) 构造函数(Constructor) 实例(Instance) 2.原型链的工作原理 前言 在JavaScript的世界中,原型链(Prototype Chain&…

“Postman 中文版使用教程:如何切换到中文界面?”

Postman 的很好用的接口测试软件。但是,Postman 默认是英文版的,也不支持在软件内切换为中文版。很多同学的英语并不是很好,看到一堆的英文很是头痛。 今天我们来介绍下:切换到 Postman 中文版的方法。想要学习更多的关于 Postma…

IDEA 中 git fetch 验证报错 The provided password or token is incorrect

参考链接: 【GitLab】-HTTP Basic: Access denied.remote:You must use a personal access token_http basic: access denied. the provided password o-CSDN博客 idea使用gitLab报错:remote: HTTP Basic: Access denied_idea remote: http basic: acc…

MoonBit 周报 Vol.39:新增 JS 后端、插件和构建系统同步支持多后端开发……

MoonBit 更新 新增JavaScript后端 目前MoonBit已新增对JavaScript的支持并带来前所未有的性能提升,在JS后端实现了超出Json5近8倍性能的优势。更详细的介绍可以看一下这篇文章:IDEA研究院编程语言MoonBit发布JavaScript后端,速度提升25倍 …

Copilot Workspace是GitHub对人工智能驱动的软件工程的诠释

软件开发的未来是人工智能驱动的集成开发环境吗?至少GitHub 是这样想的。 在今年初秋于旧金山举行的 GitHub Universe 年度大会之前,GitHub 发布了 Copilot Workspace,这是一种开发环境,利用 GitHub 所称的 “Copilot 驱动的代理…

[游戏陪玩系统] 陪玩软件APP小程序H5游戏陪玩成品软件源码-线上线下可爆改家政,整理师等功能

简介 随着电竞行业的快速发展,电竞陪玩APP正在逐渐成为用户在休闲娱乐时的首选。为了吸引用户和提高用户体验,电竞陪玩APP开发需要定制一些特色功能,并通过合适的盈利模式来获得收益。本文将为您介绍电竞陪玩APP开发需要定制的特色功能以及常…

超简单的Spring-mvc示例

超简单的Spring-mvc示例

IDEA2024版本控制台乱码怎么解决?

在使用最新版本的IDEA时,可能会遇到控制台输出乱码问题? 在网上找了很多办法,修改了IDEA的vmoptions文件也没有用,最后发现原来是要修改这里 Setting>>Build,Execution,Deployment>>Runnr中的VM Options配置&#xf…

保序加密技术:保护数据有序性的安全方案

在数据安全领域,除了常见的保密性、完整性和可用性需求外,某些特定场景还需要保护数据的有序性。保序加密技术(Order Preserving Encryption, OPE)就是为了满足这一需求而设计的。本文将介绍保序加密技术的基本原理、应用场景以及…

Leetcode——面试题02.04.分割链表

面试题 02.04. 分割链表 - 力扣(LeetCode) 对于该链表OJ,我们两种大的方向: 1.在原链表上修改;2.创建新链表,遍历原链表。 在原链上进行修改:如果该节点的val小于x则继续往后走,如…

全新桥隧坡安全监测解决方案,24h监测效率提升30%

4月26日,交通运输部党组书记、部长李小鹏在部务会上强调,要高度重视公路桥梁隧道结构监测工作,抓紧推进公路桥梁隧道结构监测系统建设,进一步健全完善公路桥梁隧道结构监测长效运行机制。 中海达积极参与公路桥梁隧道结构监测工作…

WebLlama:通过对话进行网页浏览的智能代理

WebLlama:智能网页浏览代理 WebLlama 是 McGill University 自然语言处理团队的研究项目,旨在开发能通过对话浏览网页的智能代理。这些代理基于 Llama-3 模型优化微调,基于 Llama-3-8B-Instruct 模型,专为网页导航和对话任务优化…

对话访谈——五问RAG与搜索引擎:探索知识检索的未来

记一次关于RAG和搜索引擎在知识检索方面的对话访谈,针对 RAG 与传统搜索引擎的异同,以及它们在知识检索领域的优劣势进行了深入的探讨。 Q:传统搜索引擎吗,通过召回-排序的两阶段模式,实现搜索逻辑的实现,当前RAG技术也…