From 5c048a590d7efd58158218e1b6d00dda27169e13 Mon Sep 17 00:00:00 2001 From: zhengkunwang <31820853+zhengkunwang223@users.noreply.github.com> Date: Tue, 18 Mar 2025 11:11:15 +0800 Subject: [PATCH] fix(website): fix issue with change default website failed (#8171) --- agent/app/service/nginx_utils.go | 24 +++++++++++++ agent/app/service/website.go | 3 ++ frontend/src/assets/json/china-name.json | 36 +++++++++++++++++++ frontend/src/lang/modules/en.ts | 5 +-- frontend/src/lang/modules/ja.ts | 5 +-- frontend/src/lang/modules/ko.ts | 5 +-- frontend/src/lang/modules/ms.ts | 5 +-- frontend/src/lang/modules/pt-br.ts | 5 +-- frontend/src/lang/modules/ru.ts | 5 +-- frontend/src/lang/modules/zh-Hant.ts | 5 +-- frontend/src/lang/modules/zh.ts | 5 +-- .../website/website/config/basic/index.vue | 4 +-- 12 files changed, 89 insertions(+), 18 deletions(-) create mode 100644 frontend/src/assets/json/china-name.json diff --git a/agent/app/service/nginx_utils.go b/agent/app/service/nginx_utils.go index 341bd36f2..8b9e1345f 100644 --- a/agent/app/service/nginx_utils.go +++ b/agent/app/service/nginx_utils.go @@ -103,6 +103,30 @@ func getNginxParamsByKeys(scope string, keys []string, website *model.Website) ( return res, nil } +func updateDefaultServerConfig(enable bool) error { + nginxInstall, err := getAppInstallByKey("openresty") + if err != nil { + return err + } + defaultConfigPath := path.Join(nginxInstall.GetPath(), "conf", "default", "00.default.conf") + content, err := os.ReadFile(defaultConfigPath) + if err != nil { + return err + } + defaultConfig, err := parser.NewStringParser(string(content)).Parse() + if err != nil { + return err + } + defaultConfig.FilePath = defaultConfigPath + defaultServer := defaultConfig.FindServers()[0] + defaultServer.UpdateListen("80", enable) + defaultServer.UpdateListen("[::]:80", enable) + if err = nginx.WriteConfig(defaultConfig, nginx.IndentedStyle); err != nil { + return err + } + return nginxCheckAndReload(string(content), defaultConfigPath, nginxInstall.ContainerName) +} + func updateNginxConfig(scope string, params []dto.NginxParam, website *model.Website) error { nginxFull, err := getNginxFull(website) if err != nil { diff --git a/agent/app/service/website.go b/agent/app/service/website.go index b68a68e66..c00c52660 100644 --- a/agent/app/service/website.go +++ b/agent/app/service/website.go @@ -1292,6 +1292,9 @@ func (w WebsiteService) ChangeDefaultServer(id uint) error { return err } } + if err := updateDefaultServerConfig(!(id > 0)); err != nil { + return err + } if id > 0 { website, err := websiteRepo.GetFirst(repo.WithByID(id)) if err != nil { diff --git a/frontend/src/assets/json/china-name.json b/frontend/src/assets/json/china-name.json new file mode 100644 index 000000000..1eb67cb33 --- /dev/null +++ b/frontend/src/assets/json/china-name.json @@ -0,0 +1,36 @@ +{ + "Anhui": "安徽", + "Beijing": "北京", + "Fujian": "福建", + "Gansu": "甘肃", + "Guangdong": "广东", + "Guangxi": "广西", + "Guizhou": "贵州", + "Hainan": "海南", + "Hebei": "河北", + "Henan": "河南", + "Heilongjiang": "黑龙江", + "Hubei": "湖北", + "Hunan": "湖南", + "Jilin": "吉林", + "Jiangsu": "江苏", + "Jiangxi": "江西", + "Liaoning": "辽宁", + "Inner Mongolia": "内蒙古", + "Ningxia": "宁夏", + "Qinghai": "青海", + "Shandong": "山东", + "Shanxi": "山西", + "Shaanxi": "陕西", + "Shanghai": "上海", + "Sichuan": "四川", + "Tianjin": "天津", + "Tibet": "西藏", + "Xinjiang": "新疆", + "Yunnan": "云南", + "Zhejiang": "浙江", + "Chongqing": "重庆", + "HongKong": "香港", + "Macao": "澳门", + "Taiwan": "台湾" +} diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 29e902d4d..fec4fc6a1 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -2216,7 +2216,7 @@ const message = { defaultServer: 'Default Site', noDefaultServer: 'Not set', defaultServerHelper: - 'After setting the default site, all unbound domain names and IPs are directed to the default site\n which can effectively prevent malicious analysis', + 'After setting the default site, all unbinded domain names and IPs will be redirected to the default site\nThis can effectively prevent malicious resolution\nHowever, it will also cause the WAF unauthorized domain name interception to fail', restoreHelper: 'Are you sure to restore using this backup?', websiteDeploymentHelper: 'Create a website using an application deployed from 1Panel', websiteStatictHelper: 'Create a website directory on the host', @@ -3236,7 +3236,8 @@ const message = { closeHelper: 'Cancel using custom app repository', appStoreUrlHelper: 'Only .tar.gz format is supported', postNode: 'Sync to sub-node', - postNodeHelper: 'Sub-nodes will inherit and use the above configuration by default', + postNodeHelper: + 'Sync the custom store package to tmp/customApp/apps.tar.gz in the installation directory of the sub-node', nodes: 'Nodes', selectNode: 'Select Node', selectNodeError: 'Please select a node', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index c5d48a86c..75165e645 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -2074,7 +2074,7 @@ const message = { defaultServer: 'デフォルトサイト', noDefaultServer: '設定されていません', defaultServerHelper: - 'デフォルトのサイトを設定した後、すべてのアンバウンドドメイン名とIPがデフォルトのサイト nに向けられ、悪意のある分析を効果的に防止できます', + 'デフォルトサイトを設定した後、すべての未バインドのドメイン名とIPはデフォルトサイトにリダイレクトされます\nこれにより、悪意のある解決を効果的に防ぐことができます\nただし、WAFの未承認ドメイン名の遮断が失敗することもあります', restoreHelper: 'このバックアップを使用して復元することは間違いありませんか?', websiteDeploymentHelper: 'インストールされたアプリケーションを使用するか、新しいアプリケーションを作成してWebサイトを作成します。', @@ -3049,7 +3049,8 @@ const message = { closeHelper: 'カスタムアプリリポジトリの使用をキャンセルしますか', appStoreUrlHelper: '.tar.gz形式のみサポートされます', postNode: 'サブノードへ同期', - postNodeHelper: 'サブノードはデフォルトで上記の設定を継承して使用します', + postNodeHelper: + 'カスタムストアパッケージを子ノードのインストールディレクトリの tmp/customApp/apps.tar.gz に同期します', nodes: 'ノードを選択', selectNode: 'ノードを選択', selectNodeError: 'ノードを選択してください', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 047c6eea1..6b167cebd 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -2041,7 +2041,7 @@ const message = { defaultServer: '기본 사이트', noDefaultServer: '설정되지 않음', defaultServerHelper: - '기본 사이트를 설정하면 모든 미연결 도메인 이름 및 IP가 기본 사이트로 연결됩니다.\n이를 통해 악의적인 분석을 효과적으로 방지할 수 있습니다.', + '기본 사이트를 설정한 후, 바인딩되지 않은 모든 도메인 이름과 IP는 기본 사이트로 리디렉션됩니다\n이는 악의적인 해석을 효과적으로 방지할 수 있습니다\n하지만 WAF의 무단 도메인 차단이 실패할 수도 있습니다', restoreHelper: '이 백업을 사용하여 복원하시겠습니까?', websiteDeploymentHelper: '설치된 애플리케이션을 사용하거나 새 애플리케이션을 생성하여 웹사이트를 만드세요.', websiteStatictHelper: '호스트에 웹사이트 디렉터리를 생성합니다.', @@ -2998,7 +2998,8 @@ const message = { closeHelper: '사용자 정의 앱 저장소 사용 취소', appStoreUrlHelper: '.tar.gz 형식만 지원합니다', postNode: '서브 노드로 동기화', - postNodeHelper: '서브 노드는 기본적으로 위 설정을 상속하고 사용합니다', + postNodeHelper: + '사용자 정의 스토어 패키지를 하위 노드의 설치 디렉토리에 있는 tmp/customApp/apps.tar.gz로 동기화합니다', nodes: '노드 선택', selectNode: '노드 선택', selectNodeError: '노드를 선택하세요', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 70e90624e..cc7d74486 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -2129,7 +2129,7 @@ const message = { defaultServer: 'Tapak lalai', noDefaultServer: 'Tidak ditetapkan', defaultServerHelper: - 'Selepas menetapkan tapak lalai, semua nama domain dan IP yang tidak terikat akan diarahkan ke tapak lalai\n yang boleh mencegah analisis berniat jahat dengan berkesan', + 'Setelah menetapkan laman lalai, semua nama domain dan IP yang tidak terikat akan diarahkan ke laman lalai\nIni dapat mencegah penyelesaian yang jahat secara berkesan\nNamun, ini juga boleh menyebabkan kegagalan penghalang nama domain tanpa kebenaran WAF', restoreHelper: 'Adakah anda pasti mahu memulihkan menggunakan sandaran ini?', websiteDeploymentHelper: 'Gunakan aplikasi yang dipasang atau buat aplikasi baharu untuk mencipta laman web.', websiteStatictHelper: 'Cipta direktori laman web pada hos.', @@ -3121,7 +3121,8 @@ const message = { closeHelper: 'Batalkan penggunaan repositori aplikasi khusus', appStoreUrlHelper: 'Hanya format .tar.gz disokong', postNode: 'Segerakkan ke sub-node', - postNodeHelper: 'Sub-node akan mewarisi dan menggunakan konfigurasi di atas secara lalai', + postNodeHelper: + 'Segerakan pakej kedai tersuai ke tmp/customApp/apps.tar.gz dalam direktori pemasangan nod anak', nodes: 'Pilih Node', selectNode: 'Pilih Node', selectNodeError: 'Sila pilih node', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 6bda32961..84345b544 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -2119,7 +2119,7 @@ const message = { defaultServer: 'Site padrão', noDefaultServer: 'Não definido', defaultServerHelper: - 'Após definir o site padrão, todos os domínios e IPs não vinculados serão redirecionados para o site padrão\n o que pode prevenir efetivamente análises maliciosas', + 'Após definir o site padrão, todos os nomes de domínio e IPs desvinculados serão redirecionados para o site padrão\nIsso pode evitar eficazmente a resolução maliciosa\nNo entanto, isso também pode causar falha na interceptação de nomes de domínio não autorizados pelo WAF', restoreHelper: 'Tem certeza de que deseja restaurar com este backup?', websiteDeploymentHelper: 'Use um aplicativo instalado ou crie um novo aplicativo para criar um site.', websiteStatictHelper: 'Crie um diretório de site no host.', @@ -3123,7 +3123,8 @@ const message = { closeHelper: 'Cancelar o uso do repositório de aplicativos personalizados', appStoreUrlHelper: 'Apenas formato .tar.gz é suportado', postNode: 'Sincronizar para subnó', - postNodeHelper: 'Subnós herdarão e usarão a configuração acima por padrão', + postNodeHelper: + 'Sincronize o pacote da loja personalizada para tmp/customApp/apps.tar.gz no diretório de instalação do sub-nó', nodes: 'Selecionar Nós', selectNode: 'Selecionar Node', selectNodeError: 'Por favor, selecione um nó', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index be41ac69e..00d9a6bf6 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -2123,7 +2123,7 @@ const message = { defaultServer: 'Сайт по умолчанию', noDefaultServer: 'Не установлен', defaultServerHelper: - 'После установки сайта по умолчанию все непривязанные доменные имена и IP будут направлены на сайт по умолчанию\n что может эффективно предотвратить злонамеренный анализ', + 'После установки сайта по умолчанию все несвязанные доменные имена и IP-адреса будут перенаправлены на сайт по умолчанию\nЭто может эффективно предотвратить вредоносное разрешение\nОднако это также может привести к сбою блокировки неавторизованных доменных имен WAF', restoreHelper: 'Вы уверены, что хотите восстановить из этой резервной копии?', websiteDeploymentHelper: 'Используйте установленное приложение или создайте новое приложение для создания веб-сайта.', @@ -3113,7 +3113,8 @@ const message = { closeHelper: 'Отменить использование пользовательского хранилища приложений', appStoreUrlHelper: 'Поддерживается только формат .tar.gz', postNode: 'Синхронизировать с подузлом', - postNodeHelper: 'Подузлы будут наследовать и использовать указанную конфигурацию по умолчанию', + postNodeHelper: + 'Синхронизируйте пользовательский пакет магазина с tmp/customApp/apps.tar.gz в каталоге установки дочернего узла', nodes: 'Выбрать узлы', selectNode: 'Выбрать узел', selectNodeError: 'Пожалуйста, выберите узел', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index 38a7500e8..9e8df9a6f 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -2051,7 +2051,8 @@ const message = { noLog: '當前沒有日誌...', defaultServer: '默認站點', noDefaultServer: '未設置', - defaultServerHelper: '設置默認站點後,所有未綁定的域名和IP都被定向到默認站點\n可有效防止惡意解析', + defaultServerHelper: + '設置默認站點後,所有未綁定的域名和IP都被定向到默認站點\n可有效防止惡意解析\n但同時會導致 WAF 未授權域名攔截失敗', websiteDeploymentHelper: '使用從 1Panel 部署的應用創建網站', websiteStatictHelper: '在主機上創建網站目錄', websiteProxyHelper: @@ -2997,7 +2998,7 @@ const message = { closeHelper: '是否取消使用自訂應用倉庫', appStoreUrlHelper: '僅支援 .tar.gz 格式', postNode: '同步至子節點', - postNodeHelper: '子節點預設繼承並使用上述配置', + postNodeHelper: '把自訂商店包同步至子節點的安裝目錄下的 tmp/customApp/apps.tar.gz 中', nodes: '節點', selectNode: '選擇節點', selectNodeError: '請選擇節點', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 0360c302f..babe202cc 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -2041,7 +2041,8 @@ const message = { noLog: '当前没有日志...', defaultServer: '默认站点', noDefaultServer: '未设置', - defaultServerHelper: '设置默认站点后,所有未绑定的域名和IP都被定向到默认站点\n可有效防止恶意解析', + defaultServerHelper: + '设置默认站点后,所有未绑定的域名和IP都被定向到默认站点\n可有效防止恶意解析\n但同时会导致 WAF 未授权域名拦截失败', websiteDeploymentHelper: '使用从 1Panel 部署的应用创建网站', websiteStatictHelper: '在主机上创建网站目录', websiteProxyHelper: @@ -2978,7 +2979,7 @@ const message = { closeHelper: '是否取消使用自定义应用仓库', appStoreUrlHelper: '仅支持 .tar.gz 格式', postNode: '同步至子节点', - postNodeHelper: '子节点默认继承并使用上述配置', + postNodeHelper: '把自定义商店包同步至子节点的安装目录下的 tmp/customApp/apps.tar.gz 中', nodes: '节点', selectNode: '选择节点', selectNodeError: '请选择节点', diff --git a/frontend/src/views/website/website/config/basic/index.vue b/frontend/src/views/website/website/config/basic/index.vue index 3858e897c..c2069e796 100644 --- a/frontend/src/views/website/website/config/basic/index.vue +++ b/frontend/src/views/website/website/config/basic/index.vue @@ -106,10 +106,10 @@ const handleScroll = (event: WheelEvent) => { if (!tabContainer) return; const target = event.target as HTMLElement; - const isInsideTabPane = target.closest('.el-tab-pane'); - if (isInsideTabPane) { + if (!target.classList.contains('el-tabs__item')) { return; } + event.preventDefault(); tabContainer.scrollTop += event.deltaY; };