diff --git a/backend/apps/engine/consumers/worker_deploy_consumer.py b/backend/apps/engine/consumers/worker_deploy_consumer.py index 1ed9975e..5444e717 100644 --- a/backend/apps/engine/consumers/worker_deploy_consumer.py +++ b/backend/apps/engine/consumers/worker_deploy_consumer.py @@ -242,8 +242,9 @@ class WorkerDeployConsumer(AsyncWebsocketConsumer): return # 远程 Worker 通过 nginx HTTPS 访问(nginx 反代到后端 8888) - # 使用 https://{PUBLIC_HOST} 而不是直连 8888 端口 - heartbeat_api_url = f"https://{public_host}" # 基础 URL,agent 会加 /api/... + # 使用 https://{PUBLIC_HOST}:{PUBLIC_PORT} 而不是直连 8888 端口 + public_port = getattr(settings, 'PUBLIC_PORT', '8083') + heartbeat_api_url = f"https://{public_host}:{public_port}" session_name = f'xingrin_deploy_{self.worker_id}' remote_script_path = '/tmp/xingrin_deploy.sh' diff --git a/backend/apps/engine/services/task_distributor.py b/backend/apps/engine/services/task_distributor.py index 0f4f7de6..477b1a46 100644 --- a/backend/apps/engine/services/task_distributor.py +++ b/backend/apps/engine/services/task_distributor.py @@ -234,7 +234,7 @@ class TaskDistributor: else: # 远程:通过 Nginx 反向代理访问(HTTPS,不直连 8888 端口) network_arg = "" - server_url = f"https://{settings.PUBLIC_HOST}" + server_url = f"https://{settings.PUBLIC_HOST}:{settings.PUBLIC_PORT}" # 挂载路径(所有节点统一使用固定路径) host_results_dir = settings.HOST_RESULTS_DIR # /opt/xingrin/results diff --git a/backend/apps/engine/views/worker_views.py b/backend/apps/engine/views/worker_views.py index 1fb7e73e..9c58f216 100644 --- a/backend/apps/engine/views/worker_views.py +++ b/backend/apps/engine/views/worker_views.py @@ -238,7 +238,7 @@ class WorkerNodeViewSet(viewsets.ModelViewSet): docker run -d --pull=always \ --name xingrin-agent \ --restart always \ - -e HEARTBEAT_API_URL="https://{django_settings.PUBLIC_HOST}" \ + -e HEARTBEAT_API_URL="https://{django_settings.PUBLIC_HOST}:{getattr(django_settings, 'PUBLIC_PORT', '8083')}" \ -e WORKER_ID="{worker_id}" \ -e IMAGE_TAG="{target_version}" \ -v /proc:/host/proc:ro \ diff --git a/backend/config/settings.py b/backend/config/settings.py index c9708ba6..7e98f92d 100644 --- a/backend/config/settings.py +++ b/backend/config/settings.py @@ -290,6 +290,7 @@ NUCLEI_TEMPLATES_REPO_URL = os.getenv('NUCLEI_TEMPLATES_REPO_URL', 'https://gith # 对外访问主机与端口(供 Worker 访问 Django 使用) PUBLIC_HOST = os.getenv('PUBLIC_HOST', 'localhost').strip() +PUBLIC_PORT = os.getenv('PUBLIC_PORT', '8083').strip() # 对外 HTTPS 端口 SERVER_PORT = os.getenv('SERVER_PORT', '8888') # ============================================ diff --git a/docker/.env.example b/docker/.env.example index 70aabc94..165156cc 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -22,8 +22,10 @@ SERVER_PORT=8888 # 供远程 Worker 访问主服务器的地址: # - 仅本地部署:server(Docker 内部服务名) # - 有远程 Worker:改为主服务器外网 IP 或域名(如 192.168.1.100 或 xingrin.example.com) -# 注意:远程 Worker 会通过 https://{PUBLIC_HOST} 访问(nginx 反代到后端 8888) +# 注意:远程 Worker 会通过 https://{PUBLIC_HOST}:{PUBLIC_PORT} 访问(nginx 反代到后端 8888) PUBLIC_HOST=server +# 对外 HTTPS 端口 +PUBLIC_PORT=8083 # ==================== Django 核心配置 ==================== # 生产环境务必更换为随机强密钥 diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index 1350e175..23235aa3 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -97,8 +97,7 @@ services: frontend: condition: service_started ports: - - "80:80" - - "443:443" + - "8083:8083" volumes: # SSL 证书挂载(方便更新) - ./nginx/ssl:/etc/nginx/ssl:ro diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 0a520890..bd61e2da 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -95,8 +95,7 @@ services: frontend: condition: service_started ports: - - "80:80" - - "443:443" + - "8083:8083" volumes: - ./nginx/ssl:/etc/nginx/ssl:ro diff --git a/docker/nginx/nginx.conf b/docker/nginx/nginx.conf index 0f0bdcd2..25dc2f30 100644 --- a/docker/nginx/nginx.conf +++ b/docker/nginx/nginx.conf @@ -16,17 +16,9 @@ http { server frontend:3000; } - # HTTP 跳转到 HTTPS - server { - listen 80; - server_name _; - - return 301 https://$host$request_uri; - } - # HTTPS 反代(将证书放在 /docker/nginx/ssl 下映射到 /etc/nginx/ssl) server { - listen 443 ssl http2; + listen 8083 ssl http2; server_name _; ssl_certificate /etc/nginx/ssl/fullchain.pem; @@ -36,6 +28,9 @@ http { client_max_body_size 50m; + # HTTP 请求到 HTTPS 端口时自动跳转 + error_page 497 =301 https://$host:$server_port$request_uri; + # 指纹特征 - 用于 FOFA/Shodan 等搜索引擎识别 add_header X-Powered-By "Xingrin ASM" always; diff --git a/docs/quick-start.md b/docs/quick-start.md index c104697d..8811ad4c 100644 --- a/docs/quick-start.md +++ b/docs/quick-start.md @@ -12,11 +12,10 @@ - **操作系统**: Ubuntu 18.04+ / Debian 10+ - **权限**: sudo 管理员权限 - **端口要求**: 需要开放以下端口 - - `80` - HTTP 访问(自动跳转到 HTTPS) - - `443` - HTTPS 访问(主要访问端口) + - `8083` - HTTPS 访问(主要访问端口) - `5432` - PostgreSQL 数据库(如使用本地数据库) - `6379` - Redis 缓存服务 - - 后端 API 仅容器内监听 8888,由 nginx 反代到 80/443,对公网无需放行 8888 + - 后端 API 仅容器内监听 8888,由 nginx 反代到 8083,对公网无需放行 8888 ## 一键安装 @@ -45,7 +44,7 @@ sudo ./install.sh --no-frontend ### 3. 访问系统 安装完成后,访问: -- **Web 界面**: https://你的服务器IP/ +- **Web 界面**: https://你的服务器IP:8083/ **默认账号**: - 用户名: `admin` @@ -60,13 +59,12 @@ sudo ./install.sh --no-frontend #### 必须放行的端口 ``` -80 - HTTP 访问 -443 - HTTPS 访问 +8083 - HTTPS 访问(主要访问端口) 3000 - 前端服务(开发模式) 5432 - PostgreSQL(如使用本地数据库) 6379 - Redis 缓存 ``` -> 后端 API 默认仅在容器内 8888 监听,由 nginx 反代到 80/443,对公网无需放行 8888。 +> 后端 API 默认仅在容器内 8888 监听,由 nginx 反代到 8083,对公网无需放行 8888。 #### 推荐方案 - **国外 VPS**:如 Vultr、DigitalOcean、Linode 等,默认开放所有端口,无需额外配置 @@ -195,8 +193,7 @@ IMAGE_TAG=v1.0.0 # 镜像版本(自动设置) #### 1. 端口被占用 ```bash # 检查端口占用 -sudo netstat -tlnp | grep :80 -sudo netstat -tlnp | grep :443 +sudo netstat -tlnp | grep :8083 # 停止占用端口的服务 sudo systemctl stop apache2 # 如果是 Apache diff --git a/docs/wordlist-architecture.md b/docs/wordlist-architecture.md index eb1fa360..f0c8d4fa 100644 --- a/docs/wordlist-architecture.md +++ b/docs/wordlist-architecture.md @@ -245,7 +245,7 @@ A: 更新字典内容后会重新计算 hash,Worker 下次使用时会检测 A: 检查: 1. `PUBLIC_HOST` 是否配置为 Server 的外网 IP 或域名 -2. Nginx 443 (HTTPS) 是否可达(远程 Worker 通过 nginx 访问后端) +2. Nginx 8083 (HTTPS) 是否可达(远程 Worker 通过 nginx 访问后端) 3. Worker 到 Server 的网络是否通畅 ### Q: 如何批量导入字典? diff --git a/install.sh b/install.sh index 26ae8f16..f446ffce 100755 --- a/install.sh +++ b/install.sh @@ -233,7 +233,7 @@ show_summary() { echo -e "${YELLOW}[!] 云服务器某些厂商默认开启了安全策略(阿里云/腾讯云/华为云等):${RESET}" echo -e " 端口未放行可能导致无法访问或无法扫描,强烈推荐用国外vps,或者在云控制台放行:" - echo -e " ${RESET}80, 443, 5432, 6379" + echo -e " ${RESET}8083, 5432, 6379" echo }