nginx - 如何在 Plesk 上为特定域创建 nginx 自定义模板?
问题描述
我知道 plesk 允许我们在文件夹下创建自定义 Nginx 和 Apache 模板,/usr/local/psa/admin/conf/templates/custom
但 Plesk 没有提供任何选项来为每个域指定自定义模板。
https://talk.plesk.com/threads/nginx-vhost-template-for-a-specific-domain.342876/
我有一个运行在端口 3001 上的 nodeJs 应用程序和运行在端口 3002 上的 websocket,所以我需要为这两种情况配置一个特定的反向代理。
如果域是 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
推荐阅读
- c - C代码逆向工程中错误的用户名和密码
- java - 有没有办法让我在另一个类的 JList 中显示双链表类的输出?爪哇
- javascript - Vuetify - 改变卡片加载方式?
- .net - 本地化视图不从资源文件返回值
- python - 如果我要求从复制的列表中删除值,为什么会从主列表中删除值?
- javascript - 使用 Stack Navigator 添加 TabNavigator(版本:3.x)
- java - 在 Android 中获取年、月和日中两个选定日期之间的正确差异
- windows - 当程序的窗口没有响应时,如何在Message Loop中找到阻塞的Message Procedure?
- mysql - 基于两列的带有组的Mysql选择查询
- c - 如何找到行列式