Loyihani deploy qilish

Domen ulash va HTTPS

Ilovamiz serverda ishlayapti, lekin unga hali 203.0.113.10 kabi IP orqali kirilyapti va ulanish shifrlanmagan (HTTP). Bu darsda ikki muhim qadamni bajaramiz: domenni serverga ulaymiz (chiroyli manzil), va HTTPSni yoqamiz (xavfsiz, shifrlangan ulanish) โ€” bepul Let's Encrypt sertifikati bilan. Shundan so'ng saytingiz https://mening-saytim.uz orqali qulflangan brauzer belgisi bilan ochiladi.

Bu dars oldingi VPS darsining davomi. Biz o'sha yerda yozgan Nginx reverse proxy config'ini domen va SSL bilan kengaytiramiz. Serverning IP'si โ€” 203.0.113.10, domen โ€” mening-saytim.uz.

1-bosqich: Domen sotib olish

Domen โ€” yillik ijara asosida olinadi. Uni registrator (domen sotuvchisi) orqali olasiz. Mashhur xalqaro registratorlar: Namecheap, Cloudflare Registrar, Porkbun, GoDaddy. .uz domenlari uchun mahalliy registratorlar ham bor.

Cloudflareni faqat registrator sifatida emas, balki bepul DNS boshqaruvi, DDoS himoyasi va CDN sifatida ham ishlatish mashhur. Domenni istalgan joydan olib, DNS'ni Cloudflare'ga o'tkazish keng tarqalgan amaliyot.

2-bosqich: DNS yozuvlarini tushunish

Domenni serverga ulash โ€” bu DNS yozuvlarini to'g'ri sozlash demakdir. DNS yozuvlari domen nomini IP manzil yoki boshqa manzillar bilan bog'laydi. Eng muhim ikki tur:

Boshqa yozuvlar ham bor โ€” AAAA (IPv6 uchun), MX (elektron pochta uchun), TXT (tekshiruv va sozlamalar uchun) โ€” lekin sayt ulash uchun asosan A va CNAME yetadi.

# Registrator panelida sozlanadigan DNS yozuvlari (misol):

# Turi   Nom    Qiymat            TTL
# A      @      203.0.113.10      3600
# CNAME  www    mening-saytim.uz  3600

Bu yerda @ โ€” asosiy domenni (mening-saytim.uz) bildiradi, www esa www.mening-saytim.uz pastki domenini. Ikkinchi qator wwwli variantni asosiy domenga yo'naltiradi.

TTL (Time To Live) โ€” yozuvning necha soniya keshlanishini bildiradi. Kichik qiymat (masalan, 300) o'zgarishlar tez tarqalishini ta'minlaydi, lekin DNS'ga ko'proq yuk beradi. Odatda 3600 (bir soat) yaxshi muvozanat.

3-bosqich: Domenni serverga ulash

DNS'da A yozuvini serveringiz IP'siga sozlaganingizdan so'ng, o'zgarish internet bo'ylab tarqalishi kerak. Bu tarqalish (propagation) deb ataladi va bir necha daqiqadan bir necha soatgacha davom etishi mumkin. Domen serverga ulanganini tekshirish uchun:

# Domen qaysi IP'ga ko'rsatayotganini tekshirish:
$ dig +short mening-saytim.uz
203.0.113.10

# yoki:
$ nslookup mening-saytim.uz

Agar chiqqan IP sizning serveringiznikiga to'g'ri kelsa โ€” domen ulandi. Endi brauzerda http://mening-saytim.uz yozib, saytingizni ochib ko'rishingiz mumkin (VPS darsida Nginx config'ida server_name allaqachon shu domenga sozlangan edi).

Agar domen ochilmasa, avval DNS tarqalishini kuting va dig bilan tekshiring. Keyin serverda xavfsizlik devori (firewall) 80 va 443 portlarini ochganiga ishonch hosil qiling: sudo ufw allow 'Nginx Full'. Ko'p muammolar aynan yopiq portlardan kelib chiqadi.

4-bosqich: HTTPS nima uchun kerak?

HTTPS โ€” bu shifrlangan HTTP. Foydalanuvchi va server orasidagi barcha ma'lumot (parollar, shaxsiy ma'lumotlar, to'lovlar) shifrlangan holda uzatiladi, shuning uchun uni oraliqda o'g'irlab bo'lmaydi. HTTPS SSL/TLS sertifikati orqali ishlaydi.

Ilgari SSL sertifikat pullik va murakkab edi. Endi esa Let's Encrypt โ€” bepul, avtomatik sertifikatlar beruvchi hokim organ (CA) tufayli HTTPS'ni bir necha buyruq bilan yoqish mumkin.

5-bosqich: Let's Encrypt va certbot

certbot โ€” Let's Encrypt sertifikatlarini avtomatik oladigan va Nginx'ga o'rnatadigan vosita. U sizning domeningizga egaligingizni tekshiradi, sertifikat oladi va Nginx config'ini o'zi HTTPS uchun sozlaydi. Avval uni o'rnatamiz:

# certbot va Nginx plaginini o'rnatish:
$ sudo apt install -y certbot python3-certbot-nginx

Endi certbot'ni ishga tushiramiz. U Nginx config'ingizdagi server_nameni o'qib, domenlarni topadi va sertifikat oladi:

# Domen uchun sertifikat olish va Nginx'ni sozlash:
$ sudo certbot --nginx -d mening-saytim.uz -d www.mening-saytim.uz

