1. 需求背景
- 没有备案域名,国内建站只能通过IP:端口访问。
- 国内共享服务器建站,IP可能会变动,无法记忆。
2. 流程图
3. 实现
境外服务器
3.1 境外服务器安装宝塔,新建网站,进入网站管理,新建302重定向。
3.2 进入网站管理,点开配置文件,找到这一行。
3.3 进入文件管理,按照文件路径找到实际文件名。
此处为/www/server/panel/vhost/nginx/redirect/example.com/559316ecc798a86156ab578bc0f87dc1_example.com.conf
3.4 进入面板设置,打开IPv6和API,并设置白名单。
境内服务器
3.5 创建python脚本文件,填入以下内容,修改所有【中括号】内容。
vim test.py
import time
import hashlib
import requests
import os
import json
# 修改这些变量以符合你的需求
api_sk = '【你的宝塔API密钥】'
url = 'http://【IP地址】:【宝塔面板端口】/files?action=SaveFileBody'
# 获取当前Unix时间戳
request_time = str(int(time.time()))
# 计算request_token
hashed_api_sk = hashlib.md5(api_sk.encode('utf-8')).hexdigest()
raw_token = request_time + hashed_api_sk
request_token = hashlib.md5(raw_token.encode('utf-8')).hexdigest()
# 准备POST数据
url_to_request_first = 'http://4.ipw.cn'
response_first = requests.get(url_to_request_first)
if response_first.status_code == 200:
received_data = response_first.text
else:
print("IP获取失败,状态码:", response_first.status_code)
received_data = ''
data = {
'path': '【上面获取的文件路径如/www/server/panel/vhost/nginx/redirect/example.com/559316ecc798a86156ab578bc0f87dc1_example.com.conf】',
'data': "#REWRITE-START\n if ($host ~ '^【域名如example.com】'){\n return 302 http://" + received_data + ":【国内建站端口】$request_uri;\n }\n#REWRITE-END",
'encoding': 'utf-8',
'request_time': int(request_time),
'request_token': request_token,
}
# 发送POST请求
if received_data:
response = requests.post(url, data=data)
print(response.text)
3.6 测试脚本
python3 test.py
3.7 配置定时任务,定时更新
crontab -e
*/30 * * * * python3 /path/to/test.py