如何在Plesk上为特定域创建nginx自定义模板?

如何在Plesk上为特定域创建nginx自定义模板?,nginx,reverse-proxy,plesk,Nginx,Reverse Proxy,Plesk,我知道plesk允许我们在文件夹/usr/local/psa/admin/conf/templates/custom下创建自定义Nginx和Apache模板,但plesk没有提供任何选项来指定每个域的自定义模板 我有一个nodeJs应用程序在端口3001上运行,WebSocket在端口3002上运行,所以我需要为这两种情况配置一个特定的反向代理 如果域是a.domain.com,我需要代理将流量转发到3001端口。 如果域是b.domain.com,我需要代理将流量转发到3002端口 除此之外

我知道plesk允许我们在文件夹
/usr/local/psa/admin/conf/templates/custom
下创建自定义Nginx和Apache模板,但plesk没有提供任何选项来指定每个域的自定义模板

我有一个nodeJs应用程序在端口3001上运行,WebSocket在端口3002上运行,所以我需要为这两种情况配置一个特定的反向代理

如果域是a.domain.com,我需要代理将流量转发到3001端口。 如果域是b.domain.com,我需要代理将流量转发到3002端口

除此之外,apache端口的常见行为


有没有办法做到这一点?

我解决了这个问题,在plesk自定义模板上添加了一些逻辑

首先,在/usr/local/psa/admin/conf/templates上创建一个新文件夹custom/

mkdir-p/usr/local/psa/admin/conf/templates/custom/domain/service/

然后,使用以下代码创建一个文件:

vim/usr/local/psa/admin/conf/templates/custom/domain/service/proxy.php

<?php
/**
 * @var Template_VariableAccessor $VAR
 * @var array $OPT
 */
?>
<?php
$port = $OPT['backendPort'];
if($VAR->domain->asciiName == 'a.domain.com') {
        $port =  '3001';
}
else if ($VAR->domain->asciiName == 'b.domain.com') {
        $port = '3002';
}
?>

<?php if ($OPT['ssl'] && ($port == 3002 || $port == 3001)): ?>
        proxy_pass http://<?php echo $OPT['ipAddress']->proxyEscapedAddress . ':' . $port ?>;
<?php elseif ($OPT['ssl'] && ($port != 3002 && $port != 3001)): ?>
        proxy_pass https://<?php echo $OPT['ipAddress']->proxyEscapedAddress . ':' . $port ?>;
<?php else: ?>
        proxy_pass http://<?php echo $OPT['ipAddress']->proxyEscapedAddress . ':' . $port ?>;
<?php endif ?>
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
<?php if (empty($OPT['nginxTransparentMode']) && !$VAR->domain->physicalHosting->proxySettings['nginxTransparentMode'] && !$VAR->domain->physicalHosting->proxySettings['nginxServeStatic']): ?>
        proxy_set_header X-Accel-Internal /internal-nginx-static-location;
<?php endif ?>
        access_log off;

<?php if ($OPT['nginxCacheEnabled'] ?? true): ?>
    <?=$VAR->includeTemplate('domain/service/nginxCacheProxy.php', $OPT)?>
<?php endif ?>
/usr/local/psa/admin/bin/httpdmng --reconfigure-domain a.domain.com
/usr/local/psa/admin/bin/httpdmng --reconfigure-domain b.domain.com