certbot bir necha savol beradi: elektron pochtangiz (muhim ogohlantirishlar uchun), shartlarga rozilik, va โ€” eng muhimi โ€” HTTP'ni HTTPS'ga yo'naltirishni xohlaysizmi degan savol. "Ha" deb javob bersangiz, u buni avtomatik sozlaydi.

# certbot muvaffaqiyatli tugagach ko'rsatadi:
Congratulations! You have successfully enabled HTTPS on
https://mening-saytim.uz and https://www.mening-saytim.uz

Certificate saved at: /etc/letsencrypt/live/mening-saytim.uz/fullchain.pem
certbot ishlashi uchun 80-port ochiq bo'lishi va domen allaqachon serveringiz IP'siga ko'rsatayotgan bo'lishi shart โ€” chunki Let's Encrypt domenga egaligingizni aynan shu domen orqali serverga ulanib tekshiradi. Shuning uchun avval DNS'ni sozlab, keyin certbot'ni ishga tushiring.

6-bosqich: HTTP dan HTTPS ga yo'naltirish

certbot HTTP'ni HTTPS'ga yo'naltirishni avtomatik sozlaganida, Nginx config'ingizga taxminan quyidagicha o'zgarishlar qo'shiladi. Natijadagi config ikki server blokidan iborat bo'ladi:

# certbot tomonidan yangilangan config (soddalashtirilgan)

# 1-blok: HTTP (80) โ€” HTTPS'ga yo'naltiradi
server {
    listen 80;
    server_name mening-saytim.uz www.mening-saytim.uz;
    return 301 https://$host$request_uri;
}

# 2-blok: HTTPS (443) โ€” asosiy ish shu yerda
server {
    listen 443 ssl;
    server_name mening-saytim.uz www.mening-saytim.uz;

    ssl_certificate /etc/letsencrypt/live/mening-saytim.uz/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mening-saytim.uz/privkey.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Muhim qator โ€” birinchi blokdagi return 301 https://$host$request_uri;. U 80-portga (HTTP) kelgan har qanday so'rovni 301 (doimiy yo'naltirish) bilan HTTPS versiyasiga jo'natadi. Shu tufayli foydalanuvchi http:// yozsa ham, avtomatik https://ga o'tadi.

Ikkinchi blokdagi proxy_pass http://localhost:3000 โ€” bu VPS darsidagi reverse proxy'ning aynan o'zi. Ya'ni HTTPS Nginx darajasida hal qilinadi (SSL termination), orqadagi Node.js ilova esa oddiy HTTP bilan ishlayveradi. Ilovaga shifrlash bilan shug'ullanish shart emas.
Node.js ilovangizda foydalanuvchi HTTP yoki HTTPS bilan kelganini bilish uchun X-Forwarded-Proto sarlavhasidan foydalaning (config'da uni uzatyapmiz). Express'da app.set('trust proxy', 1) qo'shsangiz, req.secure to'g'ri ishlaydi.

7-bosqich: Sertifikatni avtomatik yangilash

Let's Encrypt sertifikatlari 90 kun amal qiladi โ€” bu qisqa muddat ataylab tanlangan (xavfsizlik uchun). Yaxshi xabar: certbot yangilanishni avtomatik bajaradi. O'rnatishda u tizim taymeri (systemd timer yoki cron) qo'shadi. Uning ishlashini tekshirish uchun:

# Yangilashni sinov rejimida tekshirish (haqiqiy yangilamaydi):
$ sudo certbot renew --dry-run

# Avtomatik yangilash taymeri holatini ko'rish:
$ sudo systemctl status certbot.timer

Agar --dry-run muvaffaqiyatli o'tsa โ€” hech narsa qilishingiz shart emas, certbot muddati tugashiga yaqin sertifikatni o'zi yangilaydi va Nginx'ni qayta yuklaydi.

Sertifikat avtomatik yangilanishiga tayaning, lekin certbot ishlab turgan pochtangizdagi ogohlantirishlarni e'tiborsiz qoldirmang. Agar biror sabab (masalan, 80-port yopilib qolishi) tufayli yangilash muvaffaqiyatsiz bo'lsa, sertifikat muddati tugab, sayt HTTPS ogohlantirishi bilan ochiladi. Bu foydalanuvchilarni qo'rqitadi.

Yakuniy tekshiruv

Hammasi to'g'ri sozlanganini quyidagicha tekshiring:

  1. Brauzerda http://mening-saytim.uz ochib โ€” u avtomatik https://ga o'tishini ko'ring;
  2. Manzil satridagi qulf belgisi paydo bo'lganini tasdiqlang;
  3. wwwli va wwwsiz variantlar ham ishlashini tekshiring;
  4. Terminalda: curl -I http://mening-saytim.uz โ€” javobda 301 va Location: https://... bo'lishi kerak.
# HTTP yo'naltirishini terminalda tekshirish:
$ curl -I http://mening-saytim.uz

HTTP/1.1 301 Moved Permanently
Location: https://mening-saytim.uz/
SSL sozlamangiz sifatini SSL Labs (ssllabs.com/ssltest) kabi bepul xizmatda tekshirishingiz mumkin. U sertifikat, shifrlash usullari va sozlamalarga baho (A dan F gacha) beradi. Standart certbot sozlamalari odatda yaxshi baho oladi.

Xulosa