LINUX.ORG.RU
ФорумAdmin

Если в nginx.conf подключаются все конфиги из conf.d , то почему nginx ругается, что директива неизвестна?

 


0

1

Хочу вынести log_format mylog ... в отдельный файл log_format.conf , который я создал в папке conf.d

В файле nginx.conf подключаются все конфиги:

http {
    ...

    include /etc/nginx/conf.d/*.conf;

Затем, в конфиге сайта пишу так:

server {

    listen 443 ssl;
    http2 on;

    server_name _;

    access_log /var/log/nginx/access.log mylog;
...

И nginx говорит, что не может найти mylog

Не могу понять, почему? Ведь файл log_format.conf подключается в общую конфигурацию nginx

Перемещено hobbit из general

Ответ на: комментарий от yandrey

Не понял вопрос. nginx грузит конфиги в алфавитном порядке? Есть такая структура папок и файлов:

/etc/nginx/nginx.conf - тут строка include /etc/nginx/conf.d/*.conf;

/etc/nginx/conf.d/log_format.conf - тут определен формат лога mylog

/etc/nginx/conf.d/app.conf - конфиг сайта

truebin
() автор топика
Ответ на: комментарий от yandrey

Спасибо. Вот уж в голову мне не приходило, что он по алфавиту грузит. Переименовал – заработало.

Это странно на первый взгляд.

truebin
() автор топика
Ответ на: комментарий от truebin

Про алфавит нигде не заявлено вроде. Даже если сейчас так, не надо на это полагаться. Сделай отдельно инклюды для конфигов липа log_format и отдельно для сайтов. Например так:

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites.d/*.conf;
firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

В данном случае сайт там точно 1 будет. Но вообще предложение интересное.

truebin
() автор топика
Ответ на: комментарий от firkax

Если гуглить, то находится такое:

Changes with nginx 1.3.10 >25 Dec 2012

*) Change: now if the «include» directive with mask is used on Unix
systems, included files are sorted in alphabetical order.

А до этого, якобы, был вызов glob() с GLOB_NOSORT. Но, да, в доке явно это не прописано.

Но, интерестнее, чего ожидал ТС, если исходно он не считал, что конфиги грузятся в алфавитном порядке.

mky ★★★★★
()
Ответ на: комментарий от mky

Я ожидал, что оно по волшебству работает. Происходит магия в черном ящике. :)

Ну, а зачем писать в доки очевидное? Это понятно, что по алфавиту всегда все.

truebin
() автор топика
Ответ на: комментарий от truebin

а не замечал, что во всяких conf.d/ итп общепринято называть файлы с цифрами в начале, чтобы в заданном порядке грузились?

madcore ★★★★★
()
Ответ на: комментарий от truebin

всегда все

Ну я же указал дату changelog'а. До 2013 года грузились в порядке следования файлов в каталоге, чтобы точно была магия, то работает, а то поредктировал .conf-файл и перестало. :)

mky ★★★★★
()
Ответ на: комментарий от truebin

/etc/nginx/conf.d/app.conf - конфиг сайта

Именно поэтому в deb-образных есть каталоги conf.d и sites-enabled, всё из второго загружается гарантировано после всего из первого.

Dimez ★★★★★
()
Последнее исправление: Dimez (всего исправлений: 1)
Ответ на: комментарий от truebin

А ты в школе, институте, вообще в процессе работы не программировал / скрипты не писал?

В большинстве языков программирования присутствует обязательное предварительное объявление выше того к чему обращаешься ниже по коду, это касается не только функций / процедур, но иногда и переменных.

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

Реализация функции должна быть описана выше её вызова, исключение может быть в виде необходимости выше вызова описать только объявление функции, с именем, типом передаваемых параметров, типом возвращаемого значения. Далее можно использовать её в вызовах, а реализация может быть описана ниже или вообще в другом подключаемом файле. А выше должны быть Include.

Конфиг nginx, apache или другого сервиса, который позволяет делать include это по сути описание конфигурации его работы с кучей секций и в процессе чтения блоков конфигурации они анализируются и интерпретируются построчно.

Поэтому важно в каком порядке подключаются и описаны соответствующие блоки.

Иначе ты мог бы в любом порядке напихать в конфигурационный файл что тебе угодно.

В случае декларирования простых переменных это ещё бы прошло до тех пор, пока ты в одной переменной не обратился к значение не объявленной.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

А ты в школе, институте, вообще в процессе работы не программировал / скрипты не писал?

Я не учился нигде.

truebin
() автор топика
Ответ на: комментарий от kostik87

Костик, ну правда, что тебе дала та школа? Ладно, универ еще – куда ни шло, но тоже…

А школа? Тети-мохнатки, страдающие от недостатка мужского внимания. Они приходят на работу, и делятся с тобой позитивом. Как-то оценивают тебя (да кто они такие, чтоб оценивать?).

А потом, по прошествии десятилетий, втречаемся мы с одноклассниками, и до сих пор у всех холод по спине от словa «школа». И мнение «ооо, он был отличником» – до сих пор, как что-то значащее.

Костик, браток, всё обман.

Всё…

truebin
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.