এসো নিজে করি – ডেবিয়ানে এঞ্জিনএক্স ইনস্টলেশন এবং কনফিগারেশন

Nginx বা এঞ্জিনএক্স হল রাশিয়ান ডেভেলপার ইগর ভ্লাদিমির সিসোয়েভের তৈরী করা একটি লাইটওয়েট ওয়েব সার্ভার। স্ট্যাটিক ফাইল সার্ভ করার ক্ষেত্রে অসাধারণ পারফর্ম্যান্সের কারনে এঞ্জিনএক্স বিশ্বব্যাপী ব্যাপক জনপ্রিয়। এছাড়া ফাস্টসিজিআই ব্যবহার করে এঞ্জিনএক্স কে যেকোন সার্ভার সাইড ল্যাঙ্গুয়েজের সাথে ব্যবহার করা যায়। এই আর্টিকেলে আমরা দেখব কিভাবে ডেবিয়ান অপারেটিং সিস্টেমে আমরা এঞ্জিনএক্স ইনস্টল এবং কনফিগার করতে পারি। পরবর্তী আর্টিকেলে আমরা ফাস্টসিজিআই প্রটোকলের সাহায্যে এঞ্জিনএক্সের মাধ্যমে পিএইচপি ফাইল সার্ভ করা শিখব 🙂

এঞ্জিনএক্স ইনস্টল করা

প্রথমেই যেটা করতে হবে সেটা হল এপিটি প্যাকেজ ম্যানেজার লেটেস্ট রিপো ইনফরমেশন দিয়ে আপডেট করা। এটা আমরা কমবেশী সবাই জানি কিভাবে করতে হয়। আপনার সার্ভারের টার্মিনালে নিচের কমান্ড দিন। আপনি রুট ইউজার হিসেবে লগইন না করলে না করলে এবং সুডুয়ার্স লিস্টে আপনার ইউজার অ্যাড করা থাকলে কমান্ডের আগে sudo ব্যবহার করতে হবে 🙂

[sourcecode language=”shell”]
apt-get update
[/sourcecode]

এবার আমরা নিচের কমান্ড দিয়ে এঞ্জিনএক্স ইনস্টল করব। কমান্ড দেয়ার কিছুক্ষনের মাঝেই দেখতে পাবেন এঞ্জিনএক্স ইনস্টল হয়ে গেছে

[sourcecode language=”shell”]
apt-get install nginx
[/sourcecode]

ইনস্টল হয়ে গেলে চলুন এঞ্জিনএক্স কে স্টার্ট করি নিচের কমান্ড দিয়ে। যদি এঞ্জিনএক্স চালু হতে ব্যর্থ হয়, বা আগে থেকে অ্যাপাচি সার্ভার চালু থাকে তবে আগে অ্যাপাচিকে অফ করে নিন

[sourcecode language=”shell”]
service apache2 stop
service nginx start
[/sourcecode]

এঞ্জিনএক্সের ভার্সন আপগ্রেড করা

ডেবিয়ান ৭ এবং ডেবিয়ান ৬ এ এঞ্জিনএক্স ইনস্টল করার পদ্ধতি একই। তবে ডিফল্ট রিপোজিটরী তে ডেবিয়ান ৭ এর ক্ষেত্রে এঞ্জিনএক্সে 1.2x ভার্সন এবং ডেবিয়ান ৬ এর ক্ষেত্রে 0.7x ভার্সন আছে। আমরা যদি লেটেস্ট ভার্সনে আপগ্রেড করতে চাই (এই আর্টিকেল লেখার সময় এঞ্জিনএক্সের লেটেস্ট ভার্সন হল 1.4.1) তবে নিচের স্টেপ গুলো ফলো করতে হবে

এঞ্জিনএক্স আপগ্রেড করতে হলে আপনার প্যাকেজ ম্যানেজার এর সোর্স লিস্ট পরিবর্তন করে সেখানে এঞ্জিনএক্সের রিপোজিটরী যোগ করতে হবে। এজন্য আপনার পছন্দের এডিটর দিয়ে /etc/apt/sources.list ফাইলটি খুলে নিচের লাইন দুটো যোগ করে দিন

ডেবিয়ান ৭ এর ক্ষেত্রে
[sourcecode language=”shell”]
deb http://nginx.org/packages/debian/ wheezy nginx
deb-src http://nginx.org/packages/debian/ wheezy nginx
[/sourcecode]

ডেবিয়ান ৬ এর ক্ষেত্রে
[sourcecode language=”shell”]
deb http://nginx.org/packages/debian/ squeezy nginx
deb-src http://nginx.org/packages/debian/ squeezy nginx
[/sourcecode]

এবার /etc/apt/sources.list ফাইলটি সেভ করে টার্মিনালে চলে আসুন। এখন যেটা করতে হবে সেটা হল ডেবিয়ান কে বলে দিতে হবে যে আমাদের সদ্য যোগ করা রিপোজিটরী দুটো ট্রাস্টেবল। সেটার জন্য এঞ্জিনএক্সের সিগনেচার কি ডাউনলোড করে এপিটি প্যাকেজ ম্যানেজারে যোগ করে দিতে হবে। এর জন্য টার্মিনালে নিচের কমান্ড গুলো দিন

[sourcecode language=”shell”]
wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
rm nginx_signing.key
[/sourcecode]

এরপরের কাজ খুব সহজ। টার্মিনালে শুধু কমান্ড দিন নিচের মত, ব্যাস আপনার এঞ্জিনএক্স লেটেস্ট ভার্সনে আপগ্রেড হয়ে যাবে
[sourcecode language=”shell”]
apt-get update
apt-get upgrade nginx
[/sourcecode]

