Score:0

จะอนุญาตให้ certbot เข้าถึง http://myapi.com/.well-known/acme-challenge/2d8dvxv8x9dvxd9v ผ่าน nginx ได้อย่างไร

ธง in

ไฟล์ nginx.conf ของฉันเป็นดังนี้:

ผู้ใช้ www-data;
worker_processes อัตโนมัติ
pid /run/nginx.pid;
รวม /etc/nginx/modules-enabled/*.conf; 
#the ด้านบนรวมถึงนำในไฟล์เริ่มต้นต่อไปนี้:
#50-mod-http-image-filter.conf  
#50-mod-http-xslt-filter.conf  
#50-mod-mail.conf  
#50-mod-stream.conf

เหตุการณ์ {
        worker_connections 500;
}

http {
    รวม /etc/nginx/proxy.conf;
    limit_req_zone $binary_remote_addr zone=หนึ่ง:10m อัตรา=100r/m;
    ปิด server_tokens;

    ส่งไฟล์บน;
    keepalive_timeout 30;
    client_body_timeout 10; client_header_timeout 10; send_timeout 10;

    ต้นน้ำ myapp{
        เซิร์ฟเวอร์ 127.0.0.1:5000;
    }

    เซิร์ฟเวอร์ {
        ฟัง 443 ssl http2;
        ฟัง [::]:443 ssl http2;
        server_name myapi.com;
        ssl_certificate /etc/letsencrypt/live/myapi.com/fullchain.pem; # จัดการโดย Certbot
        ssl_certificate_key /etc/letsencrypt/live/myapi.com/privkey.pem; # จัดการโดย Certbot
        รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot

        add_header X-Frame-ตัวเลือกปฏิเสธ;
        add_header X-Content-Type-Options nosniff;


        #เปลี่ยนเส้นทางการรับส่งข้อมูลทั้งหมด
        ที่ตั้ง / {
            proxy_pass http://myapi;
            โซน limit_req=ระเบิดหนึ่งครั้ง=10;
        }
    }
}

ฉันติดตั้ง ใบรับรอง และ certbot-nginx (อูบุนตู).

SSL ทำงานได้ดี ไฟร์วอลล์อนุญาตเฉพาะพอร์ต 443

ฉันกำลังพยายามต่ออายุใบรับรอง cerbot ด้วยคำสั่ง: sudo certbot ต่ออายุ --dry-run

ขั้นตอนนี้พยายามยืนยันว่าฉันเป็นเจ้าของโดเมนโดยการส่งคำขอไปยัง http://myapi.com/.well-known/acme-challenge/2d8dvxv8x9dvxd9v (หมายเหตุ: ฉันทำให้ค่าคีย์สับสน 2d8dvxv8x9dvxd9v เนื่องจากเป็นสิ่งที่เป็นส่วนตัว)

แต่หมดเวลานี้แล้ว ดังนั้นฉันจึงเปิดใช้งานพอร์ต 80 และเพิ่มรายการเซิร์ฟเวอร์เพิ่มเติมต่อไปนี้:

   เซิร์ฟเวอร์ {
         ฟัง 80;
         server_name myapi.com;
         ส่งคืน 301 https://$host$request_uri;
      }

ตอนนี้คำสั่งต่ออายุ certbot (sudo certbot ต่ออายุ --dry-run) สามารถต่ออายุใบรับรองได้ น่าแปลก แม้ว่าฉันจะลบการบล็อกเซิร์ฟเวอร์นี้ออก การต่ออายุ certbot ก็ทำงานได้ดี

  1. เส้นทาง .well-known/acme-challenge อยู่ที่ไหน มีการสร้าง/ลบทันทีหรือไม่

  2. เมื่อฉันลบบล็อกเซิร์ฟเวอร์สำหรับพอร์ต 80 แล้ว nginx จะสามารถต่ออายุใบรับรองได้อย่างไร (เนื่องจากต้องใช้พอร์ต 80 สำหรับการทดสอบ certbot)

Gerard H. Pille avatar
in flag
ให้เซิร์ฟเวอร์ที่พอร์ต 80 ตอบคำขอสำหรับ /.well-known/acme-challenge เท่านั้น ไซต์ของคุณจะปลอดภัยยิ่งขึ้นหากคุณไม่เปลี่ยนเส้นทาง http ไปที่ https
in flag
แต่ที่ตั้งของ `/.well-known/acme-challenge` คืออะไร?
Gerard H. Pille avatar
in flag
documentroot ของเซิร์ฟเวอร์ nginx ของคุณ ฉันดูเหมือนจะจำ certbot ที่ถามว่าจะใส่ไว้ที่ไหน
in flag
มีการกำหนดค่าใด ๆ ที่ฉันสามารถตรวจสอบได้หรือไม่?
Gerard H. Pille avatar
in flag
แน่นอน: การกำหนดค่า nginx ของคุณ ไม่ใช่ค่าเริ่มต้น /var/www/html ? ค้นหาคำสั่ง "รูท" ในการกำหนดค่าของคุณ หรือพารามิเตอร์บรรทัดคำสั่ง "p" เมื่อเริ่มต้น nginx
in flag
ไม่แน่ใจ - ฉันได้วางเนื้อหาในไฟล์ nginx.conf ของฉันในคำถาม - มันไม่ได้พูดอะไรเกี่ยวกับ /var/www/html
Gerard H. Pille avatar
in flag
คุณได้วาง nginx.conf แล้ว แต่ไม่ใช่การกำหนดค่ารวม ตรวจสอบ "คน nginx" มันบอกว่า /usr/share/nginx เป็นค่าเริ่มต้น ฉันมีคำสั่งรูทในการกำหนดค่าที่ชี้ไปที่ /var/www/html
in flag
ใช่ เพิ่งตรวจสอบตอนนี้ "man nginx" บอกว่า /usr/share/nginx เป็นค่าเริ่มต้น แต่คุณตรวจสอบสิ่งต่อไปนี้ได้ที่ไหน `ฉันมีคำสั่งรูทในการกำหนดค่าที่ชี้ไปที่ /var/www/html`
Gerard H. Pille avatar
in flag
โดยค้นหาไฟล์ใน /etc/nginx ฉันพบ "./sites-available/default: root /var/www/html;"
in flag
ดังที่แสดงในเนื้อหาไฟล์ nginx.config ของฉัน ไม่มีการรวมไซต์ที่มีอยู่/ค่าเริ่มต้น - ฉันคิดว่าสิ่งนี้บ่งชี้ว่าค่าเริ่มต้นของฉันคือ /usr/share/nginx
Gerard H. Pille avatar
in flag
certbot จะสร้างไฟล์ ลบออกเมื่อเสร็จสิ้น คุณสามารถตรวจสอบวันที่แก้ไขไดเร็กทอรีได้ในภายหลัง
in flag
โอเค เข้าท่า ดังนั้นฉันสามารถเปลี่ยนบรรทัดนี้ `return 301 https://$host$request_uri;` เป็น `location / { root /usr/share/nginx; }`.
in flag
ค่อนข้างประหลาดใจกับการค้นพบของฉันว่าถ้าฉันลบเซิร์ฟเวอร์ตัวที่ 2 (ที่ฟังใน 80) แม้ว่าการต่ออายุ certbot จะทำงานก็ตาม ดังนั้นฉันไม่ต้องการบล็อกเซิร์ฟเวอร์ที่ 2 เลย แต่ฉันสงสัยว่า certbot สามารถเข้าถึงจุดสิ้นสุดได้อย่างไร นี่ทำให้ฉันสับสน
Gerard H. Pille avatar
in flag
บางที http://myapi กำลังจัดหา acme-challenge? หรือคุณลืมรีสตาร์ท nginx?
Gerard H. Pille avatar
in flag
"location / { root /usr/share/nginx; }" จะอนุญาตให้เข้าถึงทุกอย่างภายใต้ /usr/share/nginx
in flag
ฉันรีบูทระบบแล้วการต่ออายุ certbot ก็ใช้งานได้ (ดูเหมือนว่าต้องใช้พอร์ต 80 เพื่อเปิดไฟร์วอลล์) ฉันได้ลบบล็อกรหัสเซิร์ฟเวอร์ทั้งหมดแล้ว และการต่ออายุ certbot ก็ยังใช้งานได้
Gerard H. Pille avatar
in flag
จากนั้นมีบางอย่างหายไปจากการกำหนดค่าของคุณ /etc/nginx/proxy.conf มีอะไรบ้าง
in flag
ฉันก็แปลกใจเหมือนกัน `proxy_redirect ปิด; proxy_set_header โฮสต์ $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; 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; '
in flag
Certbot อาจหมุนเซิร์ฟเวอร์ของตัวเองชั่วขณะ แต่ฉันไม่พบการอ้างอิงใด ๆ สำหรับสิ่งนี้
Gerard H. Pille avatar
in flag
แล้วคุณจะรัน certbot ได้อย่างไร? เมื่อฉันเรียกใช้งาน ระบบจะถามว่าฉันต้องการใช้เซิร์ฟเวอร์ที่มีอยู่หรือต้องเริ่มต้นใหม่หรือไม่ ฉันไม่รู้ว่าเกิดอะไรขึ้นกับ "ดรายรัน"
Gerard H. Pille avatar
in flag
การแก้ไข: ฉันไม่ได้ใช้ certbot เอง ฉันใช้ "certbot-auto"
in flag
นี่คือคำสั่งต่ออายุ `sudo certbot ต่ออายุ --dry-run`
Gerard H. Pille avatar
in flag
ไม่จริง นั่นเป็นการทดสอบเพื่อดูว่าการต่ออายุจะได้ผลหรือไม่ ในระหว่างนี้ ฉันได้อ่านเอกสารของ certbot แล้ว การเริ่มต้นเว็บเซิร์ฟเวอร์ของตัวเองต้องเป็นค่าเริ่มต้น ทำเครื่องหมายที่ "man certbot"
in flag
หากคุณต้องการแก้ไขคำตอบ ฉันสามารถทำเครื่องหมายว่าตอบแล้ว
Gerard H. Pille avatar
in flag
ฉันจะลองดู แต่ถึงกระนั้น เนื่องจากคุณรัน "dry-run" เท่านั้น คุณจึงยังใช้ใบรับรองเก่าอยู่ใช่ไหม
in flag
Dry run จำลองกระบวนการจริง
Gerard H. Pille avatar
in flag
"--dry-run ทำการทดสอบการทำงานของไคลเอ็นต์ โดยได้รับใบรับรองการทดสอบ (ไม่ถูกต้อง) แต่ไม่ได้บันทึกลงในดิสก์"
in flag
ใช่ เป็นการรับประกันว่าเมื่อคำสั่งการต่ออายุอัตโนมัติทำงานผ่านตัวกำหนดตารางเวลา (ไม่ว่าจะจากงาน auto cron หรือผ่านบริการ auto systemd) จะไม่มีความประหลาดใจ
Score:1
ธง in

คุณต้องใช้ไฟร์วอลล์ที่อนุญาตการเข้าถึงพอร์ต 80 (http) certbot จะเริ่มเว็บเซิร์ฟเวอร์เพื่อจัดหาไฟล์ acme-challenge จากโดเมนของคุณ

in flag
ฉันทำเสร็จแล้วและใช้งานได้ ฉันได้อัปเดตคำถามพร้อมความท้าทายแล้ว
in flag
ฉันต้องการให้บริการเฉพาะคำขอ https และบล็อกคำขอ HTTP ทั้งหมด นอกเหนือจากการต่ออายุ certbot ฉันต้องทำการเปลี่ยนแปลงอะไรกับ nginx.config?
Gerard H. Pille avatar
in flag
คุณยังสามารถบอกให้ไฟร์วอลล์ทิ้งคำขอพอร์ต 80 เมื่อ certbor ทำงาน ดีกว่าการให้ nginx จัดการกับมันมาก

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา