从 nginx 唤醒另一台服务器并将请求重定向到该服务器

从 nginx 唤醒另一台服务器并将请求重定向到该服务器

我有一台服务器 (srv1),它接收对“test.srv1”的所有请求。
我希望 srv1 能够在必要时唤醒另一台服务器 (srv2),然后将请求重定向到 srv2。
我曾考虑配置 nginx 来执行此操作,但如果有人有更好的主意就好了。

server {

    server_name test.srv1;

    location / {
        if (!-e $is_srv2_on) {
            # execute wol command
            echo_sleep 2;  # wait 2 seconds
        }

        return 301 $scheme://test.srv2;
    }
}

我不知道如何执行 bash 命令。我查看了 njs 模块,但没有成功。

答案1

正如 Michael Hampton 所提到的,让另一台服务器保持运行会更加可靠。WOL 充其量也是一种挑剔的野兽。话虽如此,如果您决心执行这个想法,这里有一个解决方案。

Vanilla NGINX 无法完成您想要执行的操作,但是,如果您使用 Openresty fork,那么这很简单:

location / {
  rewrite_by_lua_block {
    os.execute("wakeonlan MAC-Address-Here")
    ngx.sleep(2)
  } 
  return 301 $scheme://test.srv2;
}

相关内容