Nginx实现HTTP和WebSocket的反向代理
一、前言
在上一篇博客IIS实现HTTP和WebSocket服务的反向代理中已经介绍了什么是反向代理以及如何通过IIS实现反向代理,但IIS毕竟受环境的限制,接下来给大家介绍另一种方式使用Nginx实现反向代理。
关于Nginx大家可以参考我另一篇博客:Nginx一个很好用的“服务器”
二、HTTP的反向代理
第一步、准备一个能访问的站点。
例如:我在IIS建了一个站点,里面只有一个test.html文件,里面是一句话“Hello World”,IIS上的访问地址为:http://localhost:5106/test.html,现在我要利用Nginx实现反向代理,通过访问http://localhost:8889/test.html然后跳转到5106。
第二步、打开conf/nginx.conf文件进行配置,配置可以参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #在nginx.conf的注释符号位#<br>#每个指令必须有分号结束<br><br>#user nobody; worker_processes 2; #允许生成的进程数,默认为1,建议设置为等于CPU总核心数 pid D:/MyJob/Projects/nginx-1.17.5/pid/nginx.pid; #指定nginx进程运行文件存放地址,注意路径别写错了,如果不想要这个配置就在前面加#号 error_log logs/error.log debug; #日志路径 events { accept_mutex on ; #设置网路连接序列化,防止惊群现象发生,默认为 on ,惊群现象:一个网路连接到来,多个睡眠的进程被同时叫醒,但只有一个进程能获得链接,这样会影响系统性能 multi_accept on ; #设置一个进程是否同时接受多个网络连接,默认为off worker_connections 1024; #单个进程最大连接数(最大连接数=连接数*进程数),根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为 } http { include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型,默认为text/plain #自定义日志格式<br> log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式 access_log logs/access.log myFormat; sendfile on ; #允许开启高效文件传输模式方式传输文件,默认为off server { keepalive_requests 120; #单连接请求上限次数。 listen 8889; #监听端口 server_name localhost; #监听地址 location / { proxy_pass http: //localhost:5106; #被代理的地址<br> proxy_http_version 1.1; } } } |
第三步、启动Nginx
cmd 进入Nginx解压目录 执行以下命令
注:这里教大家一个小技巧,cmd 进入Nginx解压目录时一般我们需要打开cmd,然后在cd 目录,其实们可以在目录的地址栏直接输入cmd然后回车即可快速打开cmd,如下图:
(1)执行命令:nginx -t -c conf/nginx.conf 测试nginx配置文件是否正确,当出现如下提示时说明你的配置文件是正确的,否则自行根据提示进行错误修复。
(2)执行命令:start nginx 或者双击nginx.exe 启动nginx,启动后我们可以在任务管理中看到nginx的进程,如下图:
(3)如果有看到上面的进程的话说明我们启动成功了,这时候我们访问 http://localhost:8889/test.html 试试看能不能正常显示出“Hello World”,如下图
出现上面的情况说明我们顺利的将8889跳转到了5106。
三、WebSocket的反向代理
NGINX从1.3开始支持WebSocket。
NGINX最多只能维持(65535*后端服务器IP个数)条WebSocket的长连接,如果后端WebSocket服务器IP只有一个,那么就只能最多支持65535条连接。
配置nginx 即支持WebSocket的反向代理。在server -> location中使用这两句开启Nginx对WebSocket的支持功能:
1 2 | proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade" ; |
例如:
1 2 3 4 5 6 7 8 9 10 | server { listen 80; location / { proxy_pass http: //localhost:6000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade" ; } } |
利用nginx代理websocket的时候,发现客户端和服务器握手成功后,如果在60s时间内没有数据交互,连接就会自动断开。
为了保持长连接,可以采取以下这种方式:
nginx.conf 文件里location 中的 proxy_read_timeout 默认60s断开,可以把他设置大一点,你可以设置成自己需要的时间,我这里设置的是十分钟(600s)。
例如:
1 2 3 4 5 6 7 8 9 10 | server { listen 80; location / { proxy_pass http: //localhost:6000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade" ; proxy_read_timeout 600s; } } |
四、Nginx常用命令
1、启动:
D:\MyJob\Projects\nginx-1.17.5>start nginx
或
D:\MyJob\Projects\nginx-1.17.5>nginx.exe
注:建议使用第一种,第二种会使你的cmd窗口一直处于执行中,不能进行其他命令操作。
2、停止:
D:\MyJob\Projects\nginx-1.17.5>nginx -s stop
或
D:\MyJob\Projects\nginx-1.17.5>nginx -s quit
注:stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息。
3、重新载入Nginx:
D:\MyJob\Projects\nginx-1.17.5>nginx -s reload
当配置信息修改,需要重新载入这些配置时使用此命令。
4、重新打开日志文件:
D:\MyJob\Projects\nginx-1.17.5>nginx -s reopen
5、查看Nginx版本:
D:\MyJob\Projects\nginx-1.17.5>nginx -v
大家在看的时候不用担心怎么这么多会不会看不懂,其实并没有很复杂,用着用着就会了,而且一些简单的应用并不会用到上面的所有配置
基本概念就介绍到这了,下一篇教大家如何实际应用nginx。
6、验证配置文件是否正确
D:\MyJob\Projects\nginx-1.17.5>nginx -t -c conf/nginx.conf
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人