সার্ভার কনফিগারেশন

NGINX আর Apache কনফিগ স্নিপেট

প্রায় প্রতিটি সাইটের লাগে এমন পরিবর্তনের জন্য টেস্ট করা স্নিপেট।

NGINX আর Apache-এর জন্য ৬টি স্নিপেট, সাথে একটি চেকলিস্ট

HTTP থেকে HTTPS রিডাইরেক্ট

একটি পার্মানেন্ট (301) রিডাইরেক্ট দিয়ে প্রতিটি প্লেইন-HTTP রিকোয়েস্ট HTTPS-এ পাঠান। example.com আপনার ডোমেইন দিয়ে বদলে দিন।

NGINX, সাইটের কনফিগে:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

Apache, .htaccess-এ (mod_rewrite এনেবল থাকতে হবে):

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

নোট

  • পার্মানেন্ট মুভের জন্য 301 ব্যবহার করুন
  • আগে SSL সার্টিফিকেট ইনস্টল করুন
  • রিডাইরেক্ট লুপ করছে কিনা চেক করুন

www থেকে বেয়ার ডোমেইনে রিডাইরেক্ট

আপনার সাইটের জন্য একটি অ্যাড্রেস বেছে নিন, যাতে সার্চ ইঞ্জিন প্রতিটি পেজের দুটি কপি না দেখে।

NGINX:

server {
    listen 443 ssl;
    server_name www.example.com;
    # ssl_certificate and ssl_certificate_key lines here
    return 301 https://example.com$request_uri;
}

Apache, .htaccess-এ:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]

নোট

  • একটি ক্যানোনিকাল অ্যাড্রেস
  • সার্টিফিকেটে www-ও কভার থাকতে হবে
  • www ফোর্স করতে রুলগুলো বদলে দিন

রেসপন্স কমপ্রেস করা

টেক্সট রেসপন্স কমপ্রেস করলে পেজ ছোট আর লোড হতে দ্রুত হয়।

NGINX, http বা server ব্লকে:

gzip on;
gzip_min_length 1024;
gzip_types text/css application/javascript application/json image/svg+xml;

Apache, .htaccess-এ (mod_deflate এনেবল থাকতে হবে):

AddOutputFilterByType DEFLATE text/html text/css application/javascript application/json image/svg+xml

নোট

  • টেক্সট কমপ্রেস করুন, ছবি না
  • NGINX ডিফল্টে text/html কমপ্রেস করে
  • খুব ছোট ফাইল স্কিপ করুন

স্ট্যাটিক ফাইল ক্যাশ করা

ব্রাউজারকে ছবি, CSS আর স্ক্রিপ্ট রেখে দিতে বলুন, যাতে বারবার ভিজিটে দ্রুত লোড হয়।

NGINX, server ব্লকে:

location ~* \.(css|js|png|jpg|jpeg|gif|svg|webp|woff2)$ {
    expires 30d;
    add_header Cache-Control "public";
}

Apache, .htaccess-এ (mod_expires এনেবল থাকতে হবে):

ExpiresActive On
ExpiresByType text/css "access plus 30 days"
ExpiresByType application/javascript "access plus 30 days"
ExpiresByType image/webp "access plus 30 days"

নোট

  • নাম বদলালে যাদের ফাইলনামও বদলায়, সেগুলো ক্যাশ করুন
  • HTML বেশিদিন ক্যাশ করবেন না
  • ৩০ দিন একটি নিরাপদ শুরু

সিকিউরিটি হেডার যোগ করা

এই হেডারগুলো ক্লিকজ্যাকিং আর কনটেন্ট স্নিফিংয়ের মতো কমন ব্রাউজার অ্যাটাক বন্ধ করে।

NGINX, server ব্লকে:

add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

Apache, .htaccess-এ (mod_headers এনেবল থাকতে হবে):

Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"

নোট

  • বেশিরভাগ সাইটের জন্য নিরাপদ ডিফল্ট
  • সোর্স জানা হলে একটি Content-Security-Policy যোগ করুন
  • ব্রাউজারের ডেভ টুলে হেডার চেক করুন

টেস্ট আর রিলোড

