gpt4 book ai didi

include - 可以在 nginx 的上游 block 中使用 "include"指令吗?

转载 作者:行者123 更新时间:2023-12-04 03:09:52 24 4
gpt4 key购买 nike

我的站点使用两个应用服务器,即 app1 和 app2,所以在配置中我有这样的内容:

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

由于每次更新代码时都需要重新启动两个服务器进程并且希望服务不受干扰,因此我将手动执行以下步骤:
  • 评论 app1在上游 block 内,以便将其修改为:
    upstream cluster {
    #server app1:8080;
    server app2:8080;
    }
  • 运行nginx -s reload
  • 更新代码 app1并重新启动服务器程序,然后取消注释 app1在上游区 block
  • app2 执行步骤 1-3

  • 我想写一个脚本来省去这项繁琐的工作,所以我希望做的是:
  • 有一个名为“available”的文件夹,其中包含app1.confapp2.conf形式为
    server app1:8080;  
  • 拥有另一个名为“enabled”的文件夹以包含 app1.conf 的软链接(soft link)和 app2.conf
  • 将上游集群修改为
    upstream cluster {
    include /usr/local/nginx/conf/enabled/*;
    }

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

  • 但是这种方法效果不佳,因为我从 nginx 收到一条错误消息:

    [emerg]: "include" directive is not allowed here in ....



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

    最佳答案

    不幸的是,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="$SERVERS\n\tserver $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

    关于include - 可以在 nginx 的上游 block 中使用 "include"指令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4165116/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com