टर्मिनल के माध्यम से Ubuntu 12.04 पर FastCGI के रूप में PHP चलाने के लिए अपाचे को कैसे कॉन्फ़िगर करें?


35

मैं यूनिक्स कमांड लाइन वेब सर्वर प्रबंधन / प्रशासन की दुनिया के लिए अपेक्षाकृत नया हूं।

नियंत्रण कक्ष प्रशासन विकल्पों के साथ कई होस्ट आपको यह बदलने की अनुमति देते हैं कि PHP को एक साधारण विकल्प के साथ कैसे चलाया जाता है।

सबसे आम विकल्प:

  • अपाचे मॉड्यूल
  • CGI आवेदन
  • FastCGI आवेदन

मेरा सवाल बस यह है कि आप इसे कमांड लाइन के माध्यम से कैसे बदलते हैं? मुझे पता है कि अपाचे के लिए कई कॉन्फ़िगरेशन फाइलें हैं।

निकटतम चीज़ जो मुझे मिली है वह है यह सवाल , हालाँकि निर्देशिका संरचना मेरे OS (Ubuntu 12.04) के लिए मेल नहीं खाती है।

मैं काफी हतप्रभ हूँ कि कैसे एक स्पष्ट मार्गदर्शक प्रतीत नहीं होता है कि मैं इस प्रक्रिया का विवरण किसी ऐसी चीज़ के लिए पा सकता हूँ जो इतनी आम लगती है। मुझे माफ कर दो अगर यह मौजूद है ... यदि हां, तो कृपया मुझे सही दिशा में इंगित करें।


निकटतम चीज़ जो मुझे मिली है, वह है SO पर यह प्रश्न कि वेबसाइट स्टैक ओवरफ़्लो नहीं है।
ta.speot.is

1
इस पर FastCGI यह बहुत अच्छी तरह से बताते हैं।

1
@ ta.speot.is forgivaness, pleaassuh। धन्यवाद मैट, बेशक मैंने fastcgi.com को देखा, लेकिन मैंने उन निर्देशों का पालन करना थोड़ा मुश्किल पाया।
इवान मैटसन

@ ta.speot.is, सरल टाइपो। उसका मतलब था "एसई" नहीं "एसओ"।
पचेरियर

जवाबों:


49

पिछले उत्तरों के लिए धन्यवाद, वे मुझे सबसे ज्यादा रास्ते से मिले, लेकिन काम करने वाली चीजें पाने के लिए मुझे कुछ स्थानों से निर्देश मिलाने थे, इसलिए सोचा कि मैं पूरी तरह से कमांड सेट करूंगा।

FYI करें मैं Ubuntu 14.04, Apache 2.4 चला रहा हूं, और डिफ़ॉल्ट रूप से चलने वाला modphp भी था, पिछले निर्देशों ने भी modphp को निष्क्रिय करने की आवश्यकता को छोड़ दिया था।

मैंने http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ को भी बहुत जानकारीपूर्ण और सीधा पाया।

बस एक के बाद एक टर्मिनल में निम्नलिखित कमांड चलाएं।

पहले आवश्यक पैकेज स्थापित करें (मैं php5 छोड़ता हूं क्योंकि यह मानता है कि यह पहले से ही स्थापित है, इसे पहली बार स्थापित करने के लिए वापस जोड़ें)। अपाचे 2.4 से भी ध्यान दें आप कार्यकर्ता के बजाय ईवेंट- mpm का उपयोग कर सकते हैं http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/ । मेरा उदाहरण कार्यकर्ता को दिखाता है, लेकिन अगर आप इसका उपयोग करना चाहते हैं तो बस शब्द कार्यकर्ता को घटना से बदल दें।

sudo apt-get install apache2-mpm-worker

sudo apt-get install libapache2-mod-fastcgi php5-fpm

अब आप की आवश्यकता mods सक्षम करें, और उन लोगों को अक्षम करें जिन्हें आप नहीं करते हैं

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

Php5.fcgi फ़ाइल बनाएँ और इसे उपयोग करने के लिए वेबसर्वर अनुमति दें।

sudo touch /usr/lib/cgi-bin/php5.fcgi

sudo chown -R www-data:www-data /usr/lib/cgi-bin

Php5-fpm के लिए एक वैश्विक कॉन्फ़िगरेशन बनाएं

sudo nano /etc/apache2/conf-available/php5-fpm.conf

निम्नलिखित में पेस्ट (हम आईपी पते के बजाय एक सॉकेट का उपयोग करेंगे)

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

Php5-fpm conf सक्षम करें

sudo a2enconf php5-fpm

Apache और fpm को फिर से शुरू करें

sudo service apache2 restart && sudo service php5-fpm restart

अन्य निर्देशों के अनुसार, अपने वेबसर्वर पर एक नई ब्राउज़ करने योग्य php फ़ाइल में निम्नलिखित पेस्ट करें।

<?php phpinfo();

