Это просто не поддерживается - вы можете использовать переменные в http://nginx.org/r/access_log , но не в http://nginx.org/r/error_log.
P.S. Обратите внимание, что в целом использование переменных, вводимых пользователем, в access_log
или error_log
- это довольно плохая идея, поскольку вы создаете возможность для злоумышленника исчерпать inodes в вашей файловой системе, выполняя запросы со случайными строками в заголовке Host
, что может привести к созданию нового файла для каждого нового запроса. Это может произойти даже случайно (без злого умысла), если кто-то просто попытается перечислить всех возможных пользователей на вашем сервере. Ваш конкретный код не обязательно страдает от этого, поскольку каталоги обычно не создаются автоматически каким-либо программным обеспечением UNIX, но это все еще не лучший способ что-то делать.
Согласно философии nginx, было бы лучше создать отдельный http://nginx.org/r/server config для каждого пользователя (поскольку nginx можно перезапустить без простоя). Учтите, что у него есть дополнительные преимущества, потому что nginx в значительной степени полагается на математически эффективные структуры данных для поиска правильного server
(чего нет в конфигурациях сервера на основе регулярных выражений). Отказ от использования переменных в access_log
также обеспечит буферизацию записи в access_log
, что может значительно увеличить эффективную пропускную способность вашего сервера (особенно, если вы входите на жесткие диски, отличные от SSD).
По сути, в nginx уже есть много бандэдов для поддержки переменных внутри access_log
(просто посмотрите список ограничений на http://nginx.org/r/access_log для случаев, когда для указания файла используются переменные), и, я думаю, было сочтено неуместным вводить еще больше таких бандажей и в error_log
(особенно с учетом того, что error_log
в производстве сценарии не должны быть такими большими, как access_log
, поэтому при необходимости вы можете легко написать внешние инструменты, чтобы разделить их).
person
cnst
schedule
04.08.2018