Короче говоря, через nginx вы ничего не передаете через переменные окружения, вы используете HTTP-заголовки или параметры fastcgi.
В вашем случае вам даже не нужно, потому что вы все делаете правильно и запускаете шавки как отдельный процесс - задайте переменные среды в их среде. Nginx не имеет к этому никакого отношения.
Nginx не работает с переменными среды и, вероятно, не будет работать очень долго, пока кто-то по ошибке не взломает сторонний модуль для него, и тогда он все равно не будет поддерживаться в основном потоке.
Для этого есть множество причин, в основном связанных с проектированием, безопасностью, администрированием, но, в конечном счете, разработчик и сообщество считают, что работа с переменными среды не является местом HTTPd, когда HTTPd предназначен для работы с ресурсы, которые могут отсутствовать на одном компьютере (как передать переменные среды процессам, которые прослушивают соседнюю машину?).
Кроме того, passenger является сторонним модулем и несколько нарушен как с точки зрения реализации, так и дизайна, поскольку он не соответствует тому, для чего предназначен nginx, поскольку он запускает процессы приложения в nginx (здесь вы МОЖЕТЕ передать переменные окружения в теории, но это не то, как nginx должен работать).
Рекомендуемый метод для обработки таких вещей - запускать ваше приложение за пределами nginx (используя там переменные окружения, если хотите), а затем через прокси или fastcgi передавать его в приложение, при желании включая в заголовки или в параметры fastcgi необходимые дополнительные данные. В качестве альтернативы, ваше приложение может иметь какой-то способ определения правильных настроек внутри него, например, файл settings.local (это довольно часто встречается в настройках Python).
Существует множество способов сделать это, не используя nginx для работы с переменными окружения.