AWS EB + Nginx, обновить формат access.log или создать новый журнал - PullRequest
0 голосов
/ 22 мая 2018

Я запускаю приложение на AWS 'Elastic Beanstalk, используя конфигурацию Node.js, работающую на 64-битной Amazon Linux / 4.5.0 с Nginx.

Я хотел бы добавить заголовок запроса "X-My-Header "как поле для access.log.За исключением этого, я бы взял создание нового файла журнала, используя составные стандартные журналы nginx + мой заголовок.Я нашел несколько похожих вопросов, в частности, о входе в систему с помощью nginx, но аспект EB бросает дополнительную кривую с тем, как обновляются конфиги nginx через файл конфигурации /.ebextensions.

Я выполнил создание файл журнала, но он ничего не заполняет.Я также попытался просто обновить файл access.log, но, похоже, этого тоже не произошло.Я видел, как другие люди, добавляющие заголовки, использовали бы формат «$ http_», и похоже, что заголовок http-запроса «X-Header-Example» отформатирован в «$ http_header_example» (см. «$ Http_user_agent» в составном по умолчанию в nginx), хотя и не хочу тратить время на это предположение, обратите внимание, что я добавил и «$ http_x-my-header», и «$ http_x_my_header».

Попытка 1: обновить существующий формат access.log files: /etc/nginx/conf.d/01_proxy.conf: owner: root group: root content: | log_format my_log_format '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" - "$http_x_my_header" - "$http_x-my-header"'; access_log /var/log/nginx/access.log my_log_format;

Результат: access.log не содержит никаких дополнительных полей.У него даже нет пустых "" s или -.

Попытка 2: создайте новый файл журнала

files: /etc/nginx/conf.d/01_proxy.conf: owner: root group: root content: | log_format my_log_format '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" - "$http_x_my_header" - "$http_x-my-header"'; access_log /var/log/nginx/new_log.log my_log_format; Результат: new_log.log теперь появляется в var/log/nginx при экспорте логов с дашборда EB.Тем не менее, он полностью пуст.

Я читал некоторые другие подобные вопросы, упоминающие удаление файлов и перезапуск сервера, иногда помогает.Я попытался перезапустить приложение и даже полностью перестроить среду с помощью панели мониторинга EB, но ни один из них не привел к другим результатам.

Я в значительной степени основал свое решение на этой средней статье , раздел 2.1.Однако, когда я попытался добавить container_command в мой файл .config, вся моя среда перестала работать.Мне пришлось вернуться к другому развертыванию, а затем перестроить среду, чтобы она снова заработала.

Любые советы?

Моя цель - связать этот заголовок запроса с поступающими запросами. В идеалеЯ мог бы обновить существующий по умолчанию access.log.Я согласен на отдельный файл.Или, если у вас есть какие-либо другие предложения относительно того, как я могу получить доступ к этой информации, я весь слух!Спасибо.

Изменить Новая попытка:

Здесь показывает, что вы можете полностью заменить файл nginx.config по умолчанию, поэтому я попытался удалить другой файл и вместо этого скопировать /вставка значения по умолчанию из medium article ранее в /.ebextensions/nginx/nginx.config файл, за исключением добавления туда моих изменений.Я обновил log_format main, чтобы включить мои "$http_x_my_header" значения.

К сожалению, развертывание не удалось с этим сообщением:

Файл конфигурации .ebextensions / nginx / nginx.config в приложенииверсия содержит недопустимый YAML или JSON.Исключение YAML: недопустимый Yaml: ожидается '', но обнаружен скаляр в "", строка 7, столбец 1: include / usr / share / nginx / modules ... ^, исключение JSON: недопустимый JSON: неожиданный символ (u) в позиции0 .. Обновите файл конфигурации.

Неправильная строка - include /usr/share/nginx/modules, которая существует и прекрасно работает по умолчанию, предоставленной в средней статье.

Я надеялся, что это будетгрязное исправление, от которого я мог бы, по крайней мере, получить некоторые результаты, но, увы, похоже, есть еще один контрольно-пропускной пункт.

1 Ответ

0 голосов
/ 20 августа 2018

Я ответил на этот вопрос своим собственным ответом на аналогичный вопрос:

AWS EB + nginx: обновлен формат access.log, чтобы скрыть чувствительные параметры запроса на получение

Вкратце: для сред Node AWS EB директива сервера конфигурации nginx существует внутри автоматически сгенерированного файла 00_elastic_beanstalk_proxy.conf.Здесь они вызывают access_log /var/log/nginx/access.log main, поэтому добавление конфигурации ebextension, пытающейся изменить access_log, переопределяется.

Мое решение было двояким: переопределить основной log_format, загрузив пользовательский файл nginx.conf, основанный на значениях по умолчанию (AWS говорит, что вы можете это сделать, но рекомендует вам потянуть созданный по умолчанию и повторить его проверку).когда вы обновляете версию образа среды), и мне также пришлось сделать то же самое с автоматически сгенерированным файлом, чтобы выполнить некоторую логику, которая устанавливает новую переменную, которую я хотел записать в журнал.

Подробнее см. В ответе, указанном выше, в котором содержится дополнительная информация о процессе.

...