11《Nginx 入门教程》Nginx反向代理(下)
off999 2025-01-06 14:49 25 浏览 0 评论
本小节,我们继续学习 Nginx 在 七层反向代理中的其它几种比较常见的情况,比如 web 服务中的 WebSocket 协议的反向代理和 uwsgi 协议的反向代理。
1. WebSocket的反向代理
WebSocket 是目前比较成熟的技术了, WebSocket 协议为创建客户端和服务器端需要实时双向通讯的 webapp 提供了一个选择。服务器可以向浏览器推送相关消息,这样在前端实现的某个页面中我们可以及时看到服务器的状态变化而不用使用定时刷新去获取后台信息。目前大部分浏览器都支持 WebSocket 协议,比如 Firefox,IE,Chrome,Safari,Opera,并且越来越多的服务器框架现在也同样支持 WebSocket。此外,在js、java 和 python 中都提供了 Websocket 开发库,这也使得 websocket 协议的广泛应用于 web 服务的开发中。当然作为浏览器和后台服务的中间代理的 Nginx 也必定支持 Websocket,这样能更好的完成代理角色。在 Nginx 中通过 ngx_http_proxy_module 模块实现 Websocket 反向代理功能,具体实现配置如下:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
上述配置表示将转发的协议提升至1.1, 同时在转发的 http 请求的头部中加上如下配置:
Upgrade: websocket
Connection: upgrade
代码块12这两个字段表示请求服务器升级协议为 WebSocket。上游服务器处理完请求后,响应如下报文:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade
这个响应是告诉客户端已成功切换协议,升级为 Websocket 协议。握手成功之后,服务器端和客户端便角色对等,就像普通的 Socket 一样,能够双向通信。 不再进行 HTTP 的交互,而是开始 WebSocket 的数据帧协议实现数据交换。默认情况下,连接将会在无数据传输60秒后关闭,proxy_read_timeout 参数可以延长这个时间。源站通过定期发送 ping 帧以保持连接并确认连接是否还在使用。
通过以上简简单单的三行配置,我们就能在 Nginx 中轻松实现 Websocket 的反向代理,这也说明了 Nginx 的简单易用特点。
2. uwsgi的反向代理
首先,理清楚几个概念:
- WSGI:全称是 Web Server Gateway Interface,WSGI 只是一种规范,描述 web server 如何与 web application 通信的规范。要实现 WSGI 协议,必须同时实现 web server 和 web application,当前运行在 WSGI 协议之上的 web 框架有 Flask, Django,这也是目前最流行的 python web框架。
- uwsgi:与WSGI一样是一种通信协议,是uWSGI服务器的独占协议,用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型的描述。
- uWSGI:是一个web服务器,实现了WSGI协议、uwsgi协议、http协议等。
WSGI 协议其实是定义了一种 server 与 application 解耦的规范,即可以有多个实现 WSGI server 的服务器,也可以有多个实现 WSGI application 的框架,那么就可以选择任意的 server 和 application 组合实现自己的 web 应用。Django,Flask 框架都有自己实现的简单的WSGI server,一般用于服务器调试,生产环境下直接使用WSGI server。
Nginx 中将 http 协议的报文转换成 uwsgi 协议的报文,只需要使用 uwsgi_pass 指令即可。和 proxy_pass 指令类似,前者转发为 uwsgi 协议的报文,后者代理转发 http 协议的报文。其余用法一致。
Syntax: uwsgi_pass [protocol://]address;
Default: —
Context: location, if in location
用法示例:
...
http {
...
server {
listen 9000;
location / {
# 包含uwsgi请求描述文件
include uwsgi_params;
# 配置请求传递,socket地址
uwsgi_pass 127.0.0.1:9000;
}
}
...
}
...
3. 案例测试
3.1 Websocket 反向代理
我们打开百度搜索"websocket在线测试",找到 websocket 的在线测试网站。
可以看到 121.40.165.18:8800 是该网站提供 websocket 连接的后端服务地址。我们借助这个地址来完成一个简单的测试。我们找一台公网上的云主机,其 ip 地址为 180.76.152.113,在上面搭建 Nginx 服务,添加监听9000端口的服务配置如下:
...
http {
...
server {
listen 9000;
default_type text/plain;
access_log logs/ws.log;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://121.40.165.18:8800;
}
}
...
}
...
然后我们将 websocket 在线测试网站中的测试地址改成 ws://180.76.152.113:9000,断开后再次连接,发现也能成功,同时能实现原服务的功能。这说明我们的 Nginx 服务成功完成了 Websocket 代理功能。
3.2 uwsgi协议的反向代理
本次实验按照如下步骤进行:
- 首先我们安装 WSGI server,直接使用 pip 安装即可:
pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple
- 编写test.py文件:
def application(env, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [b'hello world\n',]
- 启动 WSGI server并监听7000端口。
# 指定socket连接,监听端口,应用代码文件以及进程数
$ uwsgi --socket :7000 --wsgi-file test.py --master --processes 4
- 在nginx.conf中添加如下 server 指令块:
server {
listen 7001;
default_type text/plain;
access_log logs/uwsgi.log;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:7000;
}
}
- 最后在本地可以请求 Nginx 服务地址的7001端口,可以看到返回 “hello world” 字符串,说明 Nginx 转发 uwsgi 协议成功。
[shen@shen ~]$ curl http://180.76.152.113:7001
hello world
- 上一篇:nginx的应用场景
- 下一篇:centos安装nginx
相关推荐
- 电脑文件夹设置密码的软件(电脑文件夹设置打开密码)
-
是的,一些操作系统允许用户设置密码保护文件夹或文件以增加安全性。例如,在Windows操作系统中,可以使用BitLocker或EFS对整个驱动器或单个文件夹进行加密,并设置访问密码。在MacOS中,...
- 验证码接收平台(虚拟验证码接收平台)
-
天一泓国际短信平台、主要为企业出海提供短信验证码、语音短信、营销短信、通知短信等等。相对于其他平台。天一泓国际短信达到率更高、发送速度更快。短信验证码是很多人日常生活中都会接触到的。主要应用在银行支付...
- win7旗舰版恢复出厂设置后账户被停用
-
如果您的联想电脑运行的是Windows7系统,发现账户被停用了,可能是因为该账户未激活或密码过期等原因。以下是一些解决方法:1.重启计算机并以管理员身份登录。2.在“控制面板”中选择“用户账...
- 惠普p1008驱动下载(惠普p1108驱动下载)
-
第一步:随便用一台电脑来先安装好打印服务器的驱动,通过打印服务器的管理软件给打印服务器手工指定个和电脑同网段的IP地址 第二步:在电脑上先安装打印机的驱动,打印机驱动安装好后会生成个打印机图标 第...
-
- 惠普启动bios是哪个键(惠普bios开机启动项)
-
1、按电源键启动电脑,在屏幕刚亮时,不停点击F10按键,就可以进入BIOS界面;2、如果F10没反应,则在启动时不停点击ESC键;3、这个时候会进入到启动菜单选项,F10BIOSSetup就是BIOS设置,此时按下F10键就可以进入BI...
-
2025-12-08 18:03 off999
- 华硕刷bios教程(华硕刷bios快捷键)
-
1、使用EZFlash3,在BIOS环境下通过U盘或网络更新BIOS;2、使用EZUpdate,在Windows环境下通过软件更新BIOS;3、使用USBBIOSFlashBack,在关...
- 10086宽带测速(10086宽带测速官网)
-
1、在网络上搜索引擎键入“移动网速测速”,之后会进入移动宽带测速的网页版。直接在网版版上面点击移动宽带测速的网页版,点击开始测速就能知道宽带的速度啦,是不是很方便呢。2、等待移动测试的结果,收到结果...
- 电脑bios设置怎么进入(各种电脑进去bios设置)
-
进入电脑BIOS设置的方法为:在电脑开机的时候按下F2键位即可,具体的操作流程如下:1、在电脑键盘上找到电源键,按下将电脑开机。2、之后点击进入到开机启动程序,加载开机动画。3、之后,找到键盘上的F2...
- 笔记本打游戏90度正常吗(笔记本玩游戏就90度)
-
不论玩什么都好,超过80度就属于不正常了(如果用软件什么开着比如鲁大师,达到100度电脑就会自动关机)电脑达到90度,诉开机盖摸下散热器,是不是很热(如果是就说明了真是有90度以上,如果没就是这软件...
- win2003r2标准版密钥(win2003专业版密钥)
-
这是因为产品过期了,需要激活。设置方法如下:1、首先点击电脑桌面左下角的windows图标,选择设置进入。2、在设置界面里找到控制面板,并点击这个选项进入。3、打开了控制面板着后点击里面的系统和安全这...
- 免费的手机杀毒软件(免费的手机杀毒软件哪个好用)
-
安全的。一只猫影视大全app是一款能够帮助你们一起找到电影电视剧资源的软件,这个版本是安全免费的,大家可以放心下载,每天都会有最新电影电视剧推荐,还有各种好看有趣的综艺,首页没有的资源大家也可以通过搜...
- 现在穿越火线烟雾头怎么调(穿越火线烟雾头调整方法)
-
1、在Windows10系统桌面,右键点击桌面左下角的开始按钮,在弹出的菜单中选择设置菜单项。2、在打开的Windows设置窗口中,点击“系统”图标。3、在打开的系统设置窗口中,点击左侧边栏的“显示...
- 用u盘制作dos启动盘(ultraiso制作dos启动盘)
-
有个办法,也许行,创建个普通WIN98启动盘,将EBD.cbd解压再用WinRAR压成DOS模式的自解压文件复到启动盘中,在AUTOEXE.bat中第一行写入Copy(自解压文件名称)(虚拟硬盘符...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
使用 python-fire 快速构建 CLI_如何搭建python项目架构
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
