# ============================================================ # nginx 配置示例 · 高股息回测系统 # # 架构:前后端分离 # - 前端(静态)由 nginx 直接提供:output/ 目录 # - 后端(API)由 hdiv web 进程提供,nginx 反代 /api # # 使用方式: # 1. 把 output/ 同步到服务器,例如 /srv/hddiv/site/ # 2. 在服务器上启动后端: # cd <项目目录> && PYTHONPATH=src nohup .venv/bin/python -m hdiv web \ # --host 127.0.0.1 --port 8099 --api-only > logs/web.log 2>&1 & # 3. 把本文件按需修改后放到 /etc/nginx/conf.d/ 或 sites-available/ # 4. nginx -t && nginx -s reload # ============================================================ server { listen 8080; server_name 192.168.1.166; # ← 改成你的服务器地址或域名 charset utf-8; access_log /var/log/nginx/hddiv.access.log; error_log /var/log/nginx/hddiv.error.log; # ------------------------------------------------------------ # 站点根:output/ 已同步到服务器的这个目录 # ------------------------------------------------------------ root /srv/hddiv/site; # ← 改成实际路径 index index.html; # ------------------------------------------------------------ # 后端 API(关键:必须放在静态规则之前) # # 前端从页面相对路径请求 api/xxx。页面在 /ggx/ 下, # 因此请求会落到 /ggx/api/xxx —— 这里把它转发到后端 /api/xxx。 # ------------------------------------------------------------ location /ggx/api/ { proxy_pass http://127.0.0.1:8099/api/; proxy_http_version 1.1; 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 120s; proxy_buffering off; # 接口数据量小,关闭缓冲更及时 # 接口不做缓存,避免 PATCH 后看到旧数据 add_header Cache-Control "no-store" always; } # ------------------------------------------------------------ # 前端静态资源 # ------------------------------------------------------------ location /ggx/ { alias /srv/hddiv/site/; # ← 与上面 root 保持一致(注意结尾斜杠) # 前端是 hash 路由(#/...),无需服务端 rewrite; # 未知路径回落到 index.html,保证深链接也能打开 try_files $uri $uri/ /ggx/index.html; # 图表库较大,允许缓存;app.js/app.css 不缓存便于更新 location ~* /ggx/assets/.*\.js$ { expires 7d; add_header Cache-Control "public"; } location ~* /ggx/app/.*\.(js|css)$ { add_header Cache-Control "no-cache"; } } # 根路径跳到应用 location = / { return 302 /ggx/; } } # ============================================================ # 备选:不挂子路径,直接把前端放在站点根 # # 若你希望用 http://:8080/ 直接打开,用下面这段替换上面的 server 块。 # 注意此时 API 前缀是 /api/,与前端相对路径解析一致,无需改前端。 # ============================================================ # # server { # listen 8080; # server_name 192.168.1.166; # charset utf-8; # # root /srv/hddiv/site; # index index.html; # # location /api/ { # proxy_pass http://127.0.0.1:8099/api/; # proxy_http_version 1.1; # 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_read_timeout 120s; # add_header Cache-Control "no-store" always; # } # # location / { # try_files $uri $uri/ /index.html; # } # }