184 lines
6.2 KiB
Plaintext
184 lines
6.2 KiB
Plaintext
# 巡樓 Console nginx 設定 - 開發環境版(Vite + Go)
|
||
#
|
||
# 目標網域:https://threads-tool.30cm.net
|
||
# 路由規則:
|
||
# / → 前端 Vite dev server (127.0.0.1:5173)
|
||
# /api/ → 後端 Go API gateway (127.0.0.1:8890)
|
||
#
|
||
# 使用方式:
|
||
# 1. 確認前後端已啟動:
|
||
# make run
|
||
# make web-dev
|
||
#
|
||
# 2. 複製設定(需 sudo):
|
||
# sudo cp infra/nginx/haixun-dev.conf /etc/nginx/conf.d/haixun.conf
|
||
# sudo nginx -t
|
||
# sudo systemctl reload nginx
|
||
#
|
||
# 3. 測試:
|
||
# curl http://threads-tool.30cm.net/health
|
||
# 瀏覽器開 http://threads-tool.30cm.net (或 https)
|
||
#
|
||
# SSL 建議:
|
||
# - 先用 http 測試(目前預設)
|
||
# - 有憑證後再啟用 https 區塊(見文末)
|
||
#
|
||
# 包含:
|
||
# - Vite HMR websocket 支援
|
||
# - /api SSE 完整長連線設定(AI stream、job 進度等)
|
||
# - 正確轉發 Authorization / X-Member-Authorization
|
||
|
||
upstream haixun_backend {
|
||
server 127.0.0.1:8890;
|
||
keepalive 32;
|
||
}
|
||
|
||
upstream haixun_frontend {
|
||
server 127.0.0.1:5173;
|
||
}
|
||
|
||
# =============================================
|
||
# 主要 server(目前預設 http,方便開發測試)
|
||
# =============================================
|
||
server {
|
||
listen 80;
|
||
listen [::]:80;
|
||
server_name threads-tool.30cm.net;
|
||
|
||
# ========== 前端 Vite ==========
|
||
location / {
|
||
proxy_pass http://haixun_frontend;
|
||
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;
|
||
|
||
# Vite HMR (Hot Module Replacement) 必須開啟
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection "upgrade";
|
||
|
||
# 開發環境避免快取問題
|
||
proxy_cache_bypass $http_upgrade;
|
||
|
||
proxy_read_timeout 3600s;
|
||
proxy_send_timeout 3600s;
|
||
}
|
||
|
||
# 舊版 Threads OAuth callback(與 /api/v1/threads-accounts/oauth/callback 等價)
|
||
location = /api/threads/oauth/callback {
|
||
proxy_pass http://haixun_backend/api/v1/threads-accounts/oauth/callback$is_args$args;
|
||
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;
|
||
}
|
||
|
||
# MinIO 公開資源(頭像等);避免瀏覽器直接打 127.0.0.1:9000
|
||
location /haixun-assets/ {
|
||
proxy_pass http://127.0.0.1:9000;
|
||
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_buffering off;
|
||
}
|
||
|
||
# ========== 後端 API ==========
|
||
location /api/ {
|
||
proxy_pass http://haixun_backend;
|
||
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;
|
||
|
||
# 讓前端帶的 provider token 與會員 JWT 通過
|
||
proxy_set_header Authorization $http_authorization;
|
||
proxy_set_header X-Member-Authorization $http_x_member_authorization;
|
||
|
||
# 強制 SSE / 串流行為(非常重要)
|
||
proxy_set_header Connection "";
|
||
proxy_buffering off;
|
||
proxy_cache off;
|
||
chunked_transfer_encoding off;
|
||
proxy_ignore_headers "X-Accel-Buffering";
|
||
|
||
proxy_read_timeout 3600s;
|
||
proxy_send_timeout 3600s;
|
||
}
|
||
|
||
# 方便健康檢查
|
||
location = /health {
|
||
proxy_pass http://haixun_backend/api/v1/health;
|
||
proxy_set_header Host $host;
|
||
}
|
||
}
|
||
|
||
# =============================================
|
||
# 進階:啟用 HTTPS(有 SSL 憑證時使用)
|
||
# =============================================
|
||
# 步驟:
|
||
# 1. 取得憑證(推薦 certbot)
|
||
# sudo certbot --nginx -d threads-tool.30cm.net
|
||
# 2. 把上面整個 server { ... } 區塊註解或移除
|
||
# 3. 取消下面兩個 server block 的註解
|
||
# 4. 確認 ssl_certificate 路徑正確
|
||
# 5. nginx -t && systemctl reload nginx
|
||
#
|
||
# server {
|
||
# listen 80;
|
||
# listen [::]:80;
|
||
# server_name threads-tool.30cm.net;
|
||
# return 301 https://$host$request_uri;
|
||
# }
|
||
#
|
||
# server {
|
||
# listen 443 ssl http2;
|
||
# listen [::]:443 ssl http2;
|
||
# server_name threads-tool.30cm.net;
|
||
#
|
||
# # 請根據實際憑證路徑修改
|
||
# ssl_certificate /etc/letsencrypt/live/threads-tool.30cm.net/fullchain.pem;
|
||
# ssl_certificate_key /etc/letsencrypt/live/threads-tool.30cm.net/privkey.pem;
|
||
#
|
||
# ssl_protocols TLSv1.2 TLSv1.3;
|
||
# ssl_ciphers HIGH:!aNULL:!MD5;
|
||
# ssl_prefer_server_ciphers off;
|
||
#
|
||
# add_header X-Content-Type-Options "nosniff" always;
|
||
# add_header X-Frame-Options "SAMEORIGIN" always;
|
||
# add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
||
#
|
||
# # 前端
|
||
# location / {
|
||
# proxy_pass http://haixun_frontend;
|
||
# 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_set_header Upgrade $http_upgrade;
|
||
# proxy_set_header Connection "upgrade";
|
||
# }
|
||
#
|
||
# # API
|
||
# location /api/ {
|
||
# proxy_pass http://haixun_backend;
|
||
# 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_set_header Authorization $http_authorization;
|
||
# proxy_set_header X-Member-Authorization $http_x_member_authorization;
|
||
# proxy_set_header Connection "";
|
||
# proxy_buffering off;
|
||
# proxy_cache off;
|
||
# proxy_read_timeout 3600s;
|
||
# }
|
||
# } |