Я работал раньше с AWS Linux AMI, но не повезло с AWS Linux 2.
Мне нужно получить доступ к свойствам моей среды из файла конфигурации Nginx во время Развертывание приложения EB. Это сервер с одним экземпляром узла.
Я сделал это с помощью AMI AWS Linux, и он работал без проблем:
.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
, расположенную в нашей папке пакета приложений root.
Здесь ссылка (см. Конфигурация обратного прокси )
Итак, я создал файл 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
, но это другая проблема.
И еще много попыток и неудач ...
Но потом я прочитал (также из ссылки выше):
" Если вы настроили свой прокси для отправки трафика c нескольким процессам приложений, вы можете настроить несколько свойства среды и использовать их значения как в конфигурации прокси , так и в коде вашего приложения."
И надежда вернулась ... Означает ли это, что я на самом деле CAN напрямую добавлять переменные окружения в конфигурации Nginx, расположенные в каталоге .platform
? ... Не знаю .. А вы?
Я мог бы продолжать описывать все, что пробовал всю ночь, так что я остановлюсь на этом. Надеюсь, вы поняли проблему. Если нет, спросите меня, и я сделаю все возможное, чтобы все это было понятно.
Кроме того, после 14 часов борьбы с этой проблемой мой разум уже не очень ясен. Мне нужен перерыв.
Если вы сделали это до конца, спасибо за ваше время, и вам будет очень благодарна за помощь.