Skip to Content
DocsServer DeploymentFoundationNginx & Reverse Proxy

Nginx & Reverse Proxy

এই page-এ শিখবেন Nginx কেন দরকার, কিভাবে ইনস্টল করতে হয় এবং আপনার Next.js অ্যাপকে সরাসরি internet-এ serve করার জন্য এটি কিভাবে কনফিগার করতে হয়।

Why Nginx?

আপনার Next.js অ্যাপ npm run start দিলে সাধারণত http://localhost:3000-এ চলে। কিন্তু ব্যবহারকারীরা তো আর yoursite.com:3000 লিখে আসবে না — তারা শুধু yoursite.com লিখবে।

এখানেই Nginx-এর ভূমিকা। এটি একটি Reverse Proxy হিসেবে কাজ করে।

Reverse Proxy কী? সহজ ভাষায় — Nginx হলো আপনার অ্যাপের সামনে দাঁড়ানো একজন দারোয়ান। ব্যবহারকারী yoursite.com-এ request পাঠালে Nginx সেটি গ্রহণ করে, ভেতর থেকে localhost:3000-এ পাঠায়, অ্যাপের response নিয়ে আবার ব্যবহারকারীকে দেয়। ব্যবহারকারী জানেই না যে ভেতরে কী চলছে।

এর সুবিধাগুলো হলো:

  • আপনার অ্যাপ 3000 port-এ চললেও ব্যবহারকারী 80 (HTTP) বা 443 (HTTPS) port ব্যবহার করতে পারে
  • একই server-এ একাধিক অ্যাপ চালানো যায়
  • আপনার অ্যাপের সামনে একটি সিকিউরিটি স্তর যুক্ত হয়

Install Nginx

SERVER — Terminal
sudo apt update sudo apt install nginx -y

ইনস্টলের পর Nginx চালু হয়েছে কিনা চেক করুন:

SERVER — Terminal
sudo systemctl status nginx

Active: active (running) দেখলে সফল।

Understand the Config Structure

Nginx-এর কনফিগারেশন দুটি ফোল্ডারে থাকে:

/etc/nginx/ ├── sites-available/ ← কনফিগ ফাইল এখানে লেখা হয় └── sites-enabled/ ← এখানে শুধু symlink থাকে (যেগুলো active)

Symlink কী? এটি একটি shortcut-এর মতো। আপনি sites-available-এ আপনার কনফিগ লিখবেন এবং sites-enabled-এ সেটির একটি লিংক তৈরি করবেন। এতে কনফিগ enable/disable করা সহজ হয়।

Create Config File

sites-available-এ আপনার অ্যাপের জন্য একটি নতুন কনফিগ ফাইল তৈরি করুন:

SERVER — Terminal
sudo nano /etc/nginx/sites-available/myapp

নিচের কনফিগটি paste করুন:

/etc/nginx/sites-available/myapp
server { listen 80; server_name YOUR_DOMAIN_OR_IP; # server version লুকিয়ে রাখুন (Security Best Practice) server_tokens off; location / { # সব request আমাদের Next.js অ্যাপে পাঠাও proxy_pass http://localhost:3000; # আসল ব্যবহারকারীর IP অ্যাপকে জানাও proxy_set_header X-Real-IP $remote_addr; # original request-এর host name পাঠাও proxy_set_header Host $host; # proxy chain-এর সব IP রাখো proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

Ctrl+O, Enter দিয়ে সেভ করুন এবং Ctrl+X দিয়ে বের হন।

Enable the Site

এখন এই কনফিগটিকে sites-enabled-এ symlink করুন যাতে Nginx এটি পড়তে পারে:

SERVER — Terminal
# symlink তৈরি করুন sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ # default config সরিয়ে দিন যা conflict করতে পারে sudo rm /etc/nginx/sites-enabled/default

Test and Reload

কনফিগে কোনো ভুল আছে কিনা test করুন:

SERVER — Terminal
sudo nginx -t

syntax is ok এবং test is successful দেখলে Nginx reload করুন:

SERVER — Terminal
sudo systemctl reload nginx

Verify

এখন আপনার browser থেকে http://YOUR_SERVER_IP visit করুন। যদি Next.js অ্যাপ চালু থাকে, তবে সেটি দেখতে পাবেন।

Next.js অ্যাপ এখনো চালু না হলে Nginx একটি error দেখাবে। চিন্তা করবেন না — পরের page-এ আমরা PM2 দিয়ে অ্যাপটি background-এ চালু করব।

CyberSec Note

কনফিগে server_tokens off লেখার কারণটি মনে রাখবেন। এটি না লিখলে HTTP response header-এ Nginx-এর version দেখা যায় (যেমন: nginx/1.24.0)। একজন attacker এই তথ্য দিয়ে ওই version-এর known vulnerability খুঁজবে। এই একটি লাইন দিয়ে আপনি তাকে অনেক কম তথ্য দিচ্ছেন। এটিকে বলে Information Hiding — সিকিউরিটির একটি মৌলিক নীতি।

Quick Check

  • sudo systemctl status nginx দেখাচ্ছে active (running)?
  • sudo nginx -t দেখাচ্ছে syntax is ok?
  • sites-enabled-এ আপনার config-এর symlink আছে?
  • http://YOUR_SERVER_IP visit করলে connection হচ্ছে?

পরবর্তী → SSL & HTTPS

nginx bangla tutorial, reverse proxy bangla, nginx next.js setup, nginx sites-available bangla, server_tokens off bangla, nginx proxy_pass bangla, web server setup ubuntu bangla

Last updated on