Как создать пользовательский шаблон nginx для указанного домена c в Plesk? - PullRequest
0 голосов
/ 21 февраля 2020

Я знаю, что plesk позволяет нам создавать собственные шаблоны Nginx и Apache в папке /usr/local/psa/admin/conf/templates/custom, но Plesk не дает никакой возможности указать пользовательский шаблон для домена.

https://talk.plesk.com/threads/nginx-vhost-template-for-a-specific-domain.342876/

У меня есть приложение nodeJs, работающее через порт 3001 и веб-сокеты, работающее через порт 3002, поэтому мне нужно настроить указанный c обратный прокси-сервер для этих двух случаев.

Если домен a.domain.com, мне нужен трафик переадресации прокси c на порт 3001. Если домен b.domain.com, мне нужен трафик переадресации прокси c на порт 3002.

Все остальное, общее поведение для apache портов.

Есть какой-либо способ сделать это?

1 Ответ

0 голосов
/ 21 февраля 2020

Я решил этот случай, добавив несколько фрагментов логики c в пользовательский шаблон plesk.

Сначала создайте новую папку custom в / usr / local / psa / admin / conf / templates /

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
...