我之前在 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
位于我们的应用程序包根文件夹中的文件夹中。
这里是参考(见反向代理配置)
所以我在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
上方的链接)。一切都无济于事,您似乎无法从 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
文件提供适当的权限,但这是另一个问题。
还有更多的尝试和失败……
但后来我读到(也来自上面的链接):
“如果您将代理配置为向多个应用程序进程发送流量,您可以配置多个环境属性,并在代理配置和应用程序代码中使用它们的值。 ”
希望回来了..这是否意味着我实际上可以直接将环境变量添加到位于目录中的 Nginx 配置中.platform
?...我不知道..你呢?
我可以继续描述我整晚尝试的所有事情,所以我会在这里停下来。我希望你能得到这个问题。如果不问我,我会尽力让这一切变得可以理解。
在与这个问题作斗争 14 小时后,我的想法也不是很清楚了。我需要休息。
如果您做到了最后,感谢您的时间和帮助,我们将不胜感激。