我想将一个端口传递给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
或类似的方式重写配置文件?
凯文
答案 0 :(得分:5)
listen directive不支持nginx变量或ENV变量。 所以它无法动态监听nginx端口。
通过ENV变量进行动态监听在技术上是可行的,你应该修改nginx核心 但它无法通过nginx变量实现,nginx必须在接收http请求之前侦听某些指定端口。 (nginx变量系统适用于http请求。)
您可以编写一些脚本来修改" listen"在启动nginx之前的指令,这是一种实现动态监听的不太好的方法。