Puncte:0

Cum se permite certbot să poată accesa http://myapi.com/.well-known/acme-challenge/2d8dvxv8x9dvxd9v prin nginx?

drapel in

Fișierul meu nginx.conf este după cum urmează:

utilizator www-date;
worker_proceses auto;
pid /run/nginx.pid;
includ /etc/nginx/modules-enabled/*.conf; 
#include de mai sus aduce următoarele fișiere implicite:
#50-mod-http-image-filter.conf  
#50-mod-http-xslt-filter.conf  
#50-mod-mail.conf  
#50-mod-stream.conf

evenimente {
        muncitor_conexiuni 500;
}

http {
    includ /etc/nginx/proxy.conf;
    limit_req_zone $binary_remote_addr zone=one:10m rate=100r/m;
    server_tokens dezactivat;

    sendfile activat;
    keepalive_timeout 30;
    client_body_timeout 10; client_header_timeout 10; send_timeout 10;

    în amonte aplicația mea{
        server 127.0.0.1:5000;
    }

    Server {
        asculta 443 ssl http2;
        asculta [::]:443 ssl http2;
        nume_server myapi.com;
        ssl_certificate /etc/letsencrypt/live/myapi.com/fullchain.pem; # gestionat de Certbot
        ssl_certificate_key /etc/letsencrypt/live/myapi.com/privkey.pem; # gestionat de Certbot
        includ /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot

        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;


        #Redirecționează tot traficul
        Locație / {
            proxy_pass http://myapi;
            limit_req zone=o explozie=10;
        }
    }
}

Am instalat certbot și certbot-nginx (ubuntu).

SSL funcționează bine. Firewall permite doar portul 443.

Încerc să reînnoiesc certificatul certbot cu comanda: sudo certbot renew --dry-run

Acest lucru încearcă să verifice dacă sunt proprietarul domeniului făcând o solicitare către http://myapi.com/.well-known/acme-challenge/2d8dvxv8x9dvxd9v (notă: am obscucat valoarea cheii 2d8dvxv8x9dvxd9v deoarece acesta este ceva privat)

Dar de data asta a expirat. Deci am activat portul 80 și am adăugat următorul element suplimentar de server:

   Server {
         asculta 80;
         nume_server myapi.com;
         returnează 301 https://$host$request_uri;
      }

Acum comanda de reînnoire certbot (sudo certbot renew --dry-run) poate reînnoi certificatul. În mod ciudat, chiar dacă elimin acest bloc de server, reînnoirea certbot funcționează bine.

  1. Unde este calea .well-cunoscut/acme-challenge? Este generat/șters din mers?

  2. Când elimin blocul de server pentru portul 80, atunci cum poate nginx să reînnoiască certificatul (pentru că are nevoie de portul 80 pentru provocarea certbot)?

Gerard H. Pille avatar
drapel in
Lăsați serverul de pe portul 80 să răspundă numai solicitărilor pentru /.well-known/acme-challenge. Site-ul dvs. va fi mai sigur dacă nu redirecționați http la https.
drapel in
Dar care este locația `/.well-known/acme-challenge`?
Gerard H. Pille avatar
drapel in
Documentroot-ul serverului tău nginx. Se pare că îmi amintesc că certbot a întrebat unde să-l pun.
drapel in
Există vreo configurație unde pot verifica asta?
Gerard H. Pille avatar
drapel in
Desigur: configurația dvs. nginx. Nu este /var/www/html implicit? Căutați o directivă „rădăcină” în configurația dvs. sau parametrul de linie de comandă „p” când porniți nginx.
drapel in
Nu sunt sigur - am lipit conținutul în fișierul meu nginx.conf în întrebare - nu spune nimic despre /var/www/html
Gerard H. Pille avatar
drapel in
Ați lipit nginx.conf, dar nu și configurațiile incluse. Bifați „man nginx”. Se spune că /usr/share/nginx este implicit. Am directiva rădăcină în configurațiile mele care indică către /var/www/html.
drapel in
Da, tocmai am verificat asta acum, „man nginx” spune că /usr/share/nginx este implicit. Dar unde ai verificat te rog urmatoarele? `Am directiva rădăcină în configurațiile mele care indică către /var/www/html`
Gerard H. Pille avatar
drapel in
Căutând fișierele în /etc/nginx. Am găsit „./sites-available/default: root /var/www/html;”
drapel in
După cum se arată în conținutul fișierului meu nginx.config, nu există nicio includere a site-urilor-available/default - cred că acest lucru indică faptul că implicit este /usr/share/nginx
Gerard H. Pille avatar
drapel in
certbot va crea fișierul, îl va elimina când ați terminat. Puteți verifica ulterior data modificării directorului.
drapel in
Ok are sens. Deci, pot schimba această linie `return 301 https://$host$request_uri;` la `location / { root /usr/share/nginx; }`.
drapel in
Puțin surprins de constatarea mea că, dacă elimin al doilea server (care ascultă pe 80), chiar și atunci reînnoirea certbot funcționează. Deci nu am nevoie deloc de al 2-lea bloc de server. Dar mă întreb atunci cum poate certbot să acceseze punctul final. Asta mă încurcă.
Gerard H. Pille avatar
drapel in
Poate că http://myapi furnizează provocarea acme? Sau ai uitat să repornești nginx?
Gerard H. Pille avatar
drapel in
„location / { root /usr/share/nginx; }” ar permite accesul la tot ce este sub /usr/share/nginx.
drapel in
Am făcut o repornire a sistemului, precum și reînnoirea certbot (se pare că tot ce are nevoie pentru portul 80 pentru a fi deschis pe firewall). De asemenea, am eliminat toate blocurile de cod de server și reînnoirea certbot încă funcționează.
Gerard H. Pille avatar
drapel in
Atunci lipsește ceva din configurația ta. Ce conține /etc/nginx/proxy.conf?
drapel in
Si eu sunt surprins. `proxy_redirect off; proxy_set_header Gazdă $gazdă; proxy_set_header X-Real-IP $adresă_la distanță; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $schema; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k;`
drapel in
Poate că Certbot își deschide propriul server momentan, dar nu găsesc referințe pentru asta.
Gerard H. Pille avatar
drapel in
Deci, cum rulați certbot? Când îl rulez, mă întreabă dacă vreau să folosesc un server existent sau dacă trebuie să pornească unul? Nu știu ce se întâmplă cu „dry-run”.
Gerard H. Pille avatar
drapel in
Corecție: eu nu folosesc certbot, folosesc „certbot-auto”.
drapel in
Aceasta este comanda de reînnoire `sudo certbot renew --dry-run`
Gerard H. Pille avatar
drapel in
Nu chiar, acesta este un test pentru a vedea dacă reînnoirea va funcționa. Între timp am citit documentația certbot-ului. Pornirea propriului server web trebuie să fie implicit. Bifați „man certbot”.
drapel in
Dacă doriți să modificați răspunsul, atunci pot marca este răspuns.
Gerard H. Pille avatar
drapel in
Voi incerca. Dar totuși, din moment ce ați rulat doar „dry-run”, încă folosiți un certificat vechi?
drapel in
Funcția uscată simulează procesul real
Gerard H. Pille avatar
drapel in
"--dry-run Efectuați o rulare de testare a clientului, obținând certificate de testare (invalide), dar fără a le salva pe disc."
drapel in
Da, este o asigurare că atunci când comanda de reînnoire automat rulează prin planificator (fie din jobul cron automat, fie prin serviciul auto systemd), atunci nu vor fi surprize.
Puncte:1
drapel in

Aveți nevoie de un firewall care să permită accesul pe portul 80 (http), certbot va porni un server web pentru a furniza fișierul acme-challenge de pe domeniul dumneavoastră.

drapel in
Am făcut asta și funcționează, am actualizat întrebarea cu provocarea.
drapel in
Vreau doar să servesc cererile https și să blochez toate solicitările http, altele decât reînnoirea certbot. Care este modificarea pe care trebuie să o fac la nginx.config?
Gerard H. Pille avatar
drapel in
De asemenea, puteți spune firewall-ului să renunțe la cererile portului 80 când certbor a rulat. Mult mai bine decât ca nginx să se ocupe de asta.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.