加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

可以在nginx的上游块中使用“include”指令吗?

发布时间:2020-12-13 21:06:39 所属栏目:Nginx 来源:网络整理
导读:我的网站使用两个app服务器,即app1和app2,所以在配置中我有这样的东西: upstream cluster { server app1:8080; server app2:8080;} 由于每次更新代码时我都需要重启两个服务器进程,并且我希望服务不受干扰,我将手动执行以下步骤: 在上游块中注释app1,以便

我的网站使用两个app服务器,即app1和app2,所以在配置中我有这样的东西:

upstream cluster {
    server app1:8080;
    server app2:8080;
}

由于每次更新代码时我都需要重启两个服务器进程,并且我希望服务不受干扰,我将手动执行以下步骤:

>在上游块中注释app1,以便将其修改为:

upstream cluster {
    #server app1:8080;
    server app2:8080;
}

>运行nginx -s reload
>更新app1处的代码并重新启动服务器程序,然后取消注释上游块中的app1
>为app2执行步骤1-3

我希望写一个脚本来完成这项繁琐的工作,所以我希望这样做:

>有一个名为“available”的文件夹,其中包含app1.conf和app2.conf格式为

server app1:8080;  

>让另一个名为“enabled”的文件夹包含app1.conf和app2.conf的软链接
>将上游群集修改为

upstream cluster {
    include /usr/local/nginx/conf/enabled/*;
}

因此,每次我需要禁用任何应用服务器时,我只需从“启用”文件夹中删除相应的软链接,稍后可以通过运行ln -s来恢复它

但是这种方法效果不好,因为我收到了来自nginx的错误消息:

[emerg]: “include” directive is not allowed here in ….

是这样包含不能放入上游块吗?而且我想我在这种情况下并不孤单,有时禁用和启用服务器,其他人通常如何处理它?

最佳答案
不幸的是,nginx无法在上游内部处理include指令.
但您可以使用此脚本来管理上游服务器:

在nginx.conf的http部分的某个地方:

include /usr/local/nginx/conf/upstream.conf

创建空文件:

touch /usr/local/nginx/conf/upstream.conf

使用此脚本来管理上游服务器(upstreamctl.sh):

#!/bin/bash
if [ -n "$1" -a -n "$2" ]; then
    action="$1";
    target="$2";
else
    echo "Usage: $0 (add|rm) server:port"
    exit 0;
fi;
# Path to nginx binary
BIN="/usr/local/nginx/sbin/nginx"
# Path to upstream config file
CONF="/usr/local/nginx/conf/upstream.conf"

SERVERS=`cat $CONF | grep server`

output="upstream cluster {"


if [ $action == "add" ]; then
    echo -e "$output" > $CONF
    if $( echo $SERVERS | grep --quiet $target ); then
        echo "Warning: Server is already enabled."
    else 
        SERVERS="$SERVERSntserver $target;"
    fi
    echo -e "$SERVERS" >> $CONF
    echo "}" >> $CONF

elif [ $action == "rm" ]; then 
    sed -i "/$target/d" $CONF
else 
    echo "Unknown action"
fi

# Check changes:
$BIN -t

在您的情况下,您可以运行:

./upstreamctl.sh add app1:8080

./upstreamctl.sh rm app2:8080

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读