117 lines
3.9 KiB
Nginx Configuration File
Raw Normal View History

fix(security)+fix(api)+docs: 越权面修复、登录门控与状态语义对齐、文档全面校对 - 越权面(全部 before/after 实测可复现,10 条):cabinets/filter 的 project_id/organization_id 参数分支越权(客户可拿对方向柜全字段)、organization-tree 返回全量组织树、 cabin-boards/compartments/cabinets 三个 options 无归属校验、batteries 无归属(改为经 charge_orders→cabinets→projects 间接归属)、feedback 跨组织读且能改他人状态、 GET /downloads/{id} 漏 user_id 过滤(跨用户元数据泄露)、 POST /downloads/cleanup 全局删除所有组织导出(改客户侧只清自己)、 /api/nodes/* 仅需登录(客户可读内网 IP 并注销节点)→ 收紧 role_level>=2; /api/devices/stats 同样收紧;新增共享闸门 auth::require_super_admin - TCP 登录门控:下行投递改为"登录前白名单"(PRE_LOGIN_ALLOWED_ACTS),与上行同一规则 - 60 秒超时对齐协议:挂起项 TTL 120→60 + 值内嵌 deadline 精确判窗 + 超时 WARN(兼容老格式) - 下发前在线判据改连接级认证标记 device:authed:{imei}(消除"管理端显示成功、设备收不到") ⚠️ device-server 与 api-server 必须同批发布 - 协议对齐:auth_str 登记校验提到限流之前、build_spec Topology 分支 clamp(15/8)、 行号引用改小节引用、修 3 处错引小节 - 状态语义:compartments.status 只表占用,充满/故障由通道状态派生;柜级 status1/status2 与开门按钮(柜级独立动作不联动);列注释对齐(cabinets.status 补 2=禁用、 charge_orders.status 标注 2 保留未使用) - 假绿单测修复:超时 SQL 抽常量 + 纯函数孪生体双向断言(方向写反必红) - RSSI 两端统一为同源纯函数 5 档(小程序显示随之变化)+ test/rssi_signal.test.mjs - nginx:扫码入口 abstract 限流(zone=scan_abstract_zone 30r/m burst=20)+ 主配置仓库镜像 - 文档:AGENTS.md 新增「踩过的坑」7 条教训 + 部署注意事项 11 条 + 文档口径优先级; docs/API.md 接口总表 80 条与 mod.rs 逐条一致、Redis 契约按代码重写、9 处事实错误修正; 权威协议文档 v1.1.1(协议行为未变,仅修订文档自身的错误/矛盾/缺失)
2026-09-20 03:23:00 +08:00
# For more information on configuration, see:
worker_shutdown_timeout 30s;
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
# ==== 安全加固:按客户端 IP 限流 zone(必须位于 http 上下文)====
# ⛔ 本文件是线上 /etc/nginx/nginx.conf 的仓库镜像(与线上逐字节一致;改动后请双向核对 md5)。
# ⛔ 三条硬性约束(任一条违反都会让整站起不来或行为异常,历史已各踩过一次):
# 1. limit_req_zone 必须写在 http{} 内 —— conf.d/*.conf 的 location 引用了这些 zone,
# 引用未定义 zone 会让 nginx -t 直接失败;
# 2. stream{} 全配置**只能有一个**(MySQL 3306 / Redis 6379 反代就在本文件下面那个),
# ⛔ 不要在 conf.d/*.conf 里再写一个(报 stream directive is duplicate,整站不可用);
# 3. worker_shutdown_timeout 30s 不要调短 —— 调短会中断正在传输的响应。
limit_req_zone $binary_remote_addr zone=auth_login_zone:10m rate=10r/m;
limit_req_zone $binary_remote_addr zone=auth_challenge_zone:10m rate=20r/m;
limit_req_zone $binary_remote_addr zone=uploads_zone:10m rate=120r/m;
limit_req_zone $binary_remote_addr zone=scan_abstract_zone:10m rate=30r/m;
limit_req_status 429;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2;
# listen [::]:443 ssl http2;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
stream {
server {
listen 127.0.0.1:3306;
listen 10.8.0.252:3306;
proxy_pass rm-bp1bb7yiv5n8z4uvp.mysql.rds.aliyuncs.com:3306;
proxy_timeout 10m;
proxy_connect_timeout 10s;
}
server {
listen 127.0.0.1:6379;
listen 10.8.0.252:6379;
proxy_pass r-bp1lsezvgzmgtwhbtg.redis.rds.aliyuncs.com:6379;
proxy_timeout 10m;
proxy_connect_timeout 10s;
}
}