0

現在、 nginx 構成に以下の行を残すことで、 Let's Encrypt SSL 証明書を正常にインストールできます。

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

Web サイトで基本認証を有効にしたいと考えています。以下はそうするためにうまくいきます:

location / {
    try_files $uri $uri/ /index.php?$query_string;
    auth_basic "Restricted Content";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

ただし、Let's Encrypt の SSL 証明書は毎月更新する必要があります。curl を使用して、この更新を自動化できます。ただし、Let's Encrypt には、次のプレフィックスを持つルートを含むルートに沿ったコールバックがあります。

/.well-known/acme-challenge/ 

しかし、ここで、上記のルート プレフィックスの例外を追加する必要があります。

location ^~ /.well-known/acme-challenge/ {
    auth_basic off;
}

上記の多くのバリエーションを試しましたが、どれも機能していないようです。上記の構成でインストールする Let's Encrypt SSL 証明書を取得できません。基本認証を外すと (auth_basic で始まる 2 行を削除して)、Let's Encrypt SSL 証明書がインストールされないこともわかりました。

location ^~ /.well-known/acme-challenge/ {
    try_files $uri $uri/ /index.php?$query_string;
}

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

基本認証が有効になっているときにコールバックルートが実行されるように、提案をいただければ幸いです。また、基本認証が有効になっていない上記の構成で Let's Encrypt をインストールできない理由についても知りたいと思います。前もって感謝します。

追加のエラー ログ:

/var/log/nginx# cat cert.dev.farm-error.log.1
2016/03/18 13:12:26 [error] 12336#12336: *1 open() "/home/forge/cert.dev.farm/public/.well-known/acme-challenge/jGhldzH8cV3d666a44nRy-Gzf98m1u2qUbkWnNv0aMI" failed (2: No such file or directory), client: 66.133.109.36, server: cert.dev.farm, request: "GET /.well-known/acme-challenge/jGhldzH8cV3d666a44nRy-Gzf98m1u2qUbkWnNv0aMI HTTP/1.1", host: "cert.dev.farm"
2016/03/18 13:17:09 [error] 13202#13202: *1 open() "/home/forge/cert.dev.farm/.well-known/acme-challenge/k9jsDB_mkvU5UzvL-B7hd3iA90ZTq61OaDNixoeRQuQ" failed (2: No such file or directory), client: 66.133.109.36, server: cert.dev.farm, request: "GET /.well-known/acme-challenge/k9jsDB_mkvU5UzvL-B7hd3iA90ZTq61OaDNixoeRQuQ HTTP/1.1", host: "cert.dev.farm"
2016/03/18 13:17:09 [error] 13202#13202: *1 FastCGI sent in stderr: "Unable to open primary script: /home/forge/cert.dev.farm/index.php (No such file or directory)" while reading response header from upstream, client: 66.133.109.36, server: cert.dev.farm, request: "GET /.well-known/acme-challenge/k9jsDB_mkvU5UzvL-B7hd3iA90ZTq61OaDNixoeRQuQ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "cert.dev.farm"
2016/03/18 13:23:48 [error] 14522#14522: *1 open() "/home/forge/cert.dev.farm/public/.well-known/acme-challenge/5ZBXFn23tOUPcQFNrI3DqUE-l9x3rmdiOkYwabDl-jk" failed (2: No such file or directory), client: 66.133.109.36, server: cert.dev.farm, request: "GET /.well-known/acme-challenge/5ZBXFn23tOUPcQFNrI3DqUE-l9x3rmdiOkYwabDl-jk HTTP/1.1", host: "cert.dev.farm"
4

2 に答える 2

3

You probably miss a document root being set for the /.well-known/acme-challenge location block.

location ^~ /.well-known/acme-challenge/ {
    root /path/to/your/public/directory;
    try_files $uri;
    auth_basic off;
}

location / {
    ...
}

You said you can automate it using CURL, did you have a look at the list of available clients?

于 2016-03-28T19:09:53.217 に答える