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

261 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Nginx 服务 API 说明
## 功能说明
1. **应用启动时自动检测 nginx 状态**
- 启动应用时会自动调用 `OnStartup()` 检测 nginx 是否在运行
- 如果检测到 nginx 进程,会自动设置 `Running = true`
- 不会自动启动或停止 nginx
2. **应用关闭时保持 nginx 运行**
- 关闭应用时调用 `OnShutdown()`,但不会停止 nginx
- nginx 进程继续在后台运行
- 下次启动应用时会自动检测到运行状态
## 前端可调用方法
### 进程管理
#### 启动 Nginx
```typescript
import { App } from '../bindings/go-site-clone'
try {
await App.StartNginx()
console.log('Nginx 启动成功')
} catch (error) {
console.error('Nginx 启动失败:', error)
}
```
#### 停止 Nginx
```typescript
try {
await App.StopNginx()
console.log('Nginx 停止成功')
} catch (error) {
console.error('Nginx 停止失败:', error)
}
```
#### 重启 Nginx
```typescript
try {
await App.RestartNginx()
console.log('Nginx 重启成功')
} catch (error) {
console.error('Nginx 重启失败:', error)
}
```
#### 重载配置
```typescript
try {
await App.ReloadNginx()
console.log('Nginx 配置重载成功')
} catch (error) {
console.error('Nginx 配置重载失败:', error)
}
```
#### 检查状态
```typescript
try {
const running = await App.CheckNginxStatus()
console.log('Nginx 运行状态:', running)
} catch (error) {
console.error('检查状态失败:', error)
}
```
#### 测试配置
```typescript
try {
await App.TestNginxConfig()
console.log('配置文件有效')
} catch (error) {
console.error('配置文件测试失败:', error)
}
```
### 站点管理
#### 添加站点
```typescript
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)
}
```
#### 删除站点
```typescript
try {
await App.DeleteNginxSite('example.com')
console.log('站点删除成功')
} catch (error) {
console.error('站点删除失败:', error)
}
```
#### 更新站点
```typescript
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)
}
```
#### 获取所有站点
```typescript
try {
const sites = await App.GetAllNginxSites()
console.log('站点列表:', sites)
} catch (error) {
console.error('获取站点列表失败:', error)
}
```
#### 启用站点
```typescript
try {
await App.EnableNginxSite('example.com')
console.log('站点启用成功')
} catch (error) {
console.error('站点启用失败:', error)
}
```
#### 禁用站点
```typescript
try {
await App.DisableNginxSite('example.com')
console.log('站点禁用成功')
} catch (error) {
console.error('站点禁用失败:', error)
}
```
### 日志管理
#### 获取访问日志最后100行
```typescript
try {
const logs = await App.GetNginxAccessLog(100)
console.log('访问日志:', logs)
} catch (error) {
console.error('获取访问日志失败:', error)
}
```
#### 获取错误日志最后100行
```typescript
try {
const logs = await App.GetNginxErrorLog(100)
console.log('错误日志:', logs)
} catch (error) {
console.error('获取错误日志失败:', error)
}
```
#### 清空日志
```typescript
try {
await App.ClearNginxLogs()
console.log('日志清空成功')
} catch (error) {
console.error('日志清空失败:', error)
}
```
## 数据结构
### NginxSiteConfig
```typescript
interface NginxSiteConfig {
ID: string // 站点唯一ID可选
name: string // 站点名称
domains: string[] // 域名列表
port: number // 监听端口
path: string // 网站根目录路径
index: string // 默认首页文件
enabled: boolean // 是否启用
}
```
## 工作流程示例
### 页面初始化时检查 nginx 状态
```typescript
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)
}
})
```
### 完整的站点托管流程
```typescript
// 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 继续运行,重新打开应用会自动检测状态