nginx.conf 可以访问环境变量吗?

Can nginx.conf access environment variables?

我正在尝试 运行 一个 docker 容器与 kubernetes 集群上的 nginx。我正在为我的所有其他容器使用环境变量服务发现,所以我想保持它的一致性,而不必仅仅因为这个而将 skydns 之类的东西混入其中。是否可以访问 nginx 中的环境变量,以便我可以告诉它代理传递给 kubernetes 服务?

在规范中,您可以定义一个环境变量,例如

spec:
  containers:
  - name: kibana-logging
    image: gcr.io/google_containers/kibana:1.3
    livenessProbe:
      name: kibana-liveness
      httpGet:
        path: /
        port: 5601
      initialDelaySeconds: 30
      timeoutSeconds: 5
    env:
      - name: "ELASTICSEARCH_URL"
        value: "http://elasticsearch-logging:9200"
    ports:
    - containerPort: 5601
      name: kibana-port
      protocol: TCP

这将导致环境变量 ELASTICSEARCH_URL 被设置为 http://elasticsearch-logging:9200。这对你有用吗?

干杯,

萨特南

你的意思是在 nginx 的配置文件中使用以这种方式设置的环境变量的值?我过去做过的一件事是 run.sh 配置脚本,它是 Docker 容器的 运行,它使用 env 变量来影响 nginx 配置模板文件中的变电站 - - 你是这个意思吗?

这个 shell 脚本怎么样,下面是 Docker 容器 运行?

https://github.com/GoogleCloudPlatform/kubernetes/blob/295bd3768d016a545d4a60cbb81a4983c2a26968/cluster/addons/fluentd-elasticsearch/kibana-image/run_kibana_nginx.sh ?

做骇人听闻的 HEREDOC 有很多问题,包括它只有一次服务发现(并不比硬编码好多少)。所以我的解决方案最终是使用 confd 来模板化 nginx 并在环境变量更改时重新启动 nginx。这是要确认的 link:https://github.com/kelseyhightower/confd

在作为卷安装的 ConfigMap 中保留包含的配置文件也应该有效。

尽管如此,您可能需要更改配置文件的结构。