diff --git a/backend/app/dto/request/website.go b/backend/app/dto/request/website.go
index aac5baca1..4dbe8cc65 100644
--- a/backend/app/dto/request/website.go
+++ b/backend/app/dto/request/website.go
@@ -175,21 +175,22 @@ type WebsiteUpdateDirPermission struct {
}
type WebsiteProxyConfig struct {
- ID uint `json:"id" validate:"required"`
- Operate string `json:"operate" validate:"required"`
- Enable bool `json:"enable" `
- Cache bool `json:"cache" `
- CacheTime int `json:"cacheTime" `
- CacheUnit string `json:"cacheUnit"`
- Name string `json:"name" validate:"required"`
- Modifier string `json:"modifier"`
- Match string `json:"match" validate:"required"`
- ProxyPass string `json:"proxyPass" validate:"required"`
- ProxyHost string `json:"proxyHost" validate:"required"`
- Content string `json:"content"`
- FilePath string `json:"filePath"`
- Replaces map[string]string `json:"replaces"`
- SNI bool `json:"sni"`
+ ID uint `json:"id" validate:"required"`
+ Operate string `json:"operate" validate:"required"`
+ Enable bool `json:"enable" `
+ Cache bool `json:"cache" `
+ CacheTime int `json:"cacheTime" `
+ CacheUnit string `json:"cacheUnit"`
+ Name string `json:"name" validate:"required"`
+ Modifier string `json:"modifier"`
+ Match string `json:"match" validate:"required"`
+ ProxyPass string `json:"proxyPass" validate:"required"`
+ ProxyHost string `json:"proxyHost" validate:"required"`
+ Content string `json:"content"`
+ FilePath string `json:"filePath"`
+ Replaces map[string]string `json:"replaces"`
+ SNI bool `json:"sni"`
+ ProxySSLName string `json:"proxySSLName"`
}
type WebsiteProxyReq struct {
diff --git a/backend/app/service/website.go b/backend/app/service/website.go
index a33c924ff..8c1466055 100644
--- a/backend/app/service/website.go
+++ b/backend/app/service/website.go
@@ -1667,6 +1667,9 @@ func (w WebsiteService) OperateProxy(req request.WebsiteProxyConfig) (err error)
}
if req.SNI {
location.UpdateDirective("proxy_ssl_server_name", []string{"on"})
+ if req.ProxySSLName != "" {
+ location.UpdateDirective("proxy_ssl_name", []string{req.ProxySSLName})
+ }
} else {
location.UpdateDirective("proxy_ssl_server_name", []string{"off"})
}
@@ -1749,6 +1752,9 @@ func (w WebsiteService) GetProxies(id uint) (res []request.WebsiteProxyConfig, e
if directive.GetName() == "proxy_ssl_server_name" {
proxyConfig.SNI = directive.GetParameters()[0] == "on"
}
+ if directive.GetName() == "proxy_ssl_name" {
+ proxyConfig.ProxySSLName = directive.GetParameters()[0]
+ }
}
res = append(res, proxyConfig)
}
diff --git a/cmd/server/nginx_conf/proxy.conf b/cmd/server/nginx_conf/proxy.conf
index d939c3181..ce1203d24 100644
--- a/cmd/server/nginx_conf/proxy.conf
+++ b/cmd/server/nginx_conf/proxy.conf
@@ -11,4 +11,5 @@ location ^~ /test {
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
proxy_ssl_server_name off;
+ proxy_ssl_name $proxy_host;
}
diff --git a/frontend/src/api/interface/website.ts b/frontend/src/api/interface/website.ts
index a7d7170b7..1864971cb 100644
--- a/frontend/src/api/interface/website.ts
+++ b/frontend/src/api/interface/website.ts
@@ -373,6 +373,8 @@ export namespace Website {
content?: string;
proxyAddress?: string;
proxyProtocol?: string;
+ sni: boolean;
+ proxySSLName: string;
}
export interface ProxReplace {
diff --git a/frontend/src/views/website/website/config/basic/proxy/create/index.vue b/frontend/src/views/website/website/config/basic/proxy/create/index.vue
index 407afcdb9..ef0ce08a9 100644
--- a/frontend/src/views/website/website/config/basic/proxy/create/index.vue
+++ b/frontend/src/views/website/website/config/basic/proxy/create/index.vue
@@ -31,6 +31,9 @@
{{ $t('website.sniHelper') }}
+
+
+
@@ -47,7 +50,7 @@
-
+
({
replaces: {},
proxyAddress: '',
proxyProtocol: 'http://',
+ sni: false,
+ proxySSLName: '$proxy_host',
});
let proxy = ref(initData());
const replaces = ref([]);