أواجه صعوبة في هذا الأمر بعض الشيء. حسناً، كثيراً في الواقع.
قررت أن أجرب إضافة شبكة توصيل محتوى (CDN) إلى أحد مواقعي.
بعد قراءة الوثائق، أدركت أنه من الأفضل لموقعي الانتقال إلى نطاق فرعي من نطاقه الأصلي الحالي لتلبية المعايير التي أوصت بها Fastly (والنصيحة العامة للقيام بذلك).
لذا فكرت: “مهلاً، سيكون هذا سهلاً، لقد فعلت ذلك من قبل…” هل حقاً؟ 
الموقع المعني هو https://starzen.space.
لقد نقلته في نهاية هذا الأسبوع إلى https://www.starzen.space باستخدام الدليل هنا
كل شيء سار على ما يرام، ولكن بالطبع ما زلت بحاجة إلى مراعاة العدد القليل من المستخدمين الذين حصلت عليهم حتى الآن في هذا الموقع، لذلك أردت إضافة إعادة توجيه.
وفقًا لفهمي، أحتاج أيضًا إلى الرابط الأصلي الصادر بشهادة، لذلك باتباع هذا الدليل (الذي كان أكثر تعقيدًا في السابق؟) أضفت هذا إلى app.yml:
hooks:
after_ssl:
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--keylength/
to: "-d starzen.space --keylength"
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /return 301 https.+/
to: |
return 301 https://$host$request_uri;
after_web_config:
- replace:
filename: /etc/nginx/nginx.conf
from: /sendfile.+on;/
to: |
server_names_hash_bucket_size 64;
sendfile on;
- file:
path: /etc/nginx/conf.d/discourse_redirect_1.conf
contents: |
server {
listen 80;
listen 443 ssl;
server_name starzen.space;
return 301 $scheme://www.starzen.space$request_uri;
}
عند إعادة البناء، يبدو أن كل شيء يسير على ما يرام.
ومع ذلك، إذا حاولت الوصول إلى https://starzen.space عبر المتصفح، أحصل على:
وإذا استخدمت curl:
blah discourse % curl https://starzen.space
curl: (60) SSL: no alternative certificate subject name matches target host name 'starzen.space'
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
أنا متأكد من أن الشهادة هي السبب، لأنه إذا قمت بتشغيل نفس الأمر في وضع غير آمن، أحصل على:
blah discourse % curl -k https://starzen.space
301 Moved Permanently
301 Moved Permanently
nginx/1.21.6
وهو ما أعتقد أنه ما أريده.
أعتقد أن ملف البرنامج النصي المعدل صحيح، هذا ما لدي:
root@starship-enterprise:/etc/runit/1.d# cat letsencrypt
#!/bin/bash
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf
issue_cert() {
LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh --issue $2 -d www.starzen.space -d starzen.space --keylength $1 -w /var/www/discourse/public
}
cert_exists() {
[[ "$(cd /shared/letsencrypt/www.starzen.space$1 && openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer | grep "OK")"]]
}
########################################################
# RSA cert
########################################################
issue_cert "4096"
if ! cert_exists ""; then
# Try to issue the cert again if something goes wrong
issue_cert "4096" "--force"
fi
<SNIP>
لقد قمت حتى بتشغيل هذا من سطر الأوامر داخل الحاوية، قبل ذلك قمت بنقل جميع ملفات الشهادات من الدليل المستهدف إلى دليل احتياطي حتى يتم تشغيل الأمر الصحيح للنطاق المزدوج:
root@starship-enterprise:/etc/runit/1.d# ./letsencrypt
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
[Sun 25 Sep 2022 05:50:04 PM UTC] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Sun 25 Sep 2022 05:50:04 PM UTC] Creating domain key
[Sun 25 Sep 2022 05:50:05 PM UTC] The domain key is here: /shared/letsencrypt/www.starzen.space/www.starzen.space.key
[Sun 25 Sep 2022 05:50:05 PM UTC] Multi domain='DNS:www.starzen.space,DNS:starzen.space'
[Sun 25 Sep 2022 05:50:05 PM UTC] Getting domain auth token for each domain
[Sun 25 Sep 2022 05:50:08 PM UTC] Getting webroot for domain='www.starzen.space'
[Sun 25 Sep 2022 05:50:08 PM UTC] Getting webroot for domain='starzen.space'
[Sun 25 Sep 2022 05:50:08 PM UTC] www.starzen.space is already verified, skip http-01.
[Sun 25 Sep 2022 05:50:08 PM UTC] Verifying: starzen.space
[Sun 25 Sep 2022 05:50:12 PM UTC] Pending
[Sun 25 Sep 2022 05:50:15 PM UTC] Success
[Sun 25 Sep 2022 05:50:15 PM UTC] Verify finished, start to sign.
[Sun 25 Sep 2022 05:50:15 PM UTC] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/590255196/128806215177'
[Sun 25 Sep 2022 05:50:16 PM UTC] Downloading cert.
[Sun 25 Sep 2022 05:50:16 PM UTC] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/03ff6b1b76f8516165032c6c2e02205a529b'
[Sun 25 Sep 2022 05:50:17 PM UTC] Cert success.
-----BEGIN CERTIFICATE-----
Lotsofcrazytext
-----END CERTIFICATE-----
[Sun 25 Sep 2022 05:50:17 PM UTC] Your cert is in /shared/letsencrypt/www.starzen.space/www.starzen.space.cer
[Sun 25 Sep 2022 05:50:17 PM UTC] Your cert key is in /shared/letsencrypt/www.starzen.space/www.starzen.space.key
[Sun 25 Sep 2022 05:50:17 PM UTC] The intermediate CA cert is in /shared/letsencrypt/www.starzen.space/ca.cer
[Sun 25 Sep 2022 05:50:17 PM UTC] And the full chain certs is there: /shared/letsencrypt/www.starzen.space/fullchain.cer
[Sun 25 Sep 2022 05:50:17 PM UTC] Installing key to:/shared/ssl/www.starzen.space.key
[Sun 25 Sep 2022 05:50:17 PM UTC] Installing full chain to:/shared/ssl/www.starzen.space.cer
[Sun 25 Sep 2022 05:50:17 PM UTC] Run reload cmd: sv reload nginx
ok: run: nginx: (pid 579) 35281s
[Sun 25 Sep 2022 05:50:17 PM UTC] Reload success
[Sun 25 Sep 2022 05:50:18 PM UTC] Domains not changed.
[Sun 25 Sep 2022 05:50:18 PM UTC] Skip, Next renewal time is: Wed 23 Nov 2022 10:01:01 AM UTC
[Sun 25 Sep 2022 05:50:18 PM UTC] Add '--force' to force to renew.
[Sun 25 Sep 2022 05:50:18 PM UTC] Installing key to:/shared/ssl/www.starzen.space_ecc.key
[Sun 25 Sep 2022 05:50:18 PM UTC] Installing full chain to:/shared/ssl/www.starzen.space_ecc.cer
[Sun 25 Sep 2022 05:50:18 PM UTC] Run reload cmd: sv reload nginx
ok: run: nginx: (pid 579) 35282s
[Sun 25 Sep 2022 05:50:18 PM UTC] Reload success
نجاح كبير في الغالب!!!، curl أصبح أكثر لطفًا الآن ويعطيني إعادة التوجيه:
blah discourse % curl https://starzen.space
301 Moved Permanently
301 Moved Permanently
nginx/1.21.6
و https://starzen.space في Firefox و Chrome يعمل الآن، ويعيد التوجيه إلى النطاق الفرعي الصحيح، ولكن ما زلت أحصل على الرسم البياني المروع للموت في Safari، ما الذي يحدث؟ لقد أعدت تشغيله ومسحت ذاكرة التخزين المؤقت لهذا الموقع:
بالنظر إلى الشهادة من المتصفح، أرى: