Подтвердить что ты не робот

Производственный сервер Elixir Phoenix имеет проблемы с продлением Letsencrypt

У меня есть сайт, созданный с использованием фреймворка Elixir Phoenix. Веб-сайт отлично работает в режиме dev и prod.

Когда phoenix-сервер работает в режиме dev, у меня нет проблемы с обновлением сертификата Let Encrypt, но когда приложение точно такое же работает в режиме prod, я все время получаю ошибку разрешения при попытке продления. Обратите внимание, что я говорю о точно таком же приложении, на одном сервере FreeBSD, выполняемом пользователем тем же - обе команды без sudo. Разница только - MIX_ENV=prod

Я также отметил, что в режиме prod сервер phoenix регистрирует ошибку 404, когда Letsencrypt пытается получить доступ к моей priv/static/.well-known/acme-challenge/(some-unique-string) Моя базовая настройка для phoenix + letencrypt подробно описана в это сообщение в блоге

Вопрос: как phoenix-сервер обрабатывает разрешение каталога/файла по-разному между режимами "prod" и "dev"?

  • Использование Elixir 1.2.4 и Phoenix 1.1.4

UPDATE:

Люди, так как LetsEncrypt и Phoenix framework развиваются быстро, проблема, которую я перечислил выше, больше не является проблемой, если вы используете новейший cerbot из LetsEncrypt и Phoenix 1.2.0

Это не обязательно ответ на исходные вопросы.

4b9b3361

Ответ 1

Я решил это, используя маршрут, вместо файла:

scope "/.well-known", MyApp do
   get "/acme-challenge/:challenge", AcmeChallengeController, :show
end

И простой контроллер..

defmodule AcmeChallengeController do
   use MyApp, :controller

   def show(conn, %{"challenge" => "the_random_file_name"}) do
      send_resp(conn, 200, "TheHashInTheFile")
   end

   def show(conn, _) do
      send_resp(conn, 200, "Not valid")
   end
end

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