Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c2c3bd1426 | ||
|
|
2aeb327638 | ||
|
|
717b7569de |
+26
-4
@@ -28,11 +28,12 @@ C_TEXT = "#333333" # 正文
|
||||
C_SUBTEXT = "#889099" # 次要文字
|
||||
|
||||
# ── 路径 ──────────────────────────────────────────────
|
||||
# frozen=True 表示已被 PyInstaller 打包为 EXE:
|
||||
# BASE_DIR -> EXE 解压出的临时目录(_MEIPASS)
|
||||
# 已被打包为 EXE(PyInstaller 的 sys.frozen / Nuitka 的 __compiled__):
|
||||
# BASE_DIR -> 内置数据目录:PyInstaller 用 _MEIPASS,Nuitka onefile 用
|
||||
# __file__ 所在解压临时目录(无 _MEIPASS 时回退)
|
||||
# PERSIST_DIR -> EXE 所在目录,服务安装等需要持久化的操作都放这里
|
||||
if getattr(sys, 'frozen', False):
|
||||
BASE_DIR = Path(sys._MEIPASS)
|
||||
if getattr(sys, 'frozen', False) or "__compiled__" in globals():
|
||||
BASE_DIR = Path(getattr(sys, "_MEIPASS", None) or Path(__file__).resolve().parent)
|
||||
PERSIST_DIR = Path(sys.executable).resolve().parent
|
||||
else:
|
||||
BASE_DIR = Path(__file__).resolve().parent
|
||||
@@ -88,6 +89,8 @@ def _load_nodes():
|
||||
if not isinstance(data, list):
|
||||
raise ValueError("nodes.json 顶层应为节点数组")
|
||||
_NODES = data
|
||||
if not _SELECTED_RESTORED:
|
||||
_restore_selected_node(_NODES) # 恢复上次使用的节点
|
||||
log(f"已加载节点配置: {len(_NODES)} 个 ({path})")
|
||||
if data and not str(data[0].get("domain") or "").strip():
|
||||
log_red("节点未填写域名:请配置 config.json 的 nodes_url 在线更新,"
|
||||
@@ -97,6 +100,7 @@ def _load_nodes():
|
||||
return _NODES
|
||||
|
||||
_SELECTED_NODE = 0 # 当前选中节点下标(默认第一条)
|
||||
_SELECTED_RESTORED = False # 启动时是否已按设置恢复过上次选中的节点
|
||||
|
||||
def _current_node():
|
||||
"""当前使用的节点:默认取列表第一个;无节点时返回 None。"""
|
||||
@@ -121,8 +125,26 @@ def _switch_node(index):
|
||||
log("已在当前节点")
|
||||
return False
|
||||
_SELECTED_NODE = index
|
||||
_save_current_node(nodes[index].get("domain") or "") # 记录到设置,下次启动恢复
|
||||
return True
|
||||
|
||||
def _restore_selected_node(nodes):
|
||||
"""首次加载时按设置里记录的 current_node(域名)恢复上次选中的节点。"""
|
||||
global _SELECTED_NODE, _SELECTED_RESTORED
|
||||
_SELECTED_RESTORED = True
|
||||
saved = str(_settings_load().get("current_node") or "")
|
||||
for i, n in enumerate(nodes):
|
||||
if saved and str(n.get("domain") or "") == saved:
|
||||
_SELECTED_NODE = i
|
||||
return
|
||||
_SELECTED_NODE = 0
|
||||
|
||||
def _save_current_node(domain):
|
||||
"""把当前选中节点域名写入设置文件(下次启动自动继续使用)。"""
|
||||
data = _settings_load()
|
||||
data["current_node"] = str(domain or "")
|
||||
_settings_save(data)
|
||||
|
||||
def _reload_nodes():
|
||||
"""强制重新读取 nodes.json(菜单打开时调用,外部改动即时生效)。"""
|
||||
global _NODES
|
||||
|
||||
@@ -56,15 +56,14 @@ http {
|
||||
}
|
||||
}
|
||||
|
||||
# 443 端口:iam.aeolianchi.me HTTPS 站点 + 认证 CONNECT 代理
|
||||
server {
|
||||
listen 443 ssl;
|
||||
http2 on;
|
||||
server_name iam.aeolianchi.me;
|
||||
server_name XXX;
|
||||
root /var/www/html;
|
||||
|
||||
ssl_certificate /etc/nginx/ssl/iam.aeolianchi.me/fullchain.pem;
|
||||
ssl_certificate_key /etc/nginx/ssl/iam.aeolianchi.me/privkey.pem;
|
||||
ssl_certificate /etc/nginx/ssl/XXX/fullchain.pem;
|
||||
ssl_certificate_key /etc/nginx/ssl/XXX/privkey.pem;
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers HIGH:!aNULL:!MD5;
|
||||
ssl_session_cache shared:SSL:10m;
|
||||
|
||||
Reference in New Issue
Block a user