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.
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.
- Domen nomini tanlaysiz (masalan,
mening-saytim.comyoki.uz); - Uning bo'shligini tekshirasiz (band bo'lmasa);
- Yillik to'lovni amalga oshirasiz (odatda 10-15 dollar/yil, ba'zi zonalar qimmatroq);
- Domen sizning hisobingizga bog'lanadi va uni DNS orqali sozlaysiz.
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:
- A yozuvi (A record) โ domenni to'g'ridan-to'g'ri IPv4 manzilga bog'laydi. Masalan,
mening-saytim.uz โ 203.0.113.10; - CNAME yozuvi โ bir domenni boshqa domenga (nomga) bog'laydi. Masalan,
www.mening-saytim.uz โ mening-saytim.uz.
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.
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).
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.
- Xavfsizlik โ ma'lumot shifrlangani uchun oraliqda o'qib bo'lmaydi;
- Ishonch โ brauzer qulf belgisini ko'rsatadi; HTTP'da esa "xavfli" ogohlantirishi chiqadi;
- SEO va imkoniyatlar โ qidiruv tizimlari HTTPS'ni afzal ko'radi; ko'p zamonaviy brauzer imkoniyatlari (masalan, geolokatsiya, servis-worker) faqat HTTPS'da 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
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.
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.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.
Yakuniy tekshiruv
Hammasi to'g'ri sozlanganini quyidagicha tekshiring:
- Brauzerda
http://mening-saytim.uzochib โ u avtomatikhttps://ga o'tishini ko'ring; - Manzil satridagi qulf belgisi paydo bo'lganini tasdiqlang;
wwwli vawwwsiz variantlar ham ishlashini tekshiring;- Terminalda:
curl -I http://mening-saytim.uzโ javobda301vaLocation: 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/
Xulosa
- Domen registrator orqali yillik ijaraga olinadi (Namecheap, Cloudflare, Porkbun);
- A yozuvi domenni server IP'siga, CNAME esa bir domenni boshqasiga bog'laydi;
- DNS o'zgarishi tarqalishi vaqt oladi;
digyokinslookupbilan tekshiriladi; - HTTPS ulanishni shifrlaydi; bepul sertifikatni Let's Encrypt + certbot beradi;
sudo certbot --nginx -d domensertifikat oladi va Nginx'ni avtomatik sozlaydi;- HTTP โ HTTPS yo'naltirish
return 301 https://...orqali; certbot buni avtomatik qo'shadi; - Sertifikat 90 kun amal qiladi va certbot uni avtomatik yangilaydi โ
certbot renew --dry-runbilan tekshiring.