এঞ্জিনএক্সের মাধ্যমে আপনার ডোমেইনের স্ট্যাটিক ফাইল সার্ভ করা

আমাদের সার্ভারে এখন এঞ্জিনএক্সের লেটেস্ট ভার্সন রান করছে। চলুন দেখি কিভাবে এখন আমরা আমাদের ডোমেইন কনফিগার করে স্ট্যাটিক ফাইল গুলো এঞ্জিনএক্সের মাধ্যমে সার্ভ করতে পারি। যারা অ্যাপাচি ব্যবহার করেন তারা এই ডোমেইন কনফিগারেশন করা কে ভার্চুয়াল হোস্ট কনফিগারেশন বলে চিনতে পারেন। তবে এঞ্জিনএক্সের ক্ষেত্রে একে ভার্চুয়াল হোস্ট না বলে “সার্ভার ব্লক” বলা হয়। তো চলুন, আমরা আমাদের ডোমেইনের সার্ভার ব্লক কনফিগার করি 🙂

এঞ্জিনএক্সের সার্ভার ব্লক গুলো থাকে /etc/nginx/sites-available ফোল্ডারে। সেগুলো এনাবল করতে হলে ফাইলগুলো (বা তাদের একটা সিম্বোলিক লিঙ্ক) রেখে দিতে হয় /etc/nginx/sites-enabled ফোল্ডারে। আপনি যদি /etc/nginx/sites-available ফোল্ডারে আসেন, তাহলে দেখতে পাবেন যে সেখানে একটি ডিফল্ট সার্ভার ব্লক ফাইল রয়েছে default নামে। আমরা আপাতত এটাই এডিট করব। বাই ডিফল্ট সেখানে নিচের মত কন্টেন্ট রয়েছে

[sourcecode language=”shell”]
# You may add here your
# server {
# …
# }
# statements for each of your virtual hosts to this file

##
# You should look at the following URL’s in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

server {
#listen 80; ## listen for ipv4; this line is default and implied
#listen [::]:80 default_server ipv6only=on; ## listen for ipv6

root /usr/share/nginx/www;
index index.html index.htm;

# Make site accessible from http://localhost/
server_name localhost;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.html;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}

location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
allow ::1;
deny all;
}

# Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
#location /RequestDenied {
# proxy_pass http://127.0.0.1:8080;
#}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root /usr/share/nginx/www;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
# fastcgi_index index.php;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
#location ~ /\.ht {
# deny all;
#}
}
[/sourcecode]

আপাতত এই ফাইলে দুইটি লাইন খেয়াল করুন, একটা হল যেখানে ডকুমেন্ট রুট ডিফাইন করা হয়েছে “root” দিয়ে (লাইন নম্বর ২৪), এবং যেখানে সার্ভারের নাম ডিফাইন করা হয়েছে “server_name” দিয়ে (লাইন নম্বর ২৮)। আমরা আমাদের ফাইল গুলো রাখব আমাদের ডকুমেন্ট রুট “/usr/share/nginx/www” এখানে, আপনি এটা নিজের পছন্দ মত পরিবর্তন করতে পারেন। সার্ভার নেমের জায়গায় লোকালহোস্টের বদলে আপনার ডোমেইন নাম লিখে দিন, যেমন “exampledomain.com”। এই পরিবর্তন করার পরে, কমেন্ট করা লাইনগুলো মুছে দেয়ার পরে এবং কিছু অপ্রয়োজনীয় অংশ বাদ দেয়ার পরে আমাদের সার্ভার ব্লক ফাইল (default) দেখাবে নিচের মত। পরিবর্তন করার আগে আপনার ডোমেইনের ডিএনএস পরিবর্তন করে এই সার্ভারে পয়েন্ট করতে ভুলবেন না। আপনার ডোমেইনের ডিএনএস কন্ট্রোল প্যানেলে একটি A Record যোগ করে সহজেই এই কাজ করতে পারেন, অথবা আপনার ডোমেইন প্রোভাইডারের সাহায্য নিন

[sourcecode language=”shell”]
server {
#listen 80; ## listen for ipv4; this line is default and implied
#listen [::]:80 default_server ipv6only=on; ## listen for ipv6

root /usr/share/nginx/www;
index index.html index.htm;

# Make site accessible from http://localhost/
server_name exampledomain.com;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.html;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
}
[/sourcecode]

এবার এঞ্জিনএক্স রিস্টার্ট করুন নিচের মত, ব্যাস এখন থেকে ব্রাউজারে আপনার ডোমেইন ওপেন করলে দেখবেন এঞ্জিনএক্স আপনার ফাইলগুলো ঠিকমত সার্ভ করছে।

[sourcecode language=”shell”]
service nginx restart
[/sourcecode]

আগেও বলেছি যে স্ট্যাটিক ফাইল সার্ভ করার ক্ষেত্রে এঞ্জিনএক্সের পারফর্ম্যান্স পুরোই অসাধারণ। এছাড়াও এঞ্জিনএক্স টিউন এবং কনফিগার করা অনেক অনেক সহজ। আপনি একবার এঞ্জিনএক্স ব্যবহার করা শুরু করলে আমার ধারনা আর ফিরতে পারবেন না 🙂

পরবর্তী আর্টিকেলে আমরা দেখব কিভাবে এঞ্জিনএক্সের মাধ্যমে পিএইচপি ফাইল সার্ভ করতে পারি।