HTTPS: http:// перебрасывается на https://; имя сервера — с проверкой DNS; скрипты DEPO при обновлении
Порт HTTPS принимает и http://: 308 на https:// того же имени и порта (было «Client sent an HTTP request to an HTTPS server»). Доменное имя сервера сохраняется, только если оно есть в DNS и указывает на этот сервер; иначе — что добавить/исправить (запись A → IP сервера). Сообщение об успехе — с адресом https://имя:порт/ и честно про самоподписанный сертификат. Обновление bj с новыми процедурами DEPO: отпечаток установленного набора (depo_procs_applied) не совпадает со встроенным — на главной и в настройках плашка «требуются повышенные права на базу данных» с вводом логина/пароля администратора SQL (не сохраняются) и «Применить скрипты». Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -398,6 +398,32 @@ func registerHostname(mux *http.ServeMux, rc *RuntimeConfig) {
|
||||
names = append(names, f)
|
||||
}
|
||||
names = uniqStrings(names)
|
||||
// имя должно быть в DNS и указывать на этот сервер — иначе браузер всё равно не откроет bj по нему
|
||||
mine := map[string]bool{}
|
||||
for _, ip := range serverIPs() {
|
||||
mine[ip] = true
|
||||
}
|
||||
var resolved []string
|
||||
for _, n := range names {
|
||||
ctx, cancel := context.WithTimeout(r.Context(), 4*time.Second)
|
||||
addrs, err := net.DefaultResolver.LookupHost(ctx, n)
|
||||
cancel()
|
||||
if err != nil || len(addrs) == 0 {
|
||||
setupFlash(w, r, "Имя «"+n+"» не найдено в DNS. Попросите администратора сети добавить на DNS-сервере (контроллере домена) запись A: "+
|
||||
n+" → "+strings.Join(serverIPs(), " или ")+" — и нажмите «Сохранить» ещё раз.")
|
||||
return
|
||||
}
|
||||
ok := false
|
||||
for _, a := range addrs {
|
||||
ok = ok || mine[a]
|
||||
}
|
||||
if !ok && len(mine) > 0 {
|
||||
setupFlash(w, r, "Имя «"+n+"» в DNS указывает на "+strings.Join(addrs, ", ")+", а у сервера bj адрес "+strings.Join(serverIPs(), ", ")+
|
||||
". Исправьте запись A на DNS-сервере и нажмите «Сохранить» ещё раз.")
|
||||
return
|
||||
}
|
||||
resolved = append(resolved, n+" → "+strings.Join(addrs, ", "))
|
||||
}
|
||||
h := rc.Snapshot().HTTPS
|
||||
h.Hostnames = names
|
||||
if err := rc.UpdateHTTPS(h); err != nil {
|
||||
@@ -416,7 +442,8 @@ func registerHostname(mux *http.ServeMux, rc *RuntimeConfig) {
|
||||
setupFlash(w, r, "Доменные имена убраны. Сертификат перевыпущен на имя хоста и IP.")
|
||||
return
|
||||
}
|
||||
setupFlash(w, r, "Готово: "+strings.Join(names, ", ")+" вписаны в сертификат. Теперь на вашем DNS "+
|
||||
"(контроллере домена) направьте эти имена на сервер bj — и интерфейс откроется по ним без предупреждения браузера.")
|
||||
setupFlash(w, r, "Готово: "+strings.Join(resolved, "; ")+" — имя есть в DNS и вписано в сертификат. Адрес bj: https://"+names[0]+":"+
|
||||
strconv.Itoa(h.port())+"/ (http:// перебросит на https:// сам). Сертификат самоподписанный — браузер один раз попросит подтвердить исключение; "+
|
||||
"без предупреждения — после загрузки сертификата организации («Сертификат организации» ниже).")
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user