【问题标题】:How can I use OS environment variables in Nginx config?如何在 Nginx 配置中使用操作系统环境变量?
【发布时间】:2018-11-18 23:38:44
【问题描述】:

如何在 nginx 配置中使用操作系统中设置的环境变量?

例如环境变量设置为 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.conf

upstream 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;
    }
}

谢谢!

【问题讨论】:

    标签: linux variables nginx lua


    【解决方案1】:

    你想做的那件事,我认为你做不到。

    来自上游模块的服务器指令上的the documentation

    定义服务器的地址和其他参数。地址可以 指定为域名或 IP 地址,带有可选端口,或 作为“unix:”前缀后指定的 UNIX 域套接字路径

    您不能使用变量动态创建上游服务器。

    如果您想像这样路由请求,如果在运行时已知不同的位置,请使用 map 指令,或者设置一个 auth_request 指令,该指令指向您服务器上的应用程序,该应用程序可以为每个请求返回正确的变量实时。然后让 Nginx 使用 auth_request_set 指令将该响应存储在一个变量中。

    【讨论】:

    • 嗯,我认为你错了,因为我现在至少可以想到一种方法来生成基于操作系统环境的配置,即创建一个 bash 脚本并使用 echo 将其添加到 rc.local "$var"... >>custom.conf 但是编辑这个配置看起来不太好。
    • 当然你可以在 Nginx 运行之前动态生成你的配置,但这不是你的问题。
    猜你喜欢
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多