वह फ़ाइल खोलें जिसे आपने अभी वेब ब्राउज़र में एडिट किया है, यदि आपको सर्वर API के आगे "FPM / FastCGI" दिखाई देता है, तो आप अब FastCGI के साथ PHP परोस रहे हैं!


4
यह एक लाइफसेवर है। पुराने अपाचे के लिए निर्देश Ubuntu 14.04 पर काम नहीं किया, और अपाचे 2.4; लेकिन यह एक आकर्षण की तरह काम किया। + !!
भाविन दोशी

मैंने इसका ठीक-ठीक पालन किया, फिर भी मुझे त्रुटि मिलती है 'आपको /php5.fcgi/index' तक पहुँचने की अनुमति नहीं है ... और त्रुटि लॉग में, 'क्लाइंट को सर्वर कॉन्फ़िगरेशन से वंचित: / usr / lib / cgi-bin /php5.fcgi '... कोई विचार?
सिर्फ लकी वास्तव में

यह पता लगाया ... मैं पुराने 'ऑर्डर इनकार का उपयोग कर रहा था,' किसी कारण के लिए रूट के लिए कॉन्फ़िगरेशन की अनुमति दें ... सभी अब तय: डी
जस्ट लकी रियली

पैकेज और कॉन्फ़िगरेशन की स्थापना के बाद मुझे त्रुटि मिली "अपाचे 2: /etc/apache2/apache2.conf की लाइन 216 पर सिंटैक्स त्रुटि: /etc/apache2/conf-nabled/php5-fpm.conf की लाइन 9 पर सिंटैक्स त्रुटि: अपेक्षित </ निर्देशिका> लेकिन देखा </ IfModule> "
फारुक


20

मैं अंत में सिर्फ यह करने में सक्षम एक अच्छा ट्यूटोरियल मिला। मैं उन कदमों को रेखांकित करूंगा, जिन्हें मैंने लिया था क्योंकि मेरे पास पहले से ही मेरा LAMP स्टैक स्थापित था लेकिन पूर्ण ट्यूटोरियल यहां पाया जा सकता है

नए के लिए ध्यान दें:

ट्यूटोरियल में, यह रूट यूजर के साथ स्विच करके शुरू होता है:

sudo su

मेरे मामले में मैंने sudoउपयोगकर्ताओं को स्विच करने के बजाय केवल उन आदेशों को उपसर्ग किया , इसलिए मैं अपने कदमों को इस तरह से प्रलेखित करूंगा।

शुरू

एक कदम: अपाचे वर्कर एमपीएम (मल्टी-प्रोसीडिंग मॉड्यूल) स्थापित करें

sudo apt-get install apache2-mpm-worker

यह मेरे द्वारा स्थापित प्रीफ़ॉर्क को बदल देता है जो अपाचे को स्थापित करते समय डिफ़ॉल्ट है।

चरण 2: PHP5 और आवश्यक मॉड्यूल स्थापित करें

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

इस बिंदु पर आपको 'libapache2-mod-fastcgi' को स्थापित करने में त्रुटि हो सकती है:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package libapache2-mod-fastcgi is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or is only available from another source

E: Package 'libapache2-mod-fastcgi' has no installation candidate

यह हिस्सा उपरोक्त ट्यूटोरियल में नहीं है

इसे समेटने के लिए, multiverseरिपॉजिटरी को उपयुक्त स्रोतों में जोड़ना होगा।

यह करने के लिए:

sudo nano /etc/apt/sources.list

जिसके लिए मैंने निम्नलिखित पंक्तियों को जोड़ा है:

deb http://archive.ubuntu.com/ubuntu precise multiverse
deb http://archive.ubuntu.com/ubuntu precise-updates multiverse
deb http://security.ubuntu.com/ubuntu precise-security multiverse

preciseइस मामले में उबंटू " सटीक पैंगोलिन " के मेरे संस्करण को संदर्भित करता है ।

तो अब, उन परिवर्तनों को वापस करें और टर्मिनल पर वापस जाएँ:

sudo apt-get update

और फिर:

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

जो (अब) काम करना चाहिए।

अब इन अपाचे मॉड्यूल को सक्षम करें:

sudo a2enmod actions fastcgi alias

फिर से शुरू करें

sudo service apache2 restart

चरण 3: अपाचे कॉन्फ़िगरेशन

Apache को PHP-FPM के साथ काम करने के लिए, हमें निम्नलिखित कॉन्फ़िगरेशन की आवश्यकता है:

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
    <Directory /usr/lib/cgi-bin>
        Require all granted 
    </Directory>
    #directory statement mult be on multiple lines
</IfModule>

ध्यान दें:

यदि आप अपाचे (2.3.x या पुराने) के पुराने संस्करण का उपयोग कर रहे हैं, तो लाइन से बाहर निकलें

   <Directory /usr/lib/cgi-bin> Require all granted </Directory>

आप कमांड के साथ अपने इंस्टॉल किए गए संस्करण की जांच कर सकते हैं

apache2 -version

