diff --git a/agent/app/service/website_utils.go b/agent/app/service/website_utils.go index 41edbc73236c..6e214ff28104 100644 --- a/agent/app/service/website_utils.go +++ b/agent/app/service/website_utils.go @@ -1107,7 +1107,7 @@ func getWebsiteDomains(domains []request.WebsiteDomain, defaultHTTPPort, default if domain.Domain == "" { continue } - if !common.IsValidDomain(domain.Domain) { + if !common.IsValidNginxServerName(domain.Domain) { err = buserr.WithName("ErrDomainFormat", domain.Domain) return } diff --git a/agent/utils/common/common.go b/agent/utils/common/common.go index 0fab2a42f906..749d5504a4df 100644 --- a/agent/utils/common/common.go +++ b/agent/utils/common/common.go @@ -306,6 +306,10 @@ func IsValidDomain(domain string) bool { return re.GetRegex(re.DomainPattern).MatchString(domain) } +func IsValidNginxServerName(serverName string) bool { + return re.GetRegex(re.NginxServerNamePattern).MatchString(serverName) +} + func ContainsChinese(text string) bool { for _, char := range text { if unicode.Is(unicode.Han, char) { diff --git a/agent/utils/re/re.go b/agent/utils/re/re.go index 8519d0cfc6ed..84239ce37c89 100644 --- a/agent/utils/re/re.go +++ b/agent/utils/re/re.go @@ -14,6 +14,7 @@ const ( ValidatorNamePattern = `^[a-zA-Z\p{Han}]{1}[a-zA-Z0-9_\p{Han}]{0,30}$` ValidatorIPPattern = `^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$` DomainPattern = `^([\w\p{Han}\-\*]{1,100}\.){1,10}([\w\p{Han}\-]{1,24}|[\w\p{Han}\-]{1,24}\.[\w\p{Han}\-]{1,24})(:\d{1,5})?$` + NginxServerNamePattern = `^(?:\*|[\w\p{Han}-]{1,63})(?:\.(?:\*|[\w\p{Han}-]{1,63}))*$` ProxyCacheZonePattern = `keys_zone=proxy_cache_zone_of_[\w.]+:(\d+)([kmgt]?)` ProxyCacheMaxSizePattern = `max_size=([0-9.]+)([kmgt]?)` ProxyCacheMaxSizeValidationPattern = `max_size=\d+(\.\d+)?[kmgt]?` @@ -44,6 +45,7 @@ func Init() { ValidatorNamePattern, ValidatorIPPattern, DomainPattern, + NginxServerNamePattern, ProxyCacheZonePattern, ProxyCacheMaxSizePattern, ProxyCacheMaxSizeValidationPattern, diff --git a/frontend/src/global/mimetype.ts b/frontend/src/global/mimetype.ts index 40391478f74d..be8acde88238 100644 --- a/frontend/src/global/mimetype.ts +++ b/frontend/src/global/mimetype.ts @@ -458,14 +458,14 @@ export const getWebsiteTypes = () => [ label: i18n.global.t('runtime.runtime'), value: 'runtime', }, - { - label: i18n.global.t('website.proxy'), - value: 'proxy', - }, { label: i18n.global.t('website.static'), value: 'static', }, + { + label: i18n.global.t('website.proxy'), + value: 'proxy', + }, { label: i18n.global.t('website.subsite'), value: 'subsite', diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index b934867df2e1..15a430faa9a6 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -2639,6 +2639,10 @@ const message = { createDb: 'Create Database', enableSSLHelper: 'Failure to enable will not affect the creation of the website', batchAdd: 'Batch Add Domains', + batchInput: 'Batch Input', + domainNotFQDN: 'This domain may not be accessible on the public network', + domainInvalid: 'Invalid domain format', + domainBatchHelper: 'One domain per line, format: domain:port@ssl\nExample: example.com:443@ssl or example.com', generateDomain: 'Generate', global: 'Global', subsite: 'Subsite', diff --git a/frontend/src/lang/modules/es-es.ts b/frontend/src/lang/modules/es-es.ts index c0e78c33db25..721c3371d056 100644 --- a/frontend/src/lang/modules/es-es.ts +++ b/frontend/src/lang/modules/es-es.ts @@ -2631,6 +2631,11 @@ const message = { createDb: 'Crear base de datos', enableSSLHelper: 'Si falla, no afectará la creación del sitio', batchAdd: 'Añadir múltiples dominios', + batchInput: 'Entrada por Lotes', + domainNotFQDN: 'Este dominio puede no ser accesible en la red pública', + domainInvalid: 'Formato de dominio inválido', + domainBatchHelper: + 'Un dominio por línea, formato: dominio:puerto@ssl\nEjemplo: example.com:443@ssl o example.com', generateDomain: 'Generar', global: 'Global', subsite: 'Subsitio', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index a7576ad8928e..68e79e2382f6 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -2560,6 +2560,10 @@ const message = { createDb: 'データベースを作成', enableSSLHelper: 'SSLの有効化に失敗しても、ウェブサイトの作成には影響しません。', batchAdd: 'ドメインを一括追加', + batchInput: 'バッチ入力', + domainNotFQDN: 'このドメインはパブリックネットワークからアクセスできない可能性があります', + domainInvalid: 'ドメイン形式が正しくありません', + domainBatchHelper: '1行に1ドメイン、形式: domain:port@ssl\n例: example.com:443@ssl または example.com', generateDomain: '生成', global: 'グローバル', subsite: 'サブサイト', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 75e84b97dca2..3705bc7ea71e 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -2515,6 +2515,10 @@ const message = { createDb: '데이터베이스 생성', enableSSLHelper: 'SSL 활성화 실패는 웹사이트 생성에 영향을 미치지 않습니다.', batchAdd: '도메인 일괄 추가', + batchInput: '일괄 입력', + domainNotFQDN: '이 도메인은 공용 네트워크에서 액세스할 수 없을 수 있습니다', + domainInvalid: '도메인 형식이 올바르지 않습니다', + domainBatchHelper: '한 줄에 하나의 도메인, 형식: domain:port@ssl\n예: example.com:443@ssl 또는 example.com', generateDomain: '생성', global: '글로벌', subsite: '하위 사이트', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 0b38ac44260e..8f003756df66 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -2616,6 +2616,11 @@ const message = { createDb: 'Cipta Pangkalan Data', enableSSLHelper: 'Kegagalan mengaktifkan SSL tidak akan menjejaskan penciptaan laman web.', batchAdd: 'Tambah Domain Secara Batch', + batchInput: 'Input Kelompok', + domainNotFQDN: 'Domain ini mungkin tidak boleh diakses di rangkaian awam', + domainInvalid: 'Format domain tidak sah', + domainBatchHelper: + 'Satu domain per baris, format: domain:port@ssl\nContoh: example.com:443@ssl atau example.com', generateDomain: 'Hasilkan', global: 'Global', subsite: 'Sublaman', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index dcd853892613..efa5ff34564e 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -2621,6 +2621,11 @@ const message = { createDb: 'Criar Banco de Dados', enableSSLHelper: 'A falha ao ativar o SSL não afetará a criação do site.', batchAdd: 'Adicionar Domínios em Lote', + batchInput: 'Entrada em Lote', + domainNotFQDN: 'Este domínio pode não estar acessível na rede pública', + domainInvalid: 'Formato de domínio inválido', + domainBatchHelper: + 'Um domínio por linha, formato: domínio:porta@ssl\nExemplo: example.com:443@ssl ou example.com', generateDomain: 'Gerar', global: 'Global', subsite: 'Subsite', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index d9faa6aedd58..af102c7b91c0 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -2616,6 +2616,10 @@ const message = { rcreateDb: 'Создать Базу Данных', enableSSLHelper: 'Неудача при включении SSL не повлияет на создание сайта.', batchAdd: 'Пакетное Добавление Доменов', + batchInput: 'Пакетный ввод', + domainNotFQDN: 'Этот домен может быть недоступен в публичной сети', + domainInvalid: 'Неверный формат домена', + domainBatchHelper: 'Один домен на строку, формат: domain:port@ssl\nПример: example.com:443@ssl или example.com', generateDomain: 'Сгенерировать', global: 'Глобальный', subsite: 'Подсайт', diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts index b6ca141dca26..bd1c69e080f1 100644 --- a/frontend/src/lang/modules/tr.ts +++ b/frontend/src/lang/modules/tr.ts @@ -2674,6 +2674,11 @@ const message = { createDb: 'Veritabanı Oluştur', enableSSLHelper: 'Etkinleştirme başarısızlığı web sitesinin oluşturulmasını etkilemez', batchAdd: 'Toplu Alan Adı Ekle', + batchInput: 'Toplu Giriş', + domainNotFQDN: 'Bu alan adı genel ağda erişilebilir olmayabilir', + domainInvalid: 'Geçersiz alan adı biçimi', + domainBatchHelper: + 'Bir satırda bir alan adı, format: domain:port@ssl\nÖrnek: example.com:443@ssl veya example.com', generateDomain: 'Oluştur', global: 'Küresel', subsite: 'Alt site', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index cc88f6ce2262..dff04accbf61 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -2453,6 +2453,10 @@ const message = { createDb: '建立資料庫', enableSSLHelper: '開啟失敗不會影響網站建立', batchAdd: '批次新增域名', + batchInput: '批次輸入', + domainNotFQDN: '此域名可能無法在公網訪問', + domainInvalid: '域名格式不正確', + domainBatchHelper: '一行一個域名,格式:域名:端口@ssl\n範例:example.com:443@ssl 或 example.com', generateDomain: '生成', global: '全域', subsite: '子網站', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 01377e8dfad6..b520471ec0de 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -2451,6 +2451,10 @@ const message = { createDb: '创建数据库', enableSSLHelper: '开启失败不会影响网站创建', batchAdd: '批量添加域名', + batchInput: '批量编辑', + domainNotFQDN: '该域名可能无法在公网访问', + domainInvalid: '域名格式不正确', + domainBatchHelper: '一行一个域名,格式:域名:端口\n示例:example.com', generateDomain: '生成', global: '全局', subsite: '子网站', diff --git a/frontend/src/views/website/website/create/index.vue b/frontend/src/views/website/website/create/index.vue index 2c74cd1f2b7a..ca26816fc1e3 100644 --- a/frontend/src/views/website/website/create/index.vue +++ b/frontend/src/views/website/website/create/index.vue @@ -1,21 +1,5 @@