要配置 Nginx 使用 WebSocket,需要完成以下几个步骤:
- 安装 Nginx
首先需要在服务器上安装 Nginx。可以通过包管理器获取或者下载源代码进行编译安装。
- 配置 Nginx
在 Nginx 配置文件中,在 http
块下添加以下内容:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name example.com;
location / {
try_files $uri @proxy;
}
location @proxy {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://websocket;
}
}
以上配置中:
map
块将请求头中的Upgrade
字段映射为Connection
字段,用于告诉 Nginx 是否需要升级连接协议。upstream
块定义后端服务器地址,并命名为websocket
。server
块监听特定 IP 和端口,并将所有请求转发到location /
中。location /
块的try_files
指令将所有静态文件请求转发到@proxy
中,由 @proxy 代理实现。-
location @proxy
块开启协议升级并启用 WebSockets 协议,将所有请求代理到后端服务器。 -
配置后端服务器
在后端服务器上启动 WebSocket 服务,并监听 127.0.0.1:8000
。
示例1:
前端代码:
var socket = new WebSocket('ws://example.com/ws');
socket.addEventListener('open', function (event) {
console.log('WebSocket connected');
});
socket.addEventListener('message', function (event) {
console.log('Received message:', event.data);
});
socket.addEventListener('close', function (event) {
console.log('WebSocket closed:', event.code, event.reason);
});
socket.addEventListener('error', function (error) {
console.error('WebSocket error:', error);
});
示例2:
后端代码:
import asyncio
import websockets
async def counter(websocket, path):
i = 0
while True:
await asyncio.sleep(1)
i += 1
await websocket.send(str(i))
async def main():
async with websockets.serve(counter, "127.0.0.1", 8000):
await asyncio.Future() # run forever
asyncio.run(main())
以上示例代码中,前端代码通过 WebSocket 协议连接到 Nginx 提供的 WebSocket 服务,后端代码通过 websockets
库提供一个简单的 WebSocket 计数器服务。
- 重启 Nginx
使用以下命令重新加载 Nginx 配置文件:
sudo nginx -t && sudo service nginx reload
这样就成功配置了 Nginx 的 WebSocket 服务。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何配置Nginx的Websocket? - Python技术站