ฉันมีการกำหนดค่า Nginx ที่ใช้งานได้ซึ่ง:

  1. ทำการฮาร์ดเปลี่ยนเส้นทาง (301) จาก http เป็น https

  2. นอกจากนี้ ละเว้นเส้นทางย่อยบน http ( http://www.example.com/ANY/THINGเปลี่ยนเส้นทางไปที่https://example.comธรรมดา)

  3. ให้บริการแอปพลิเคชันจาก https

ฉันจะแก้ไขไฟล์ปรับแต่งเพื่อให้ฉันสามารถ:

  • สร้างใบรับรอง HTTPS ด้วย certbot/Let's Encrypt

  • ใน 90 วัน รันcertbot renewโดยไม่ต้องแก้ไข config

answer

ตัวอย่างนี้ใช้รากแบบคงที่แทนแอปพลิเคชัน แทนที่location /บล็อกในส่วน HTTPS ตามความเหมาะสม...

1) สร้างไฟล์ conf (โปรดทราบว่าssl_certificateมีการใส่ความคิดเห็น)

server {
    # naive redirect of HTTP to HTTPS
    server_name example.com;

    listen *:80;
    listen [::]:80;

    location ^~ /.well-known/acme-challenge/ {
        default_type "text/plain";
        root /var/www/letsencrypt;
    }

    location / {
        return 301 https://example.com;
    }
}

server {
    # main server block
    server_name example.com;

    # SSL configuration
    listen 443 ssl;
    listen [::]:443 ssl;
    # ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    # ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    root /var/www/html;
    index index.html index.htm;

    location / {
        # replace this with directives for your application
        try_files $uri $uri.html $uri/ =404;
    }

}

2) เรียกใช้ certbot

certbot certonly --authenticator webroot --webroot-path /var/www/letsencrypt -d example.com

3) อัปเดตไฟล์ conf Uncomment ssl_certificate บรรทัด:

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

4) รีสตาร์ท nginx

service nginx restart

5) การทดสอบการต่ออายุ (ด้วยการบังคับต่ออายุ ไม่ใช่แบบแห้ง)

certbot renew --force-renewal

6) ใน 90 วัน ต่ออายุได้ตามปกติ...

certbot renew