आप इसे वैश्विक अपाचे कॉन्फ़िगरेशन में डाल सकते हैं (इसलिए यह सभी vhosts के लिए सक्षम है), उदाहरण के लिए /etc/apache2/conf.d/php5-fpm.conf(यह फ़ाइल मौजूद नहीं है, इसलिए आपको इसे बनाना होगा), या आप इसे प्रत्येक vhost में रख सकते हैं जिसे PHP-FPM का उपयोग करना चाहिए।

मैं वैश्विक मार्ग का चयन करना चाहता हूं, इसलिए:

sudo nano /etc/apache2/conf.d/php5-fpm.conf

ऊपर दिए गए कोड ब्लॉक में पेस्ट करें, और सहेजें, बाहर निकलें। यह नई फ़ाइल स्वचालित रूप से अपाचे के डिफ़ॉल्ट कॉन्फ़िगरेशन द्वारा लोड की जाएगी जो /etc/apache2/conf.d/निर्देशिका में सभी फ़ाइलों को लोड करती है ।

अपाचे को फिर से शुरू करें:

sudo service apache2 restart

अब दस्तावेज़ रूट में निम्नलिखित PHP फ़ाइल बनाएँ /var/www:

sudo nano /var/www/info.php

जोड़ें:

<?php phpinfo();

बचा कर बाहर आ जाओ।

अब हम उस फ़ाइल को ब्राउज़र में कहते हैं (उदाहरण के लिए) http://your-server-ip/info.php )

शीर्ष पर सर्वर API के तहत आपको देखना चाहिए FPM/FastCGI

सफलता!

डिफ़ॉल्ट टीसीपी पोर्ट के बजाय एक यूनिक्स सॉकेट का उपयोग करने के लिए या इन सभी के बजाय व्यक्तिगत वर्चुअल मेजबानों के लिए इसे कैसे कॉन्फ़िगर करें, इसके बारे में अधिक जानकारी के लिए, शीर्ष पर जुड़ा स्रोत ट्यूटोरियल देखें।


मुझे इससे पहले </ ifModule>: <Directory / usr / lib / cgi-bin> को अनुमति देनी थी </ Directory>
रिमु एटकिंसन

@RimuAtkinson सही है, डिफ़ॉल्ट रूप से सभी निर्देशिकाओं को नए संस्करणों में निषिद्ध किया जाएगा, इसलिए आपको विशेष रूप से cgi-bin निर्देशिका तक पहुंच प्रदान करनी होगी। यह जवाब देने के लिए जोड़ा जाना चाहिए इसके बिना के रूप में आप एक 403 मिल जाएगा
johnrom

इस howto के लिए धन्यवाद! ध्यान दें कि Require all grantedअपाचे 2.4 के बाद से ही चीज़ की आवश्यकता है। यदि मैंने इसे Apache 2.2 के साथ कॉन्फ़िगरेशन फ़ाइल में रखा है, तो यह विफल हो जाता है।
लीव्स

मैंने एक नोट जोड़ा है। (बेझिझक इसे संपादित करें; यह आपकी पोस्ट है;)) विवरण के लिए, stackoverflow.com/a/22040167/592323
लेमेस

1
यह उत्तर ubuntu 14.04 पर काम नहीं करता है। 14.04 में इसे करने के लिए JDawgg द्वारा उत्तर देखें।
भाविन दोशी

1

उबंटू 14.04 में स्वीकृत उत्तर के चरणों को करने के बाद, /etc/apache2/conf-available/php5-fpm.conf संपादित करें

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</IfModule>

फिर अमल करें

#sudo a2enconf php5-fpm
#sudo apache2 restart

0

यदि कोई व्यक्ति उबंटू 16.04 पर ऐसा कर रहा है और उसने php 7 से php 5.6 (Ondrej) में डाउनग्रेड किया है, तो आपको कुछ पंक्तियों को बदलना होगा (JDawgg के उत्तर के आधार पर):

sudo apt-get install लिबापाचे 2-mod-fastcgi php5-fpm:

sudo apt-get install libapache2-mod-fastcgi php5.6-fpm 

sudo a2dismod php5 mpm_prefork:

sudo a2dismod php5.6 mpm_prefork

sudo नैनो /etc/apache2/conf-available/php5-fpm.conf to:

sudo vim /etc/apache2/conf-available/php5.6-fpm.conf

Php5.6-fpm की स्थापना प्रक्रिया ने पहले से ही फ़ाइल बनाई है, इसलिए एक बनाने की आवश्यकता नहीं है। हालाँकि, मैंने उस फ़ाइल पर सभी मौजूदा पाठ हटा दिए क्योंकि यह mod_php5 के लिए था।

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

मैंने /var/run/php5-fpm.sock से /var/run/php/php5.6-fpm.sock तक रास्ता बदल दिया क्योंकि फ़ाइल वहां स्थित थी।

sudo a2enconf php5-fpm:

sudo a2enconf php5.6-fpm

sudo service apache2 पुनरारंभ और & sudo सेवा php5-fpm पुनरारंभ:

sudo service apache2 restart && sudo service php5.6-fpm restart

मुझे आशा है कि यह मेरे जैसे अन्य newbies में मदद करता है :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.