动态监听Nginx端口

Kev*_*rke 1 nginx

我想将端口传递给Nginx以动态监听。所以我可以这样写:

PORT=4567 nginx -c $PWD/nginx.conf
Run Code Online (Sandbox Code Playgroud)

然后进行如下配置的nginx配置:

http {
    server {
        listen $PORT;
    }
}
Run Code Online (Sandbox Code Playgroud)

并让nginx监听指定的端口。我尝试在lua支持下编译nginx并编写:

events {
    worker_connections 200;
}

env SERVER_PORT;

http {
    server {
        set_by_lua_block $sp {
            return os.getenv("SERVER_PORT");
        }
        listen $sp;
        root /Users/kevin/code/nginx-testing;
    }
}
Run Code Online (Sandbox Code Playgroud)

但这也不起作用。$sp直到rewrite阶段才定义。

sed在启动nginx之前,这里是否有任何选择,还是我辞职了通过或类似方法重写配置文件?

凯文

xia*_*hen 6

听指令不支持nginx的变量或ENV变量。因此,它无法动态侦听nginx端口。

通过ENV变量进行动态侦听在技术上是可行的,您应该修改nginx核心。
但是它不能通过nginx变量实现,nginx必须在接收到HTTP请求之前在某些指定的端口上进行监听。(nginx变量系统适用于http请求。)


您可以在启动nginx之前编写一些脚本来修改“ listen”指令,这是实现动态监听的一种不太好的方法。