Files
soul/开发文档/服务器管理/references/常见问题手册.md

3.9 KiB
Raw Blame History

常见问题手册

1. 宝塔面板问题

问题1: JSON解析错误

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes

原因: 数据库中project_config字段不是有效JSON格式

错误格式: {project_name: xxx, port: 3000}
正确格式: {"project_name": "xxx", "port": 3000}

修复方法:

import sqlite3, json
conn = sqlite3.connect('/www/server/panel/data/db/site.db')
c = conn.cursor()
c.execute("SELECT id, name, project_config FROM sites WHERE project_type='Node'")
for row in c.fetchall():
    try:
        json.loads(row[2])
    except:
        # 手动构建正确JSON并更新
        pass

2. 网络访问问题

问题2: 外网无法访问ERR_EMPTY_RESPONSE

原因: 腾讯云安全组只开放443端口未开放80端口

解决方案:

  1. 配置SSL证书使用通配符证书
  2. Nginx配置添加443监听
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /www/server/panel/vhost/cert/www.quwanzhi.com/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/www.quwanzhi.com/privkey.pem;

问题3: DNS被代理劫持

原因: 本地使用VPN/代理Clash, V2Ray等

现象:

  • 本地DNS解析到198.18.x.x
  • 服务器内部测试正常
  • 外部访问失败

解决方案:

  • 关闭代理软件
  • 或修改hosts文件
  • 用手机4G网络测试

3. Node项目问题

问题4: 启动失败Could not find production build

原因: 使用npm run start但未执行npm run build

解决方案:

  • 方案A: 先npm run buildnpm run start
  • 方案B: 改用npm run dev模式

问题5: 端口冲突EADDRINUSE

原因: 多个项目配置相同端口或package.json中端口写死

解决方案:

  1. 检查端口占用: ss -tlnp | grep :端口号
  2. 修改package.json: "start": "next start -p 新端口"
  3. 更新数据库中的端口配置

问题6: Vue项目 Invalid Host header

原因: Nginx代理时Host头不匹配

解决方案: 修改vue.config.js:

devServer: {
  disableHostCheck: true
}

4. 腾讯云特性

问题7: 服务器无法访问自己公网IP

原因: 轻量服务器网络配置限制

现象:

  • 服务器无法通过公网IP访问自己
  • 外部访问返回Empty reply

解决方案:

  • 这是正常现象
  • 服务器内部测试用127.0.0.1
  • 外部访问问题需其他网络测试

问题8: 端口只监听IPv6

问题: 端口显示tcp6 :::3006而不是tcp 0.0.0.0:3006

说明:

  • Node.js监听::会同时响应IPv4
  • 这是正常现象,无需特别处理

5. Nginx问题

问题9: 重复server_name警告

原因: 同一域名在多个配置文件中定义

解决方案:

  • 删除或备份重复配置文件
  • Node项目使用node_项目名.conf
  • 不要同时创建域名.conf

问题10: HTTPS强制重定向导致无法访问

问题: Nginx配置了return 301 https://但SSL证书未配置

解决方案:

  • 删除HTTPS重定向
  • 或正确配置SSL证书
  • 同时支持HTTP和HTTPS

6. 宝塔与PM2冲突

问题11: 权限错误 EACCES

原因: 同时使用root用户PM2和宝塔PM2www用户

现象:

  • 权限错误:EACCES: permission denied
  • 宝塔面板显示未启动但实际在运行
  • 状态不同步

解决方案:

  • 停止所有独立PM2pm2 kill
  • 只使用宝塔界面管理
  • 所有操作通过宝塔面板

7. 诊断命令速查

# 检查端口占用
ss -tlnp | grep :3006
netstat -tlnp | grep :3006

# 测试HTTP响应
curl -I http://localhost:3006
curl -I -H 'Host: soul.quwanzhi.com' http://127.0.0.1

# 检查Nginx配置
nginx -t

# 重载Nginx
nginx -s reload

# 检查PM2进程
/www/server/nodejs/v22.14.0/bin/pm2 list

# 检查DNS解析
dig soul.quwanzhi.com
dig +short soul.quwanzhi.com @8.8.8.8