Browse Source

feat: 反代回源 SNI 支持设置 proxy_ssl_name (#6659)

Refs https://github.com/1Panel-dev/1Panel/issues/5960
pull/6661/head
zhengkunwang 1 month ago committed by GitHub
parent
commit
e069db3c45
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      backend/app/dto/request/website.go
  2. 6
      backend/app/service/website.go
  3. 1
      cmd/server/nginx_conf/proxy.conf
  4. 2
      frontend/src/api/interface/website.ts
  5. 8
      frontend/src/views/website/website/config/basic/proxy/create/index.vue

1
backend/app/dto/request/website.go

@ -190,6 +190,7 @@ type WebsiteProxyConfig struct {
FilePath string `json:"filePath"` FilePath string `json:"filePath"`
Replaces map[string]string `json:"replaces"` Replaces map[string]string `json:"replaces"`
SNI bool `json:"sni"` SNI bool `json:"sni"`
ProxySSLName string `json:"proxySSLName"`
} }
type WebsiteProxyReq struct { type WebsiteProxyReq struct {

6
backend/app/service/website.go

@ -1667,6 +1667,9 @@ func (w WebsiteService) OperateProxy(req request.WebsiteProxyConfig) (err error)
} }
if req.SNI { if req.SNI {
location.UpdateDirective("proxy_ssl_server_name", []string{"on"}) location.UpdateDirective("proxy_ssl_server_name", []string{"on"})
if req.ProxySSLName != "" {
location.UpdateDirective("proxy_ssl_name", []string{req.ProxySSLName})
}
} else { } else {
location.UpdateDirective("proxy_ssl_server_name", []string{"off"}) 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" { if directive.GetName() == "proxy_ssl_server_name" {
proxyConfig.SNI = directive.GetParameters()[0] == "on" proxyConfig.SNI = directive.GetParameters()[0] == "on"
} }
if directive.GetName() == "proxy_ssl_name" {
proxyConfig.ProxySSLName = directive.GetParameters()[0]
}
} }
res = append(res, proxyConfig) res = append(res, proxyConfig)
} }

1
cmd/server/nginx_conf/proxy.conf

@ -11,4 +11,5 @@ location ^~ /test {
add_header X-Cache $upstream_cache_status; add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache; add_header Cache-Control no-cache;
proxy_ssl_server_name off; proxy_ssl_server_name off;
proxy_ssl_name $proxy_host;
} }

2
frontend/src/api/interface/website.ts

@ -373,6 +373,8 @@ export namespace Website {
content?: string; content?: string;
proxyAddress?: string; proxyAddress?: string;
proxyProtocol?: string; proxyProtocol?: string;
sni: boolean;
proxySSLName: string;
} }
export interface ProxReplace { export interface ProxReplace {

8
frontend/src/views/website/website/config/basic/proxy/create/index.vue

@ -31,6 +31,9 @@
<el-switch v-model="proxy.sni"></el-switch> <el-switch v-model="proxy.sni"></el-switch>
<span class="input-help">{{ $t('website.sniHelper') }}</span> <span class="input-help">{{ $t('website.sniHelper') }}</span>
</el-form-item> </el-form-item>
<el-form-item label="proxy_ssl_name" prop="proxySSLName" v-if="proxy.sni">
<el-input v-model.trim="proxy.proxySSLName"></el-input>
</el-form-item>
<el-form-item :label="$t('website.cacheTime')" prop="cacheTime" v-if="proxy.cache"> <el-form-item :label="$t('website.cacheTime')" prop="cacheTime" v-if="proxy.cache">
<el-input v-model.number="proxy.cacheTime" maxlength="15"> <el-input v-model.number="proxy.cacheTime" maxlength="15">
<template #append> <template #append>
@ -47,7 +50,7 @@
</el-form-item> </el-form-item>
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('website.proxyPass')" prop="proxyPass"> <el-form-item :label="$t('website.proxyPass')" prop="proxyAddress">
<el-input <el-input
v-model.trim="proxy.proxyAddress" v-model.trim="proxy.proxyAddress"
:placeholder="$t('website.proxyHelper')" :placeholder="$t('website.proxyHelper')"
@ -139,6 +142,7 @@ const rules = ref({
cacheTime: [Rules.requiredInput, checkNumberRange(1, 65535)], cacheTime: [Rules.requiredInput, checkNumberRange(1, 65535)],
proxyPass: [Rules.requiredInput], proxyPass: [Rules.requiredInput],
proxyHost: [Rules.requiredInput], proxyHost: [Rules.requiredInput],
proxyAddress: [Rules.requiredInput],
}); });
const open = ref(false); const open = ref(false);
const loading = ref(false); const loading = ref(false);
@ -159,6 +163,8 @@ const initData = (): Website.ProxyConfig => ({
replaces: {}, replaces: {},
proxyAddress: '', proxyAddress: '',
proxyProtocol: 'http://', proxyProtocol: 'http://',
sni: false,
proxySSLName: '$proxy_host',
}); });
let proxy = ref(initData()); let proxy = ref(initData());
const replaces = ref<any>([]); const replaces = ref<any>([]);

Loading…
Cancel
Save