রিলোড করার আগে সিনট্যাক্স চেক করুন, যাতে একটি টাইপোর জন্য সাইট ডাউন না হয়। আপনার ম্যানেজ করা একটি সার্ভারে:

sudo nginx -t
sudo systemctl reload nginx

sudo apachectl configtest
sudo systemctl reload apache2

Debian আর Ubuntu-এ Apache সার্ভিসের নাম apache2; অন্য সিস্টেমে প্রায়ই httpd। একটি .htaccess পরিবর্তন পরের রিকোয়েস্টেই কার্যকর হয়, কোনো রিলোড ছাড়াই।

নোট

  • প্রতিটি রিলোডের আগে টেস্ট করুন
  • রিলোড করুন, রিস্টার্ট না
  • কার্যকর কনফিগের একটি কপি রাখুন

চেকলিস্ট

সার্ভার কনফিগ এডিট করা: করুন ও এড়িয়ে চলুন।

Do

  • আগে ফাইল ব্যাকআপ নিন

    পরিবর্তনের আগে কার্যকর কনফিগের কপি রাখুন।

  • সিনট্যাক্স টেস্ট করুন

    nginx -t বা apachectl configtest চালান।

  • স্টেজিংয়ে পরিবর্তন টেস্ট করুন

    তারপর লাইভ সার্ভারে কপি করুন।

  • আপনার রুলে কমেন্ট দিন

    পরের মানুষের জন্য রুল কেন আছে বলে দিন।

Avoid

  • লাইভ সার্ভার ব্লাইন্ডলি এডিট করা

    একটি টাইপোই পুরো সার্ভারের সব সাইট বন্ধ করে দিতে পারে।

  • রিলোড করলেই চলত, রিস্টার্ট করা

    রিলোড কানেকশন খোলা রাখে।

  • না বুঝে স্নিপেট কপি করা

    ব্যবহারের আগে প্রতিটি লাইন কী করে জানুন।

  • মডিউল না থাকলেও IfModule-ফ্রি রুল ব্যবহার করা

    মডিউল এনেবল না থাকলে Apache এরর দেয়।

সাধারণ প্রশ্ন

সার্ভার কনফিগ নিয়ে প্রশ্ন

NGINX স্নিপেট কোথায় রাখব?

আপনার সাইটের server ব্লকে, সাধারণত /etc/nginx/sites-available/ বা /etc/nginx/conf.d/-এর নিচে একটি ফাইলে। gzip-এর মতো সেটিংস nginx.conf-এর http ব্লকেও যেতে পারে।

শেয়ার্ড হোস্টিংয়ে কি এগুলো ব্যবহার করতে পারি?

শুধু Apache .htaccess রুলগুলো, আর শুধু যদি আপনার হোস্ট Apache চালায় আর এটি অ্যালাউ করে। NGINX বা মূল Apache কনফিগ এডিট করতে আপনার নিজের কন্ট্রোলে একটি সার্ভার লাগে, যেমন একটি VPS।

301 আর 302 রিডাইরেক্টের পার্থক্য কী?

301 পার্মানেন্ট, আর সার্চ ইঞ্জিন পুরোনো পেজের র‍্যাঙ্কিং নতুন অ্যাড্রেসে নিয়ে যায়। 302 টেম্পোরারি।

.htaccess পরিবর্তনের পর আমার সাইটে এরর দেখাচ্ছে, কেন?

সাধারণত একটি টাইপো, বা এনেবল নেই এমন একটি মডিউলের জন্য ডিরেক্টিভ। পরিবর্তনটি আগে ফিরিয়ে নিন, তারপর লাইন বাই লাইন আবার যোগ করুন।

সার্ভার কনফিগ এডিট করতে কি VPS লাগবে?

NGINX বা মূল Apache কনফিগের জন্য, হ্যাঁ। একটি VPS বা একটি Droplet আপনাকে root অ্যাক্সেস দেয়।

আপনার ওয়েব সার্ভারের পুরো নিয়ন্ত্রণ চান?

ঘণ্টা হিসেবে বিল করা, root অ্যাক্সেসসহ একটি VPS।