lolly/docs/lua/websocket/nginx.conf
xfy 6543422281 docs: 添加 Nginx 配置和 Lua 脚本示例文档
- config: 反向代理、缓存、负载均衡、安全、SSL 等配置模板
- lua: API 网关、认证、动态路由、限流、WebSocket 等脚本示例

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 17:59:22 +08:00

75 lines
2.3 KiB
Nginx Configuration File

# WebSocket 路由配置
# 需要配合 ngx_lua 模块使用
http {
# Lua 包路径配置
lua_package_path "/path/to/lua/?.lua;;";
# 共享内存区域,用于 WebSocket 连接状态管理
lua_shared_dict ws_connections 10m;
lua_shared_dict ws_tokens 1m;
server {
listen 80;
server_name example.com;
# WebSocket 端点
location /ws {
# 启用 WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 代理头设置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时设置
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
# 后端 WebSocket 服务
proxy_pass http://127.0.0.1:8080;
}
# Lua 处理的 WebSocket 端点
location /ws/lua {
# 启用 WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 通过 Lua 验证连接
access_by_lua_file /path/to/lua/ws_handler.lua;
# 代理到后端服务
proxy_pass http://127.0.0.1:8080;
}
# Token 签发端点(示例)
location /ws/token {
content_by_lua_block {
local cjson = require "cjson"
local redis = require "resty.redis"
-- 获取连接参数
local token = ngx.var.arg_token or ngx.md5(ngx.time() .. ngx.var.remote_addr)
local ttl = tonumber(ngx.var.arg_ttl) or 3600
-- 存储 Token 到共享内存
local dict = ngx.shared.ws_tokens
dict:set(token, "1", ttl)
ngx.header.content_type = "application/json"
ngx.say(cjson.encode({
token = token,
expires_in = ttl,
ws_url = "ws://" .. ngx.var.host .. "/ws/lua?token=" .. token
}))
}
}
}
}