# Nginx 静态文件服务 + 智能代理 + 自定义 404 页面 # AI 爬虫 User-Agent 黑名单 map $http_user_agent $badbot { default 0; ~*(GPTBot|ChatGPT-User|Claude-Web|ClaudeBot|Bytespider|CCBot|Google-Extended) 1; } # 主站 HTTP(SSL 已在外层 nginx 终结,此处只需 serve 内容) server { root /usr/share/nginx/html; index index.html; client_max_body_size 500M; listen 80; server_name redpowerfuture.com www.redpowerfuture.com; error_page 404 /404.html; location = /404.html { internal; } location = / { return 302 /web/index.html; } location = /web { return 302 /web/; } location = /sys { return 302 /sys/; } location /web/ { alias /usr/share/nginx/html/web/; try_files $uri $uri/ /web/index.html; } location /sys/ { alias /usr/share/nginx/html/; try_files $uri $uri/ /index.html; } location / { try_files $uri $uri/ @proxy; } location @proxy { if ($uri ~ \.[^./]+$) { return 404; } proxy_pass http://__API_HOST__:8000; 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_connect_timeout 75s; proxy_send_timeout 86400s; proxy_read_timeout 86400s; } } # Gitea HTTP → HTTPS 重定向 server { listen 80; server_name gitea.redpowerfuture.com; if ($badbot) { return 444; } return 301 https://$host$request_uri; } # MinIO HTTP/HTTPS(增加 WebSocket 支持) server { listen 80; server_name minio.redpowerfuture.com; location / { proxy_pass http://__API_HOST__:9001; 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; # WebSocket 支持 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 86400s; } } # Consul HTTP(仅 HTTP) server { listen 80; server_name consul.redpowerfuture.com; location / { proxy_pass http://__API_HOST__:8500; 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; } } # MeiliSearch HTTP(仅 HTTP) server { listen 80; server_name meilisearch.redpowerfuture.com; location / { proxy_pass http://__API_HOST__:7700; 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; } } # 项目管理 HTTP(仅 HTTP) server { listen 80; server_name pm.redpowerfuture.com; location / { proxy_pass http://__API_HOST__:8080; 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; } } # jaeger HTTP(仅 HTTP) server { listen 80; server_name jaeger.redpowerfuture.com; location / { proxy_pass http://__API_HOST__:16686; 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; } } # ==================== 主站 HTTPS(静态文件 + API 反向代理) ==================== server { root /usr/share/nginx/html; index index.html; client_max_body_size 500M; listen 443 ssl; server_name redpowerfuture.com www.redpowerfuture.com; ssl_certificate /etc/nginx/ssl/scs1779764972146_redpowerfuture.com_server.crt; ssl_certificate_key /etc/nginx/ssl/scs1779764972146_redpowerfuture.com_server.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; error_page 404 /404.html; location = /404.html { internal; } location = / { return 302 /web/index.html; } location = /web { return 302 /web/; } location = /sys { return 302 /sys/; } location /web/ { alias /usr/share/nginx/html/web/; try_files $uri $uri/ /web/index.html; } location /sys/ { alias /usr/share/nginx/html/; try_files $uri $uri/ /index.html; } location / { try_files $uri $uri/ @proxy; } location @proxy { if ($uri ~ \.[^./]+$) { return 404; } proxy_pass http://__API_HOST__:8000; 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_connect_timeout 75s; proxy_send_timeout 86400s; proxy_read_timeout 86400s; } } # ==================== Gitea HTTPS ==================== server { listen 443 ssl; server_name gitea.redpowerfuture.com; ssl_certificate /etc/nginx/ssl/gitea.redpowerfuture.com.pem; ssl_certificate_key /etc/nginx/ssl/gitea.redpowerfuture.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { if ($badbot) { return 403; } proxy_pass http://__API_HOST__:3000; 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_connect_timeout 75s; proxy_send_timeout 86400s; proxy_read_timeout 86400s; } }