Nginx reverse proxy ও বিনামূল্যের HTTPS (Let's Encrypt)
Nginx আপনার অ্যাপের সামনে বসে HTTPS সামলায় ও request এগিয়ে দেয়। মানিয়ে নেওয়ার মতো ছোট, নিরাপদ কনফিগারেশন দেখুন।

Reverse proxy ইন্টারনেট থেকে request নিয়ে আপনার অ্যাপে এগিয়ে দেয়। Nginx প্রচলিত পছন্দ। আপনার Node, Python বা অন্য অ্যাপের সামনে এটি বসালে পাবেন:
- এক জায়গায় সামলানো HTTPS।
- Static ফাইল সার্ভ ও caching।
- অ্যাপের সুরক্ষা: compression, আকারের সীমা, rate limiting এবং অ্যাপ ব্যক্তিগতভাবে শোনার সময় স্থির public port (80 ও 443)।
- এক server-এ অনেক সাইট চালানোর ক্ষমতা।
ধাপ ১: অ্যাপ স্থানীয় port-এ চালান
অ্যাপ শুধু 127.0.0.1-এ শুনুক (যেমন port 3000), যাতে বাইরে থেকে সরাসরি পৌঁছানো না যায়।
ধাপ ২: ন্যূনতম server block
/etc/nginx/sites-available/example বানিয়ে sites-enabled-এ link করুন।
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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;
}
}
proxy_set_header লাইনগুলো আসল host, visitor-এর IP ও protocol অ্যাপে পাঠায়। এগুলো ছাড়া অ্যাপ প্রতিটি request 127.0.0.1 থেকে আসছে দেখে।
পরীক্ষা ও reload:
sudo nginx -t
sudo systemctl reload nginx
nginx -t প্রয়োগের আগে syntax যাচাই করে। সবসময় চালান।
ধাপ ৩: Certbot দিয়ে বিনামূল্যের HTTPS
আগে আপনার domain-এর DNS server-এ নির্দেশ করুন। তারপর:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
Certbot বিনামূল্যের Let's Encrypt certificate আনে, server block 443-এ TLS সহ শোনার জন্য বদলায় এবং HTTP থেকে HTTPS redirect যোগ করতে পারে। Certificate প্রায় ৯০ দিন চলে, আর Certbot স্বয়ংক্রিয়ভাবে নবায়নের timer বসায়। যাচাই করুন:
sudo certbot renew --dry-run
ধাপ ৪: যুক্তিসঙ্গত hardening
server_tokens off; # Nginx-এর সংস্করণ লুকানো
client_max_body_size 10m; # upload-এর আকার সীমা
add_header X-Content-Type-Options nosniff always;
add_header Strict-Transport-Security "max-age=31536000" always; # সর্বত্র HTTPS ঠিক হওয়ার পর
আরও কাজের: gzip compression, fingerprint করা static ফাইলে লম্বা cache সময়, এবং ব্যয়বহুল endpoint-এ rate limit করতে limit_req।
সামনে CDN থাকলে (যেমন Cloudflare)
তখন আপনার server visitor-এর নয়, CDN-এর IP দেখে। CDN-এর প্রকাশিত IP পরিসর থেকেই শুধু তার CF-Connecting-IP header বিশ্বাস করতে real-IP module ব্যবহার করুন, আর origin firewall এমনভাবে বাঁধুন যাতে শুধু CDN 80 ও 443 port-এ পৌঁছায়।
সাধারণ সমস্যা
- 502 Bad Gateway: অ্যাপ চলছে না বা অন্য port-এ শুনছে।
systemctl statusও port দেখুন। - Redirect loop: অ্যাপ ও Nginx দুটোই HTTPS-এ redirect করছে।
X-Forwarded-Protoপাঠান এবং অ্যাপকে তা বিশ্বাস করতে দিন। - WebSocket কাজ করছে না:
proxy_set_header Upgrade $http_upgrade;ওproxy_set_header Connection "upgrade";যোগ করুন। - Certificate নবায়ন ব্যর্থ: port 80 বন্ধ বা DNS বদলেছে।
মূল কথা: অ্যাপ localhost-এ রাখুন, বিনামূল্যের স্বয়ংক্রিয় নবায়নযোগ্য certificate দিয়ে Nginx-কে HTTPS সামলাতে দিন, proxy header পাঠান, reload-এর আগে সবসময় nginx -t চালান, এবং কয়েকটি hardening header যোগ করুন।
Linux ও DevOps সিরিজ, পর্ব ১ (server ও container): 3 নম্বর (মোট 5)। আগের লেখা: systemd: অ্যাপ service হিসেবে চালান, timer-এ schedule করুন.


