Score:0

หลีกเลี่ยงการทำซ้ำในการกำหนดค่าการเปลี่ยนเส้นทาง nginx หรือไม่

ธง sy

การตั้งค่าการเปลี่ยนเส้นทาง www â ไม่ใช่ www และ เอชทีทีพี â HTTPS ในเวลาเดียวกัน ฉันพบปัญหาซ้ำซ้อนที่ฉันไม่สามารถเอาชนะได้

บนโดเมนของฉันปล่อยให้มันเป็นไป ตัวอย่าง.คอมâฉันมีเว็บไซต์ที่มีชื่อหลัก another.example.com. ฉันต้องการคำขอเพื่อ ตัวอย่าง.คอม, www.example.com, และ www.another.example.com ที่จะเปลี่ยนเส้นทางไปที่ another.example.comและคำขอ HTTP ทั้งหมดจะเปลี่ยนเส้นทางไปยัง HTTPS พร้อมกัน ฉันต้องการรองรับ HTTP/2 และ IPv6 ด้วย

ฉันไม่มีปัญหาในการทำให้สิ่งนี้ใช้งานได้ แต่ฉันไม่สามารถกำจัดส่วนที่ซ้ำกันของไฟล์การกำหนดค่า (เช่นการตั้งค่าใบรับรอง HTTPS) ความพยายามทั้งหมดเพื่อลดความซ้ำซ้อนทำให้การเปลี่ยนเส้นทางอย่างน้อยหนึ่งรายการหรือทั้งหมดหยุดทำงาน (บางครั้งพร้อมกับ HTTP/2)

โปรดดูการกำหนดค่าและแนะนำวิธีทำความสะอาด:

เซิร์ฟเวอร์ {
    ฟัง 80;
    ฟัง [::]:80;
    ชื่อเซิร์ฟเวอร์ www.another.example.com www.example.com another.example.com example.com;
    ส่งคืน 301 https://another.example.com$request_uri;
}

เซิร์ฟเวอร์ {
    ฟัง 443;
    ฟัง [::]:443;
    ชื่อเซิร์ฟเวอร์ www.another.example.com www.example.com example.com;
    ส่งคืน 301 https://another.example.com$request_uri;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    รวม /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

เซิร์ฟเวอร์ {
    server_name another.example.com;
    รูท /usr/share/nginx/another.example.com;
    ดัชนี index.html;

    ที่ตั้ง / {
        try_files $uri $uri/ =404;
    }

    ฟัง [::]:443 ssl http2;
    ฟัง 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    รวม /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
Richard Smith avatar
jp flag
ดู[ตัวอย่างนี้](https://stackoverflow.com/questions/43081780/dns-records-redirect-www-to-non-www/43089681#43089681)ใน SO
gxx avatar
gb flag
gxx
อีกทางหนึ่งคือ ย้ายการตั้งค่าทั่วไปไปยังการกำหนดค่าเฉพาะและใช้ "รวม"
sy flag
@RichardSmith หลังจากย้ายสตริงที่ซ้ำกันสี่สตริงไปยังบล็อกด้านนอก (และลบออกในบล็อกด้านในทั้งสอง) ฉันได้รับข้อผิดพลาดในการกำหนดค่า: `nginx: [warn] duplicate value "TLSv1.2" ใน /etc/letsencrypt/options-ssl-nginx .conf:11 nginx: [เตือน] ค่าซ้ำ "TLSv1.3" ใน /etc/letsencrypt/options-ssl-nginx.conf:11 nginx: [emerg] คำสั่ง "ssl_prefer_server_ciphers" ซ้ำกันใน /etc/letsencrypt/options-ssl-nginx.conf:12 nginx: ไฟล์การกำหนดค่า /etc/nginx/nginx.conf การทดสอบล้มเหลว `
Richard Smith avatar
jp flag
ดูเหมือนว่าคุณมีข้อความที่ซ้ำกันอยู่ที่ไหนสักแห่ง ใช้ `nginx -T` (ตัวพิมพ์ใหญ่ `T`) เพื่อดูการกำหนดค่าทั้งหมดในไฟล์ที่รวมทั้งหมด
sy flag
@RichardSmith ใช่ คุณพูดถูก แต่หลังจากที่ฉันติดตามการทำซ้ำ ปัญหาอื่นก็เกิดขึ้น: มีโดเมนระดับบนสุดหลายโดเมนในการกำหนดค่า nginx ของฉัน ถ้าฉันย้ายการกำหนดค่า SSL จากบล็อกเซิร์ฟเวอร์ไปที่ระดับบนสุด โดเมนเดียวเท่านั้น (เช่น `example.com`) จะใช้งานได้
Richard Smith avatar
jp flag
ในกรณีนี้ การตั้งค่าดั้งเดิมของคุณน่าจะเป็นวิธีที่ดีที่สุดที่คุณสามารถทำได้ หากคุณมีใบแจ้งยอดที่ซ้ำกันจำนวนมาก คุณสามารถวางไว้ในไฟล์ที่รวมไว้
Score:0
ธง in
เซิร์ฟเวอร์ {
    server_name another.example.com;
    รูท /usr/share/nginx/another.example.com;
    ดัชนี index.html;

    ที่ตั้ง / {
        try_files $uri $uri/ =404;
    }

    ฟัง [::]:443 ssl http2;
    ฟัง 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    รวม /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
เซิร์ฟเวอร์ {
    ฟัง 443 ssl;
    ฟัง [::]:443 ssl;
    ชื่อเซิร์ฟเวอร์ www.another.example.com www.example.com example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    รวม /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    เขียนใหม่ ^/(.*)$ https://another.example.com/$1 ถาวร;
}
เซิร์ฟเวอร์ {
    ฟัง 80;
    ฟัง [::]:80;
    ชื่อเซิร์ฟเวอร์ www.another.example.com www.example.com another.example.com example.com;
    ที่ตั้ง / {
        ถ้า ($host !~* ^(www)) {
          เขียนใหม่ ^/(.*)$ https://another.example.com/$1 ถาวร;
        }
    }
}

โพสต์คำตอบ

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