Назад | Перейти на главную страницу

Как получить nixos configuration.nix для настройки nginx?

В моем файле configuration.nix написано

services.nginx.enable=true;
services.nginx.httpConfig="a";

(Я пробовал обычный файл и пустую строку, и ни один из них не работал)

при беге nixos-rebuild switch, говорит, что сервер был запущен, но curl localhost соединение отказывается.

Когда я бегу nginx из командной строки он отвечает could not open error log file: open() "/nix/store/HASHHERE-nginx-1.8.1/logs/error.log failed", read only filesystem.

Я посмотрел там conf файл /nix/store/HASHHERE-nginx-1.8.1/conf/nginx.conf и он такой же, как по умолчанию! ('diff nginx.conf nginx.conf.default' возвращает пустую строку).

Почему не services.nginx.httpConfig изменить файл конфигурации?

Это действительно меняет файл конфигурации, но файл конфигурации не записывается в пакет nginx. Вместо этого он записывается в новый файл в новом месте.

Поначалу это меня тоже немного смутило. Я счел полезным разобраться в этом, вспомнив, что хранилище nix отражает чистоту функционального языка nix - когда вы что-то меняете, исходная копия должна оставаться такой же, вместо этого создается новая копия в сочетании с любыми изменениями (это свойство поддерживающий мгновенный откат). То же самое и с вашей конфигурацией nginx - пакет никогда не трогается, вместо этого создается новый файл конфигурации.

Как говорит Рок, вы можете быстро проверить, где находится файл конфигурации, с помощью systemd status. Вы также можете прочитать раздел конфигурации для модуля nginx, чтобы увидеть, как все это реализовано. В этом случае вы увидите, что ваш nginx.httpConfig текст записывается в файл конфигурации в /nix/store/HASHHERE-nginx.conf. Затем этот файл передается напрямую в ваш двоичный файл nginx через параметр -c. Итак, команда execStart модуля nginx systemd похожа на ${pkgs.nginx}/bin/nginx -c ${configFile}..

PS именно поэтому ваш curl возвращает отказ в соединении - потому что ваша конфигурация nginx просто 'a'! Сервер по умолчанию находится в пакете nginx, но на него нет ссылок (то же самое произошло и со мной).