动态侦听nginx端口

时间:2016-09-12 02:52:50

标签: nginx

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

PORT=4567 nginx -c $PWD/nginx.conf

然后有一个类似于:

的nginx配置
http {
    server {
        listen $PORT;
    }
}

并让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;
    }
}

但这也行不通;在$sp阶段之前,rewrite未定义。

这里有没有选项,还是我在开始使用nginx之前通过sed或类似的方式重写配置文件?

凯文

1 个答案:

答案 0 :(得分:5)

listen directive不支持nginx变量或ENV变量。 所以它无法动态监听nginx端口。

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

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