Files
go-site-clone/NGINX_API.md
2025-11-22 17:47:42 +08:00

5.5 KiB
Raw Blame History

Nginx 服务 API 说明

功能说明

  1. 应用启动时自动检测 nginx 状态

    • 启动应用时会自动调用 OnStartup() 检测 nginx 是否在运行
    • 如果检测到 nginx 进程,会自动设置 Running = true
    • 不会自动启动或停止 nginx
  2. 应用关闭时保持 nginx 运行

    • 关闭应用时调用 OnShutdown(),但不会停止 nginx
    • nginx 进程继续在后台运行
    • 下次启动应用时会自动检测到运行状态

前端可调用方法

进程管理

启动 Nginx

import { App } from '../bindings/go-site-clone'

try {
  await App.StartNginx()
  console.log('Nginx 启动成功')
} catch (error) {
  console.error('Nginx 启动失败:', error)
}

停止 Nginx

try {
  await App.StopNginx()
  console.log('Nginx 停止成功')
} catch (error) {
  console.error('Nginx 停止失败:', error)
}

重启 Nginx

try {
  await App.RestartNginx()
  console.log('Nginx 重启成功')
} catch (error) {
  console.error('Nginx 重启失败:', error)
}

重载配置

try {
  await App.ReloadNginx()
  console.log('Nginx 配置重载成功')
} catch (error) {
  console.error('Nginx 配置重载失败:', error)
}

检查状态

try {
  const running = await App.CheckNginxStatus()
  console.log('Nginx 运行状态:', running)
} catch (error) {
  console.error('检查状态失败:', error)
}

测试配置

try {
  await App.TestNginxConfig()
  console.log('配置文件有效')
} catch (error) {
  console.error('配置文件测试失败:', error)
}

站点管理

添加站点

const siteConfig = {
  name: 'example.com',
  domains: ['example.com', '127.0.0.1'],
  port: 80,
  path: '/www/example.com',
  index: 'index.html',
  enabled: true
}

try {
  await App.AddNginxSite(siteConfig)
  console.log('站点添加成功')
} catch (error) {
  console.error('站点添加失败:', error)
}

删除站点

try {
  await App.DeleteNginxSite('example.com')
  console.log('站点删除成功')
} catch (error) {
  console.error('站点删除失败:', error)
}

更新站点

const updatedConfig = {
  name: 'example.com',
  domains: ['example.com', 'www.example.com'],
  port: 8080,
  path: '/www/example.com',
  index: 'index.html',
  enabled: true
}

try {
  await App.UpdateNginxSite(updatedConfig)
  console.log('站点更新成功')
} catch (error) {
  console.error('站点更新失败:', error)
}

获取所有站点

try {
  const sites = await App.GetAllNginxSites()
  console.log('站点列表:', sites)
} catch (error) {
  console.error('获取站点列表失败:', error)
}

启用站点

try {
  await App.EnableNginxSite('example.com')
  console.log('站点启用成功')
} catch (error) {
  console.error('站点启用失败:', error)
}

禁用站点

try {
  await App.DisableNginxSite('example.com')
  console.log('站点禁用成功')
} catch (error) {
  console.error('站点禁用失败:', error)
}

日志管理

获取访问日志最后100行

try {
  const logs = await App.GetNginxAccessLog(100)
  console.log('访问日志:', logs)
} catch (error) {
  console.error('获取访问日志失败:', error)
}

获取错误日志最后100行

try {
  const logs = await App.GetNginxErrorLog(100)
  console.log('错误日志:', logs)
} catch (error) {
  console.error('获取错误日志失败:', error)
}

清空日志

try {
  await App.ClearNginxLogs()
  console.log('日志清空成功')
} catch (error) {
  console.error('日志清空失败:', error)
}

数据结构

NginxSiteConfig

interface NginxSiteConfig {
  ID: string       // 站点唯一ID可选
  name: string     // 站点名称
  domains: string[] // 域名列表
  port: number     // 监听端口
  path: string     // 网站根目录路径
  index: string    // 默认首页文件
  enabled: boolean // 是否启用
}

工作流程示例

页面初始化时检查 nginx 状态

import { ref, onMounted } from 'vue'
import { App } from '../bindings/go-site-clone'

const nginxRunning = ref(false)

onMounted(async () => {
  try {
    nginxRunning.value = await App.CheckNginxStatus()
  } catch (error) {
    console.error('检查 nginx 状态失败:', error)
  }
})

完整的站点托管流程

// 1. 检查 nginx 状态
const running = await App.CheckNginxStatus()

// 2. 如果未运行,启动 nginx
if (!running) {
  await App.StartNginx()
}

// 3. 添加站点配置
await App.AddNginxSite({
  name: 'mysite.com',
  domains: ['mysite.com', '127.0.0.1'],
  port: 80,
  path: '/www/mysite.com',
  index: 'index.html',
  enabled: true
})

// 4. 重载配置使其生效
await App.ReloadNginx()

// 5. 验证站点已添加
const sites = await App.GetAllNginxSites()
console.log('当前托管站点:', sites)

注意事项

  1. Windows 路径处理:路径会自动转换为 nginx 兼容格式(斜杠)
  2. 配置文件位置:站点配置保存在 plugin/nginx/conf/hosts/ 目录
  3. 禁用站点:禁用的站点配置会移动到 plugin/nginx/conf/hosts.disabled/ 目录
  4. 自动重载:添加、删除、更新站点时,如果 nginx 正在运行会自动重载配置
  5. 持久化运行:应用关闭后 nginx 继续运行,重新打开应用会自动检测状态