【发布时间】:2020-08-19 12:01:49
【问题描述】:
我之前在 AWS Linux AMI 上工作过,但在 AWS Linux 2 上没有运气。
我需要在 EB 应用程序部署期间从 Nginx 配置文件访问我的环境属性。这是一个单实例节点服务器。
我在 AWS Linux AMI 上做了这样的事情,并且没有问题:
.ebextensions/00_options.config
option_settings:
aws:elasticbeanstalk:application:environment:
DOMAIN: socket.example.com
MASTER_DOMAIN: https://example.com
etc..
.ebextensions/10_proxy.config
... some configs ...
files:
/etc/nginx/conf.d/proxy.conf:
mode: "000644"
owner: root
group: root
content: |
upstream nodejs {
server 127.0.0.1:8081;
keepalive 256;
}
map $http_origin $cors_header {
hostnames;
default "";
`{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "MASTER_DOMAIN"}}` "$http_origin";
}
server {
listen 80;
listen 8080;
server_name `{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "DOMAIN"}}`;
location ~ /.well-known {
allow all;
root /usr/share/nginx/html;
}
location / {
return 301 https://$host$request_uri;
}
}
etc..
.... some more configs ....
我没有包括上面的大多数配置,因为它们不相关。
所以当我之前这样做时,一切都按预期工作。配置文件插入了我的属性并在/etc/nginx/conf.d/proxy.conf 文件夹中创建了该文件。
现在 AWS Linux 2 的规格发生了变化,我们必须将 Nginx 配置文件添加到位于我们的应用程序包根文件夹中的 .platform/nginx/conf.d 文件夹中。
Here the reference(参见反向代理配置)
所以我在上面提到的位置创建了一个proxy.conf 文件,其中包含之前插入到/etc/nginx/conf.d/proxy.conf 中的内容。
.platform/nginx/conf.d/proxy.conf
upstream nodejs {
server 127.0.0.1:8081;
keepalive 256;
}
map $http_origin $cors_header {
hostnames;
default "";
`{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "MASTER_DOMAIN"}}` "$http_origin";
}
etc...
然后问题就开始了..
第一次试验向我抛出了unexpected "{" in /var/proxy/staging/nginx/conf.d/proxy.conf:11。
在那之后我尝试了很多东西。尝试使用 ${MASTER_DOMAIN} 并使用新的 EB AWS Linux 2 hooks(请参阅上面的链接 Platform hooks)。一切都无济于事,您似乎无法从 Nginx 配置中访问属性。我读过一篇来自 Nginx 的文章或文档,今天提到了类似的东西,但我再也找不到了(做了很多谷歌搜索)。
我还尝试创建一个配置文件,就像我对工作版本所做的那样,目的是在某个位置保存一个包含属性的临时文件,然后将此文件包含在所需的 .platform/nginx/conf.d/proxy.conf 文件中,因为我开始认为那里无法将它们直接包含在新规范中。
.ebextensions/10_proxy.config
... some configs ....
files:
/var/proxy/staging/custom_folder/proxy.conf:
mode: "000644"
owner: root
group: root
content: |
etc...
.platform/nginx/conf.d/proxy.conf
include custom_folder/proxy.conf;
考虑到这个想法,我做了很多废话,我创建了hooks 来创建(mkdir)目录,我试图在其中临时保存导致新权限错误的文件。我无法为prebuild、postdeploy 文件提供适当的权限,但这是另一个问题。
还有更多的尝试和失败......
但后来我读到(也来自上面的链接):
"如果您将代理配置为向多个应用程序进程发送流量,您可以配置多个环境属性,并在代理配置和您的应用程序代码。"
希望回来了.. 这是否意味着我实际上 CAN 直接将环境变量添加到位于 .platform 目录中的 Nginx 配置中? ...我不知道..你呢?
我可以继续描述我整晚尝试的所有事情,所以我会在这里停下来。我希望你能得到这个问题。如果不问我,我会尽力让这一切变得可以理解。
另外,在与这个问题作斗争 14 小时后,我的想法也不是很清楚了。我需要休息一下。
如果您坚持到最后,感谢您的宝贵时间和帮助,我们将不胜感激。
【问题讨论】:
标签: amazon-web-services nginx environment-variables amazon-elastic-beanstalk amazon-linux-2