PHP-FPM (फास्ट प्रोसेस मैनेजर) PHP स्क्रिप्ट चलाने के लिए FastCGI का एक अलग कार्यान्वयन है। आप LAMP स्टैक (NGINX, Apache और mod_php मॉड्यूल) की तुलना में अपनी वेबसाइटों के लिए एक तेज़ और उच्च प्रदर्शन वेब सर्वर बनाने के लिए NGINX वेब सर्वर (स्थिर प्रसंस्करण) और PHP-FPM के संयोजन का उपयोग कर सकते हैं।
एलईएमपी वेब साइटों को होस्ट करने और वेब एप्लिकेशन को प्रकाशित करने के लिए आमतौर पर एक साथ स्थापित टूल का एक ओपन-सोर्स सॉफ़्टवेयर सेट है। यह संक्षिप्त नाम OS लिनक्स . के सेट के लिए है , 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 में संस्करण बदलें।
यम (या dnf) पैकेज मैनेजर का उपयोग करके Nginx वेब सर्वर पैकेज स्थापित करें:
# yum install nginx -y
फिर nginx run चलाएं और इसे 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 woshub-linux.com; रूट /var/www/woshub-linux.com; index.php index.html index.htm; access_log /var/www/woshub-linux.com/log/access.log मुख्य; 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 off; एक्सेस_लॉग ऑफ; } स्थान =/robots.txt { फिर से लिखना ^ /robots.txt विराम; सभी को अनुमति दें; log_not_found बंद; एक्सेस_लॉग ऑफ; } स्थान ~ /\.ht { सभी को नकारें; }}सर्वर { सुनो 80; server_name www.woshub-linux.com; पुनर्लेखन ^ https://woshub-linux.com$request_uri? स्थायी;}सर्वर { 443 ssl http2 सुनें; server_name woshub-linux.com; रूट /var/www/woshub-linux.com; index.php index.html index.htm; access_log /var/www/woshub-linux.com/log/ssl-access.log मुख्य; 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-RSA-AES128 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 RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS- AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128- 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 सख्त-परिवहन-सुरक्षा 'अधिकतम-आयु =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 यूनिक्स:/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 off; एक्सेस_लॉग ऑफ; } स्थान =/robots.txt { सभी को अनुमति दें; log_not_found बंद; एक्सेस_लॉग ऑफ; } स्थान ~ /\.ht { सभी को नकारें; }}सर्वर { 443 ssl http2 सुनें; server_name www.woshub-linux.com; पुनर्लेखन ^ https://woshub-linux.com$request_uri? स्थायी;}
कॉन्फ़िगरेशन फ़ाइल में सुरक्षित HTTP प्रोटोकॉल एक्सेस का उपयोग करके साइट तक पहुंचने के लिए सेटिंग्स हैं क्योंकि कई लोकप्रिय सीएमएस डिफ़ॉल्ट रूप से इसका उपयोग करते हैं। बाद में आप एक निःशुल्क Let's Encrypt प्रमाणपत्र स्थापित और कॉन्फ़िगर कर सकते हैं (जैसे हमने Windows सर्वर में IIS में किसी वेबसाइट के लिए Let's Encrypt प्रमाणपत्र स्थापित किया है)।
PHP-FPM स्थापित करें
Nginx में कोई अंतर्निहित PHP हैंडलर नहीं है, इसलिए हमें php-fpm . स्थापित करना होगा और PHP स्क्रिप्ट को संसाधित करने के लिए कुछ PHP मॉड्यूल।
php-fpm एक आसान और तेज़ PHP प्रक्रिया प्रबंधक है। यह HTTP प्रोटोकॉल (अपाचे के विपरीत) का उपयोग नहीं करता है और एक विशेष FastCGI प्रोटोकॉल के साथ काम करता है। एक हल्का और उपयोग में आसान एफपीएम PHP अनुरोधों को तेजी से संसाधित करता है। साथ ही, अपाचे के साथ कॉन्फ़िगरेशन की तुलना में, यह कम मेमोरी का उपयोग करेगा।बदले में, Nginx अधिक कुशलता से स्थिर रिटर्न देता है। हमारे कॉन्फ़िगरेशन में nginx एक प्रॉक्सी सर्वर (एक कैशिंग और फ्रंट-एंड सर्वर) होगा और php-fpm बैक-एंड के रूप में काम करेगा।
नए php संस्करण स्थापित करने के लिए REMI रिपॉजिटरी का उपयोग करें:
# rpm -ivh https://rpms.famillecollet.com/enterprise/remi-release-7.rpm
स्थापना के बाद, /etc/yum.repos.d/remi-php74.repo संपादित करें फ़ाइल:
php-fpmचलाएं और लोकप्रिय php मॉड्यूल स्थापना:
# 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 2078435 0t0 TCP लोकलहोस्ट:cslistener (FISTEN) php 9u IPv4 2078435 0t0 TCP लोकलहोस्ट:cslistener (LISTEN) php-fpm 1554 apache 9u IPv4 2078435 0t0 TCP लोकलहोस्ट:cslistener (LISTEN) php-fpm 1555 apache 9u IPv4 2078435 0tv4 TCP लोकलहोस्ट:cslistener (LISTEN) apache 9uv4 TCP लोकलहोस्ट:2078435 0t0 TCP लोकलहोस्ट:cslistener (LISTEN)
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;
— Linux में एक इष्टतम कनेक्शन विधि है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;
— एक वेब सर्वर एक स्थायी कनेक्शन बंद करने से पहले 30 सेकंड तक प्रतीक्षा करेगा;keepalive_requests 100;
एक क्लाइंट द्वारा रखे जाने वाले अनुरोधों की अधिकतम संख्या है;reset_timedout_connection on;
— इस पैरामीटर को सक्षम करें यदि आप किसी ऐसे क्लाइंट से कनेक्शन को रीसेट नहीं करना चाहते जिसने प्रतिक्रिया देना बंद कर दिया है;client_body_timeout 10;
- एक वेब सर्वर कनेक्शन के रीसेट होने तक क्लाइंट द्वारा अनुरोध की पुष्टि करने के लिए 10 सेकंड तक प्रतीक्षा करेगा;send_timeout 2;
— यदि कोई क्लाइंट वेब सर्वर प्रतिक्रिया पढ़ना बंद कर देता है, तो nginx कनेक्शन को रीसेट कर देगा।
यदि आपकी वेबसाइट बड़ी फ़ाइलों को अपलोड करने के लिए डिज़ाइन नहीं की गई है, तो nginx का उपयोग करके सीमा निर्धारित करें:
client_max_body_size 2m;
— एक सर्वर 2 एमबी से अधिक के अनुरोध स्वीकार नहीं करेगा
यदि आपके प्रोजेक्ट की सामग्री अक्सर नहीं बदलती है, तो आप 'अधिकतम समय सीमा समाप्त; का उपयोग कर सकते हैं कैशिंग या अपने होस्ट की कॉन्फ़िगरेशन फ़ाइल में संबंधित विकल्प जोड़ें, उदाहरण के लिए, आपको आवश्यक फ़ाइल प्रकारों के लिए:
<पूर्व>स्थान ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {समाप्त 7d;~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~निर्दिष्ट फ़ाइल प्रकारों के लिए कैश 7 दिनों के लिए संग्रहीत किया जाएगा।
कोई भी परिवर्तन करने के बाद nginx को पुनरारंभ करना न भूलें।
# systemctl restart nginx
Php-fpm कॉन्फ़िगरेशन
Php-fpm स्थापित करते समय, आपने इसे तुरंत यूनिक्स सॉकेट पर स्विच कर दिया। यह प्रदर्शन को काफी बढ़ा देता है। अनुमान के अनुसार उत्पादकता 2 या 3 गुना बढ़ जाती है। अन्य php-fpm पैरामीटर प्रत्येक प्रोजेक्ट के लिए अलग-अलग सेट किए जाने चाहिए। आइए 1,024 एमबी रैम वाले सिंगल-कोर (वीसीपीयू) सर्वर के कॉन्फ़िगरेशन उदाहरण पर विचार करें।
आप php-fpm के लिए लगभग 512 एमबी आवंटित कर सकते हैं, बाकी को अपने डेटाबेस और 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 की तुलना में बहुत तेजी से लौटाएगा।