140 lines
5.1 KiB
JavaScript
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配置 + 修复广州配置冲突
*/
const SG = { ip: '43.156.237.110', port: 3911, key: 'zy_gtw_74d30f54fa8b5581514569ee7874def57861a31ccb2be8c9' }
const GZ = { ip: '43.139.217.141', port: 3910, key: 'zy_gtw_4a155446b7acc09fe46a2a29972c0ca5d9954da19c35dc23' }
async function callGK(srv, method, path, body = null) {
const url = `http://${srv.ip}:${srv.port}${path}`
const opts = { method, headers: { 'Authorization': `Bearer ${srv.key}`, 'Content-Type': 'application/json' } }
if (body) opts.body = JSON.stringify(body)
const res = await fetch(url, opts)
const text = await res.text()
try { return { status: res.status, data: JSON.parse(text) } }
catch { return { status: res.status, data: { raw: text } } }
}
async function exec(srv, cmd) {
const r = await callGK(srv, 'POST', '/exec', { cmd })
return r.data
}
async function readFile(srv, path) {
const r = await callGK(srv, 'POST', '/file/read', { path })
if (r.status === 200) return r.data.content
return null
}
async function writeFile(srv, path, content) {
return (await callGK(srv, 'POST', '/file/write', { path, content })).status === 200
}
async function main() {
console.log('═'.repeat(50))
console.log('🔧 修复Nginx配置')
console.log('═'.repeat(50))
// === 新加坡修复 ===
console.log('\n📌 新加坡: 将/images/注入默认server块')
// 读取默认配置
const defaultConf = await readFile(SG, '/etc/nginx/sites-enabled/default')
if (!defaultConf) {
console.log(' ❌ 无法读取默认配置')
return
}
// 删除之前创建的冲突配置
await exec(SG, 'rm -f /etc/nginx/sites-enabled/image-studio /etc/nginx/sites-available/image-studio 2>&1')
console.log(' ✅ 删除冲突的server块')
// 在server块中注入/images/ location
// 找到第一个server块在http块default文件里或直接根级别
// 在server块的最后一个}之前插入location /images/
// 找server块最后的}
const lastBraceBeforeEnd = defaultConf.lastIndexOf('}')
if (lastBraceBeforeEnd === -1) {
console.log(' ❌ 找不到server块结尾')
return
}
const imagesLoc = `
# 铸渊图片工作室 · 代理到本地3912
location /images/ {
proxy_pass http://127.0.0.1:3912/;
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_buffering off;
proxy_read_timeout 60s;
}
}
`
const newDefault = defaultConf.slice(0, lastBraceBeforeEnd) + imagesLoc
if (await writeFile(SG, '/etc/nginx/sites-enabled/default', newDefault)) {
console.log(' ✅ 默认配置更新成功')
}
// 测试+重载
const r1 = await exec(SG, 'nginx -t 2>&1')
console.log(' Nginx测试:', r1.stdout || r1.stderr)
const r2 = await exec(SG, 'nginx -s reload 2>&1')
console.log(' Nginx重载:', r2.stdout || r2.stderr || 'ok')
// 验证
const r3 = await exec(SG, 'curl -s http://localhost/images/ | head -3')
console.log(' ✅ 本地验证:', r3.stdout || r3.stderr)
// === 广州修复 ===
console.log('\n📌 广州: 删除guanghulab.bak避免conflict')
await exec(GZ, 'rm -f /etc/nginx/sites-enabled/guanghulab.bak 2>&1')
console.log(' ✅ 删除.bak备份')
// 检查是否有sites-available的guanghulab.conf被软链到了sites-enabled
const r4 = await exec(GZ, 'ls -la /etc/nginx/sites-enabled/')
console.log(' 当前sites-enabled:', r4.stdout || r4.stderr)
// 验证广州Nginx配置
const r5 = await exec(GZ, 'nginx -t 2>&1')
console.log(' 广州Nginx测试:', r5.stdout || r5.stderr)
const r6 = await exec(GZ, 'nginx -s reload 2>&1')
console.log(' 广州Nginx重载:', r6.stdout || r6.stderr || 'ok')
// === 广州到新加坡全部链路测试 ===
console.log('\n' + '═'.repeat(50))
console.log('📡 全链路测试')
console.log('═'.repeat(50))
// 1. 新加坡本地 → image-studio
const r7 = await exec(SG, 'curl -s http://localhost:3912/ | head -2')
console.log(' 1. SG local:3912:', r7.stdout || r7.stderr)
// 2. 新加坡 Nginx → image-studio
const r8 = await exec(SG, 'curl -s http://localhost/images/ | head -2')
console.log(' 2. SG nginx /images:', r8.stdout || r8.stderr)
// 3. 广州 → 新加坡80端口/images
const r9 = await exec(GZ, `curl -s --connect-timeout 5 http://${SG.ip}/images/ | head -2`)
console.log(' 3. GZ→SG /images:', r9.stdout || r9.stderr || '(空)')
// 4. 广州 Nginx → 新加坡 (https://guanghulab.com/images/)
const r10 = await exec(GZ, 'curl -s -k --connect-timeout 5 https://localhost/images/ | head -2')
console.log(' 4. GZ nginx /images:', r10.stdout || r10.stderr || '(空)')
// 测试直接访问新加坡80端口
console.log('\n 测试新加坡80端口根路径:')
const r11 = await exec(GZ, `curl -s --connect-timeout 5 http://${SG.ip}/ | head -3`)
console.log(' ', r11.stdout || r11.stderr || '(空)')
console.log('\n' + '═'.repeat(50))
console.log('✅ 修复完成')
console.log('═'.repeat(50))
}
main().catch(err => console.error('❌', err))