PHP-FPM (ফাস্ট প্রসেস ম্যানেজার) পিএইচপি স্ক্রিপ্ট চালানোর জন্য ফাস্টসিজিআই-এর একটি পৃথক বাস্তবায়ন। আপনি LAMP স্ট্যাকের (NGINX, Apache এবং mod_php মডিউল) তুলনায় আপনার ওয়েবসাইটের জন্য একটি দ্রুত এবং উচ্চ কার্যক্ষমতা সম্পন্ন ওয়েব সার্ভার তৈরি করতে NGINX ওয়েব সার্ভার (প্রসেসিং স্ট্যাটিক) এবং PHP-FPM-এর সংমিশ্রণ ব্যবহার করতে পারেন।
LEMP একটি ওপেন সোর্স সফ্টওয়্যার সেট যা সাধারণত ওয়েব সাইট হোস্টিং এবং ওয়েব অ্যাপ্লিকেশন প্রকাশের জন্য একসাথে ইনস্টল করা হয়৷ এই সংক্ষিপ্ত রূপটি OS Linux-এর একটি সেটকে বোঝায় , Nginx ওয়েব সার্ভার (এটি আরো জনপ্রিয় LAMP স্ট্যাকে Apache প্রতিস্থাপন করে), MySQL (মারিয়াডিবি ) ডাটাবেস এবং php ডাইনামিক ডাটা প্রসেস করতে।
এই নিবন্ধে আমরা দেখব যে কীভাবে Linux CentOS 7 চালিত একটি সার্ভারে একটি হাই-লোড ওয়েব প্রোজেক্ট হোস্ট করার জন্য LEMP স্ট্যাক (NGINX + PHP-FPM + MariaDB/MySQL) ইনস্টল ও অপ্টিমাইজ করা যায়।
একটি ওয়েব সার্ভার হিসাবে Nginx ইনস্টল এবং কনফিগার করুন
যেহেতু একটি নতুন ইনস্টল করা CentOS সার্ভার ইনস্টলেশনের জন্য ব্যবহৃত হয়, জনপ্রিয় EPEL সংগ্রহস্থলের সাথে সংযোগ করুন এবং সার্ভারে সমস্ত প্যাকেজ আপডেট করুন৷
# yum install epel-release -y
# yum update -y
সর্বশেষ Nginx ইনস্টল করতে সংস্করণ, এই কমান্ডটি চালানোর মাধ্যমে বিকাশকারী সংগ্রহস্থল সংযোগ করুন:
# rpm -Uvh https://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
অথবা ম্যানুয়ালি রিপোজিটরি কনফিগারেশন ফাইল তৈরি করুন (/etc/yum.repos.d/nginx.repo) . ফাইলটিতে নিম্নলিখিত লাইন যোগ করুন:
[nginx]name=nginx repobaseurl=https://nginx.org/packages/centos/7/$basearch/gpgcheck=0enabled=1
আপনি যদি CentOS 8 ব্যবহার করেন, তাহলে URL-এ সংস্করণ পরিবর্তন করুন।
yum (বা dnf) প্যাকেজ ম্যানেজার ব্যবহার করে Nginx ওয়েব সার্ভার প্যাকেজ ইনস্টল করুন:
# yum install nginx -y
তারপর nginx চালান এবং systemctl ব্যবহার করে স্টার্টআপে যোগ করুন:
# systemctl start nginx
# systemctl enable nginx
/etc/systemd/system/multi-user.target.wants/nginx.service থেকে /usr/lib/systemd/system/nginx.service এ সিমলিঙ্ক তৈরি করা হয়েছে
ওয়েব সার্ভার চলছে কিনা তা পরীক্ষা করতে, আপনার ব্রাউজারে সার্ভার আইপি ঠিকানা খুলুন।
আপনি যদি এই পরীক্ষার পৃষ্ঠাটি দেখতে না পান, তাহলে আপনার সার্ভারে ফায়ারওয়ালডে অনুমোদিত পরিষেবা, পোর্ট এবং জোনগুলির সেটিংস পরীক্ষা করুন৷
একটি পৃথক ডোমেনের জন্য একটি কনফিগারেশন ফাইল তৈরি করুন woshub-linux.com . সাইট এবং কনফিগার ফাইলের জন্য একটি পৃথক ডিরেক্টরি তৈরি করুন:
# mkdir -p /var/www/woshub-linux.com && mkdir -p /var/www/woshub-linux.com/log
কনফিগারেশন ফাইল খুলুন:
# nano /etc/nginx/conf.d/woshub-linux.com.conf
এবং এতে নিম্নলিখিত বিষয়বস্তু যোগ করুন:
সার্ভার { শুনুন 80; server_name wushub-linux.com; root /var/www/woshub-linux.com; index.php index.html index.htm; access_log /var/www/woshub-linux.com/log/access.log main; error_log /var/www/woshub-linux.com/log/error.log; অবস্থান / { রিটার্ন 301 https://woshub-linux.com$request_uri; } অবস্থান ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ { রিটার্ন 301 https://woshub-linux.com$request_uri; } অবস্থান ~ \.php$ { রিটার্ন 301 https://woshub-linux.com$request_uri; } অবস্থান =/favicon.ico { log_not_found বন্ধ; অ্যাক্সেস_লগ বন্ধ; } স্থান =/robots.txt { পুনরায় লিখুন ^ /robots.txt বিরতি; সকলের অনুমদিত; log_not_found off; অ্যাক্সেস_লগ বন্ধ; } অবস্থান ~ /\.ht { সব অস্বীকার করুন; }}সার্ভার { শোন 80; সার্ভার_নাম www.woshub-linux.com; আবার লিখুন ^ https://woshub-linux.com$request_uri? স্থায়ী;}সার্ভার { শুনুন 443 ssl http2; server_name wushub-linux.com; root /var/www/woshub-linux.com; index.php index.html index.htm; access_log /var/www/woshub-linux.com/log/ssl-access.log main; error_log /var/www/woshub-linux.com/log/ssl-error.log; keepalive_timeout 60; ssl_certificate /etc/letsencrypt/live/woshub-linux.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/woshub-linux.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-ACDSA-AES256-GCM-SHA384:DHE1-8- SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-128 RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHADHE:AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES128-SHA256:AES256-SHA SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA :!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; add_header কঠোর-পরিবহন-নিরাপত্তা 'max-age=604800'; অবস্থান / { try_files $uri $uri/ /index.php?$args; } অবস্থান ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ { access_log off; সর্বোচ্চ মেয়াদ শেষ হয়; } অবস্থান ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /var/www/woshub-linux.com; fastcgi_param SCRIPT_FILENAME /var/www/woshub-linux.com/$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /var/www/woshub-linux.com/$fastcgi_script_name; fastcgi_params অন্তর্ভুক্ত; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param HTTPS চালু; fastcgi_intercept_errors চালু; fastcgi_ignore_client_abort বন্ধ; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } অবস্থান =/favicon.ico { log_not_found বন্ধ; অ্যাক্সেস_লগ বন্ধ; } অবস্থান =/robots.txt { সবকে অনুমতি দিন; log_not_found off; অ্যাক্সেস_লগ বন্ধ; } অবস্থান ~ /\.ht { সব অস্বীকার করুন; }}সার্ভার { শুনুন 443 ssl http2; সার্ভার_নাম www.woshub-linux.com; আবার লিখুন ^ https://woshub-linux.com$request_uri? স্থায়ী;
কনফিগারেশন ফাইলে নিরাপদ HTTP প্রোটোকল অ্যাক্সেস ব্যবহার করে সাইট অ্যাক্সেস করার সেটিংস রয়েছে কারণ অনেক জনপ্রিয় CMS ডিফল্টরূপে এটি ব্যবহার করে। পরে আপনি একটি বিনামূল্যের Let's Encrypt সার্টিফিকেট ইনস্টল এবং কনফিগার করতে পারেন (যেমন আমরা Windows সার্ভারে IIS-এ একটি ওয়েবসাইটের জন্য একটি Let's Encrypt সার্টিফিকেট ইনস্টল করেছি)।
PHP-FPM ইনস্টল করুন
৷Nginx এর কোনো বিল্ট-ইন PHP হ্যান্ডলার নেই, তাই আমাদের অবশ্যই php-fpm ইনস্টল করতে হবে এবং পিএইচপি স্ক্রিপ্ট প্রক্রিয়া করার জন্য কিছু পিএইচপি মডিউল।
php-fpm একটি সহজ এবং দ্রুত পিএইচপি প্রসেস ম্যানেজার। এটি HTTP প্রোটোকল ব্যবহার করে না (অ্যাপাচির বিপরীতে) এবং একটি বিশেষ ফাস্টসিজিআই প্রোটোকলের সাথে কাজ করে। একটি হালকা এবং সহজেই ব্যবহারযোগ্য এফপিএম পিএইচপি অনুরোধগুলিকে দ্রুত প্রক্রিয়া করে। একই সময়ে, অ্যাপাচির সাথে কনফিগারেশনের তুলনায়, এটি কম মেমরি ব্যবহার করবে।এর পরিবর্তে, Nginx আরও দক্ষতার সাথে স্ট্যাটিক রিটার্ন করে। আমাদের কনফিগারেশনে nginx একটি প্রক্সি সার্ভার (একটি ক্যাশিং এবং ফ্রন্ট-এন্ড সার্ভার) এবং php-fpm একটি ব্যাক-এন্ড হিসাবে কাজ করবে।
নতুন পিএইচপি সংস্করণ ইনস্টল করতে REMI সংগ্রহস্থল ব্যবহার করুন:
# rpm -ivh https://rpms.famillecollet.com/enterprise/remi-release-7.rpm
ইনস্টলেশনের পরে, /etc/yum.repos.d/remi-php74.repo সম্পাদনা করুন ফাইল:
php-fpm চালান এবং জনপ্রিয় পিএইচপি মডিউল ইনস্টলেশন:
# yum install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-opcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip
php-fpm শুরু করুন ডেমন এবং স্টার্টআপে যোগ করুন:
# systemctl start php-fpm
# systemctl enable php-fpm
/etc/systemd/system/multi-user.target.wants/php-fpm.service থেকে /usr/lib/systemd/system/php-fpm.service থেকে সিমলিঙ্ক তৈরি করা হয়েছে।
পরিষেবাটি শুরু হয়েছে কিনা তা নিশ্চিত করতে, এই কমান্ডটি চালান:
# lsof -i:9000
কমান্ড পিআইডি ইউজার এফডি টাইপ ডিভাইস সাইজ/অফ নোড NAMEphp-fpm 1551 রুট 7u IPv4 2078435 0t0 TCP লোকালহোস্ট:cslistener (listen)php-fpm 1552 apache 9u IPv4 2078 স্থানীয় হোস্ট-এফপিএম 1551 লিস্টে (T55534) 9u IPv4 2078435 0t0 TCP লোকালহোস্ট:cslistener (LISTEN)php-fpm 1554 apache 9u IPv4 2078435 0t0 TCP লোকালহোস্ট:cslistener (LISTEN)php-fpm 1555 apache 9u IPvcs4 TCP45555555 অ্যাপাচি 9u আইপিভিসিএস 4 টিপিএইচএপিএইচএপিএইচপি 35557 লিস্টে 9u আইপিভিসিপি 2085557 লিস্টিক 2078435 0t0 TCP লোকালহোস্ট:cslistener (লিসেন)
php-fpm চালান একটি ইউনিক্স সকেট ব্যবহার করে। লাইনটি মুছুন “listen = 127.0.0.1:9000
/etc/php-fpm.d/www.conf থেকে এবং নিম্নলিখিত যোগ করুন:
শুনুন =/var/run/php-fpm/php-fpm.socklisten.mode =0660listen.owner =nginxlisten.group =nginx
php-fpm একটি নন-অ্যাপাচি ব্যবহারকারী হিসাবে শুরু করতে (ডিফল্টরূপে), কনফিগারেশন ফাইলে এই পরামিতিগুলি নির্দিষ্ট করুন:
ব্যবহারকারী =nginxgroup =nginx
php-fpm কনফিগার ফাইল পরিবর্তন করার পরে, পরিষেবাটি পুনরায় চালু করুন:
# systemctl restart php-fpm
একটি ওয়েব সার্ভারে MySQL/MariaDB ইনস্টল করুন
আমরা এই পদক্ষেপটি এড়িয়ে যাব, যেহেতু সম্পূর্ণ নির্দেশিকা "লিনাক্সে মারিয়াডিবি ইনস্টল এবং অপ্টিমাইজ করা" পূর্বে প্রকাশিত হয়েছিল। এর সুবিধা নিন।
উচ্চ লোডের জন্য Nginx + PHP-FPM কনফিগার করা হচ্ছে
আপনার ওয়েব সার্ভার যাতে প্রচুর সংখ্যক ক্লায়েন্টের অনুরোধ প্রক্রিয়া করতে পারে (উচ্চ ট্রাফিক ওয়েবসাইট), সঠিকভাবে nginx কনফিগার করা গুরুত্বপূর্ণ এবং php-fpm .
Nginx কনফিগারেশন
/etc/nginx/nginx.conf খুলুন ফাইল করুন এবং Nginx কনফিগারেশনটি নিম্নরূপ পরিবর্তন করুন:
worker_processes 2;
— আপনার সার্ভারে কোরের সংখ্যার সমান কর্মী প্রক্রিয়ার সংখ্যা সেট করুন;worker_connections 1024;
— একটি কাজের প্রক্রিয়ার জন্য সংযোগের সংখ্যা সেট করুন (1024 থেকে 4096 পর্যন্ত মান সেট করুন);use epoll;
— লিনাক্সে একটি সর্বোত্তম সংযোগ পদ্ধতিmulti_accept on;
— nginx সর্বাধিক সংখ্যক সংযোগ গ্রহণ করবে।
http ব্লক:
tcp_nodelay on;
— একটি প্যাকেজে হেডার এবং ফাইলের শুরু পাঠায়;tcp_nopush on;
অনেকগুলি স্ট্যাটিক ফাইল ধারণকারী ওয়েব-প্রকল্পগুলির জন্য gzip কম্প্রেশন সক্ষম করুন:
gzip on;
সমস্ত googlespeed চেক পাস করতে বিভিন্ন ধরনের ফাইল যোগ করুন:gzip_types application/atom+xml application/javascript text/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json font/ttf application/x-font-ttf application/vnd.ms-fontobject application/font-woff application/font-woff2 application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vnd.wap.wml text/vtt text/x-component text/x-cross-domain-policy;
টাইমআউট সেটিংস পরিবর্তন করুন:
keepalive_timeout 30;
— একটি ওয়েব সার্ভার একটি Keepalive সংযোগ বন্ধ করার আগে 30 সেকেন্ডের জন্য অপেক্ষা করবে;keepalive_requests 100;
একটি ক্লায়েন্টের কাছ থেকে সর্বোচ্চ সংখ্যক লাইভ অনুরোধ;reset_timedout_connection on;
— এই প্যারামিটারটি সক্ষম করুন যদি আপনি এমন কোনো ক্লায়েন্টের কাছ থেকে সংযোগগুলিকে পুনরায় সেট করতে না চান যা সাড়া দেওয়া বন্ধ করে দেয়;client_body_timeout 10;
— সংযোগ রিসেট না হওয়া পর্যন্ত একটি ওয়েব সার্ভার 10 সেকেন্ডের জন্য অনুরোধ নিশ্চিত করার জন্য একটি ক্লায়েন্টের জন্য অপেক্ষা করবে;send_timeout 2;
— যদি কোনো ক্লায়েন্ট ওয়েব সার্ভারের প্রতিক্রিয়া পড়া বন্ধ করে দেয়, nginx সংযোগ পুনরায় সেট করবে।
যদি আপনার ওয়েবসাইট বড় ফাইল আপলোড করার জন্য ডিজাইন না করা হয়, তাহলে nginx ব্যবহার করে সীমা সেট করুন:
client_max_body_size 2m;
— একটি সার্ভার 2 MB এর বেশি অনুরোধ গ্রহণ করবে না
যদি আপনার প্রকল্পের বিষয়বস্তু প্রায়শই পরিবর্তিত না হয়, তাহলে আপনি 'মেয়াদ শেষ হয় সর্বাধিক; ব্যবহার করতে পারেন আপনার প্রয়োজনীয় ফাইল প্রকারের জন্য আপনার হোস্টের কনফিগারেশন ফাইলে ক্যাশিং বা সংশ্লিষ্ট বিকল্প যোগ করুন, উদাহরণস্বরূপ:
অবস্থান ~~~~~~~~~~~~~~~~~নির্দিষ্ট ফাইল প্রকারের ক্যাশে 7 দিনের জন্য সংরক্ষণ করা হবে।
কোনো পরিবর্তন করার পর nginx রিস্টার্ট করতে ভুলবেন না।
# systemctl restart nginx
php-fpm কনফিগারেশন
php-fpm ইনস্টল করার সময়, আপনি অবিলম্বে ইউনিক্স সকেটে স্যুইচ করেছেন। এটা উল্লেখযোগ্যভাবে কর্মক্ষমতা boosts. অনুমান অনুসারে, উত্পাদনশীলতা 2 বা 3 গুণ বৃদ্ধি পায়। অন্যান্য php-fpm পরামিতি প্রতিটি প্রকল্পের জন্য পৃথকভাবে সেট করা আবশ্যক। 1,024 MB RAM সহ একটি একক-কোর (vCPU) সার্ভারের জন্য একটি কনফিগারেশন উদাহরণ বিবেচনা করা যাক৷
আপনি php-fpm-এর জন্য প্রায় 512 MB বরাদ্দ করতে পারেন, বাকিটা আপনার ডাটাবেস এবং nginx-এর জন্য রেখে দিতে পারেন।
কনফিগারেশন ফাইলে নিম্নলিখিত যোগ করুন /etc/php-fpm/www.conf :
pm.max_children = 18
চাইল্ড প্রক্রিয়ার সর্বাধিক সংখ্যাpm.start_servers = 6
স্টার্টআপে তৈরি হওয়া চাইল্ড প্রক্রিয়ার সংখ্যা হলpm.min_spare_servers = 4
নিষ্ক্রিয় সার্ভার প্রক্রিয়ার সর্বনিম্ন সংখ্যাpm.max_spare_servers = 16
নিষ্ক্রিয় সার্ভার প্রক্রিয়ার সর্বাধিক সংখ্যাpm.max_requests = 400
চাইল্ড প্রসেস রিকোয়েস্টের সংখ্যা, যার পরে প্রসেস রিস্টার্ট করা হবে
মারিয়াডিবি সেটিংস কীভাবে অপ্টিমাইজ করা যায় তা আমি বর্ণনা করিনি, কারণ এই ওয়েবসাইটে সংশ্লিষ্ট নিবন্ধ রয়েছে। আমি নিবন্ধের উপর ভিত্তি করে আমার প্রকল্পের জন্য my.cnf পরামিতি সেট করেছি, এবং ডাটাবেস চমৎকার কর্মক্ষমতা ফলাফল দেখিয়েছে।
আপনার ওয়েবসাইট চালানোর পরে, আপনি খালি চোখে দেখতে পাবেন যে nginx + php-fpm আপনার অনুরোধগুলি প্রক্রিয়া করবে এবং apache2 + mod_php এর চেয়ে অনেক দ্রুত ওয়েবপৃষ্ঠাগুলি ফিরিয়ে দেবে।