2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 03:07:20 +08:00

feat: 支持apache

This commit is contained in:
2026-01-13 01:55:20 +08:00
parent 06f6610d3b
commit a236ca9db8
2 changed files with 16 additions and 20 deletions

View File

@@ -7,7 +7,6 @@ import (
"regexp"
"strconv"
"strings"
"time"
"github.com/acepanel/panel/pkg/webserver/types"
)
@@ -106,13 +105,6 @@ func parseProxyFile(filePath string) (*types.Proxy, error) {
proxy.Cache = true
}
// 解析 ProxyTimeout (resolver timeout)
timeoutPattern := regexp.MustCompile(`ProxyTimeout\s+(\d+)`)
if tm := timeoutPattern.FindStringSubmatch(contentStr); tm != nil {
timeout, _ := strconv.Atoi(tm[1])
proxy.ResolverTimeout = time.Duration(timeout) * time.Second
}
// 解析 Substitute (响应内容替换)
subPattern := regexp.MustCompile(`Substitute\s+"s/([^/]+)/([^/]*)/[gin]*"`)
subMatches := subPattern.FindAllStringSubmatch(contentStr, -1)
@@ -236,11 +228,6 @@ func generateProxyConfig(proxy types.Proxy) string {
sb.WriteString(" ProxyIOBufferSize 65536\n")
}
// Timeout 配置
if proxy.ResolverTimeout > 0 {
sb.WriteString(fmt.Sprintf(" ProxyTimeout %d\n", int(proxy.ResolverTimeout.Seconds())))
}
// Cache 配置
if proxy.Cache {
sb.WriteString(" <IfModule mod_cache.c>\n")

View File

@@ -52,6 +52,7 @@ const { data: setting, send: fetchSetting } = useRequest(website.config(Number(i
})
const { data: installedEnvironment } = useRequest(home.installedEnvironment, {
initialData: {
webserver: 'nginx',
php: [
{
label: $gettext('Not used'),
@@ -66,6 +67,9 @@ const { data: installedEnvironment } = useRequest(home.installedEnvironment, {
]
}
})
// 是否为 Nginx
const isNginx = computed(() => installedEnvironment.value.webserver === 'nginx')
const certs = ref<any>([])
useRequest(cert.certs(1, 10000)).onSuccess(({ data }) => {
certs.value = data.items
@@ -97,9 +101,13 @@ const selectedCert = ref(null)
const handleSave = () => {
// 如果开启了ssl但没有任何监听地址设置了ssl则自动添加443
if (setting.value.ssl && !setting.value.listens.some((item: any) => item.args?.includes('ssl'))) {
const args = ['ssl']
if (isNginx.value) {
args.push('quic')
}
setting.value.listens.push({
address: '443',
args: ['ssl', 'quic']
args
})
}
// 如果关闭了ssl自动禁用所有ssl和quic
@@ -409,6 +417,7 @@ const updateTimeoutUnit = (proxy: any, unit: string) => {
HTTPS
</n-checkbox>
<n-checkbox
v-if="isNginx"
:checked="hasArg(value.args, 'quic')"
@update:checked="(checked) => toggleArg(value.args, 'quic', checked)"
w-200
@@ -506,14 +515,14 @@ const updateTimeoutUnit = (proxy: any, unit: string) => {
style="width: 100%"
/>
</n-form-item-gi>
<n-form-item-gi :span="12" :label="$gettext('DNS Resolver')">
<n-form-item-gi v-if="isNginx" :span="12" :label="$gettext('DNS Resolver')">
<n-dynamic-tags
v-model:value="upstream.resolver"
:placeholder="$gettext('e.g., 8.8.8.8')"
/>
</n-form-item-gi>
<n-form-item-gi
v-if="upstream.resolver?.length"
v-if="isNginx && upstream.resolver?.length"
:span="12"
:label="$gettext('Resolver Timeout')"
>
@@ -621,14 +630,14 @@ const updateTimeoutUnit = (proxy: any, unit: string) => {
</template>
<n-form label-placement="left" label-width="140px">
<n-grid :cols="24" :x-gap="16">
<n-form-item-gi :span="12" :label="$gettext('Match Type')">
<n-form-item-gi v-if="isNginx" :span="12" :label="$gettext('Match Type')">
<n-select
:value="parseLocation(proxy.location).type"
:options="locationMatchTypes"
@update:value="(v: string) => updateLocationType(proxy, v)"
/>
</n-form-item-gi>
<n-form-item-gi :span="12" :label="$gettext('Match Expression')">
<n-form-item-gi :span="isNginx ? 12 : 24" :label="$gettext('Match Expression')">
<n-input
:value="parseLocation(proxy.location).expression"
:placeholder="$gettext('e.g., /, /api, ^/api/v[0-9]+/')"
@@ -664,14 +673,14 @@ const updateTimeoutUnit = (proxy: any, unit: string) => {
<n-form-item-gi :span="6" :label="$gettext('Enable Buffering')">
<n-switch v-model:value="proxy.buffering" />
</n-form-item-gi>
<n-form-item-gi :span="12" :label="$gettext('DNS Resolver')">
<n-form-item-gi v-if="isNginx" :span="12" :label="$gettext('DNS Resolver')">
<n-dynamic-tags
v-model:value="proxy.resolver"
:placeholder="$gettext('e.g., 8.8.8.8')"
/>
</n-form-item-gi>
<n-form-item-gi
v-if="proxy.resolver.length"
v-if="isNginx && proxy.resolver.length"
:span="12"
:label="$gettext('Resolver Timeout')"
>