14

Elixir Phoenix フレームワークで構築されたサイトがあります。Web サイトは、開発モードと本番モードの両方で正常に動作します。

phoenix サーバーが dev モードで実行されている場合、Let's Encrypt 証明書の更新に問題はありませんが、まったく同じアプリが prod モードで実行されている場合、更新しようとするとパーミッション エラーが発生し続けます。同じFreeBSDサーバー上で、同じユーザーによって実行されたまったく同じアプリについて話していることに注意してください-両方のコマンドなしで. 唯一の違いはsudoMIX_ENV=prod

また、prod モードでは、priv/static/.well-known/acme-challenge/(some-unique-string)Letsencrypt がアクセスしようとすると、phoenix サーバーが 404 エラーをログに記録することにも注意しました

問題は、「prod」モードと「dev」モードの間で、フェニックスサーバーがディレクトリ/ファイルのアクセス許可をどのように異なる方法で処理しているのかということです。

  • Elixir 1.2.4 と Phoenix 1.1.4 の使用

アップデート:

皆さん、LetsEncrypt と Phoenix フレームワークは急速に進化しているため、LetsEncrypt と Phoenix 1.2.0 の最新の cerbot を使用している場合、上記の問題はもはや問題ではありません。

ただし、これは元の質問に対する回答である必要はありません。

4

1 に答える 1

2

ファイルの代わりにルートを使用して解決しました:

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

これはハードコーディングされ、コンパイルされ、ファイルを送信するよりも高速ですが、ある種のキー/値ストアを使用して、再デプロイせずに UI 内からチャレンジを管理 (追加/削除) することもできます。

于 2016-11-03T13:16:34.323 に答える