- config: 反向代理、缓存、负载均衡、安全、SSL 等配置模板 - lua: API 网关、认证、动态路由、限流、WebSocket 等脚本示例 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
75 lines
2.3 KiB
Nginx Configuration File
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
|
|
}))
|
|
}
|
|
}
|
|
}
|
|
}
|