如何在nginx配置中使用OS中设置的环境变量?
例如,环境变量集为ENVIRON = dev,APP_NAME = test
这是我的Dockerfile:
FROM openresty/openresty:alpine
RUN set -ex && \
rm /etc/nginx/conf.d/default.conf
ADD nginx.conf /etc/nginx/
ADD custom.conf /etc/nginx/conf.d/
这是我的主要nginx.conf
user nginx;
worker_processes auto;
pcre_jit on;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
env ENVIRON;
env APP_NAME;
set_by_lua $environ 'return os.getenv("ENVIRON")';
set_by_lua $appname 'return os.getenv("APP_NAME")';
http {
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
这是来自/etc/nging/conf.d /
的custom.confupstream app.$environ-$appname {
server $environ-$appname:80;
}
server {
listen 80;
server_name $hostname;
error_log /dev/stdout info;
access_log /dev/stdout;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
add_header X-Info proxied;
proxy_pass http://app.$environ-$appname;
}
}
谢谢!
答案 0 :(得分:0)
你想做的事情,我不认为你能做到。
来自上游模块的服务器指令的the documentation:
定义服务器的地址和其他参数。地址可以 被指定为域名或IP地址,带有可选端口,或 作为在“unix:”前缀
之后指定的UNIX域套接字路径
您无法使用变量即时创建上游服务器。
如果要路由此类请求,请在运行时知道不同位置时使用map指令,或者设置指向服务器上应用程序的auth_request
指令,该指令可以返回正确的变量每个请求都是实时的。然后让Nginx使用auth_request_set
指令将该响应存储在变量中。