Apache 2.4 + PHP-FPM + ProxyPassMatch


31

मैंने हाल ही में अपने स्थानीय मशीन पर अपाचे 2.4 को स्थापित किया, साथ में PHP 5.4.8 के साथ PHP-FPM का उपयोग किया।

सब कुछ काफी आसानी से हो गया (थोड़ी देर बाद ...) लेकिन अभी भी एक अजीब त्रुटि है:

मैंने PHP-FPM के लिए Apache को इस तरह कॉन्फ़िगर किया है:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/Users/apfelbox/WebServer"
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/Users/apfelbox/WebServer/$1
</VirtualHost>

यह काम करता है, उदाहरण के लिए अगर मैं कॉल करता http://localhost/info.phpहूं तो मुझे सही मिलता है phpinfo()(यह सिर्फ एक परीक्षण फ़ाइल है)।

यदि मुझे एक निर्देशिका कहा जाता है, तो मुझे शरीर के साथ File not found.और त्रुटि लॉग में एक 404 मिलता है :

[Tue Nov 20 21:27:25.191625 2012] [proxy_fcgi:error] [pid 28997] [client ::1:57204] AH01071: Got error 'Primary script unknown\n'

अद्यतन करें

मैंने अब mod_rewrite के साथ समीपवर्ती करने की कोशिश की:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/Users/apfelbox/WebServer"

    RewriteEngine on    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/Users/apfelbox/WebServer/$1 [L,P]
</VirtualHost>

लेकिन समस्या यह है: यह हमेशा पुनर्निर्देशित होता है, क्योंकि http://localhost/स्वचालित रूप http://localhost/index.phpसे अनुरोध किया जाता है, क्योंकि

DirectoryIndex index.php index.html

अपडेट २

ठीक है, तो मुझे लगता है "शायद जाँच करें कि क्या पहले प्रॉक्सी को देने के लिए एक फ़ाइल है:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/Users/apfelbox/WebServer"

    RewriteEngine on    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/Users/apfelbox/WebServer/$1 [L,P]
</VirtualHost>

अब पूर्ण पुनर्लेखन से काम नहीं चलता ...

अपडेट ३

अब मेरे पास इसका हल है:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/Users/apfelbox/WebServer"

    RewriteEngine on    
    RewriteCond /Users/apfelbox/WebServer/%{REQUEST_FILENAME} -f
    RewriteRule ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/Users/apfelbox/WebServer/$1 [L,P]
</VirtualHost>

पहले जांचें, कि PHP-FPM ( पूर्ण और पूर्ण पथ के साथ) पास करने के लिए एक फ़ाइल है और फिर पुनर्लेखन करें।

यह एक उपनिर्देशिका के अंदर URL पुनर्लेखन का उपयोग करते समय काम नहीं करता है, यह भी URL जैसे http://localhost/index.php/test/ कि वापस एक वर्ग के लिए विफल रहता है ।


कोई विचार?

जवाबों:


34

अपाचे प्रलेखन को खोजने और पढ़ने के घंटों के बाद, मैं एक समाधान के साथ आया हूं जो पूल का उपयोग करने की अनुमति देता है, और यह भी बताता है कि रेवर निर्देश को .htaccess में तब भी काम करने की अनुमति मिलती है जब url में .php फाइलें होती हैं।

<VirtualHost ...>

 ...

 # This is to forward all PHP to php-fpm.
 <FilesMatch \.php$>
   SetHandler "proxy:unix:/path/to/socket.sock|fcgi://unique-domain-name-string/"
 </FilesMatch>

 # Set some proxy properties (the string "unique-domain-name-string" should match
 # the one set in the FilesMatch directive.
 <Proxy fcgi://unique-domain-name-string>
   ProxySet connectiontimeout=5 timeout=240
 </Proxy>

 # If the php file doesn't exist, disable the proxy handler.
 # This will allow .htaccess rewrite rules to work and 
 # the client will see the default 404 page of Apache
 RewriteCond %{REQUEST_FILENAME} \.php$
 RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
 RewriteRule (.*) - [H=text/html]

</VirtualHost>

Apache प्रलेखन के अनुसार, SetHandler प्रॉक्सी पैरामीटर को Apache HTTP सर्वर 2.4.10 की आवश्यकता होती है।

मुझे उम्मीद है कि इस समाधान से आपको भी मदद मिलेगी।


2
यह निश्चित रूप से 2015 के लिए जवाब है, यहां बाकी सब कुछ एक आधुनिक सेटअप के लिए बकवास है (चलो कहते हैं डेबियन स्थिर)
दिमित्री डीबी

1
मैं काफी समय से इसी समस्या पर दीवार के खिलाफ अपना सिर पीट रहा हूं, और मेरे पास आपके जैसा ही सेटअप है। क्या आप कृपया अपने .htaccess Rewrite निर्देशों को पोस्ट करेंगे? जो मैं समझता हूं, इस उत्तर में सब कुछ केवल आपके httpd.d / site.conf फ़ाइल में है।
डेविड डब्ल्यू

1
इस समय का उपयोग करते हुए RewriteRule काफी खतरनाक लगता है क्योंकि यह config.php सादे में फाइलों को उजागर कर सकता है यदि वे अलियासिड निर्देशिका के अंदर थे और इसलिए% {DOCUMENT_ROOT} /% {REQUEST_URI} में मौजूद नहीं हैं।
जुलकिस

1
कोड की अद्भुत 9 लाइनें। यह पवित्र कब्र है और केवल एक चीज है जो मेरे लिए 100% काम करती है। बस एक सिडनोट: यदि आप LocationMatch का उपयोग करके समाधान से स्विच कर रहे हैं, तो आपको fcgi url के लिए पूर्ण फ़ाइल पथ को जोड़ने की आवश्यकता नहीं है। इसके लिए देखने के लिए अपाचे में प्रॉक्सी चालू करें और लॉग इन फिर से लिखें।
फिल

1
+1 क्योंकि यह पोस्ट मैंने देखा है हर दूसरे संसाधन के विपरीत मुझे यह समझने में मदद मिली कि "अद्वितीय-डोमेन-नाम-स्ट्रिंग" को किसका प्रतिनिधित्व करना है।
तीन

10

मैं भी इस समस्या को कल में भाग - अपाचे 2.4 से बाहर चले गए Debian / प्रयोगात्मक में Debian / अस्थिर मुझे मजबूर कर इस नए सामान से निपटने के लिए; हमारे उत्पादन सर्वर पर नहीं;)।

लाखों साइटों की तरह महसूस करने के बाद, अपाचे डॉक्स, बग रिपोर्ट और त्रुटि लॉग में डीबगिंग आउटपुट मुझे अंततः काम करने के लिए मिला। नहीं, वहाँ सॉकेट के साथ FPM के लिए कोई समर्थन नहीं है , फिर भी। डिफ़ॉल्ट डेबियन कॉन्फिगरेशन पिछले कुछ समय से सॉकेट्स का उपयोग कर रहा है, इसलिए डेबियन यूजर्स को इसे भी बदलना होगा।

यहां एक CakePHP साइट और PHPMyAdmin के लिए काम करता है (यदि आप डेबियन पैकेज का उपयोग कर रहे हैं, तो बाद में कुछ कॉन्फिग की जरूरत है), इसलिए मैं पुष्टि कर सकता हूं कि mod_rewriteअभी भी फैंसी यूआरएल राइटिंग करने की उम्मीद है।

ध्यान दें DirectoryIndex index.php, जो आपके फ़ोल्डर्स में से कोई भी काम करने का कारण नहीं हो सकता है (कम से कम यह है कि यहां क्या काम नहीं किया गया)।

मैं अभी भी File not found.निर्देशिकाओं के लिए मिलता हूं , लेकिन केवल अगर कोई सूचकांक फ़ाइल नहीं है तो यह पार्स कर सकता है। उस से भी छुटकारा पाना पसंद करेंगे, लेकिन यह अब तक के लिए उतना महत्वपूर्ण नहीं है।


<VirtualHost *:80>
    ServerName site.localhost

    DocumentRoot /your/site/webroot
    <Directory />
            Options FollowSymlinks
            DirectoryIndex index.php
            AllowOverride All
            Require all granted
    </Directory>

    <LocationMatch "^(.*\.php)$">
            ProxyPass fcgi://127.0.0.1:9000/your/site/webroot
    </LocationMatch>

    LogLevel debug
    ErrorLog /your/site/logs/error.log
    CustomLog /your/site/logs/access.log combined
</VirtualHost>

उपरोक्त vhost इस तरह से रूट में .htaccess के साथ पूरी तरह से काम करता है:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

मैं काफी नहीं मिलता है, URL rewriting inside a subdirectoryहालांकि आप क्या मतलब है (मैं केवल जड़ को फिर से लिख रहा हूँ। Php)।


(ओह, और आपको यह सुनिश्चित करना होगा कि Xdebug आपके सिस्टम पर FPM के साथ संघर्ष न करे, जिस बॉक्स से वे समान पोर्ट का उपयोग करना चाहते हैं।)


यह एक अच्छा समाधान है लेकिन दुर्भाग्य से यह दृष्टिकोण तब काम नहीं करता है जब। Urp युक्त .pp को वर्डप्रेस मल्टीसाइट के लिए फिर से लिखना होगा। /ms_blog_1/wp-admin/load-scripts.php?blah=blah
फिल

मेरे लिए, DirectoryIndex index.htmlप्रश्न में vhost में बस एक ओवरराइड जोड़ना इसे तय किया। अगर मेरे पास है DirectoryIndex index.php, तो ऐसा लगता है कि अन्य PHP फाइलें 'फाइल नहीं मिली' और 'प्राथमिक स्क्रिप्ट अज्ञात' त्रुटि दे रही हैं। मेरे मामले में, मेरे पास index.htmlएक php फ़ाइल है test.php
जेरलिंगगुगी

4

आपको बस इतना करना है:

 ProxyErrorOverride on

और ग्राहक पेज को सेट करना न भूलें:

ErrorDocument 404 /path/to/error_page_file    

2

यही मुझे मिला है। यह ठीक काम करने लगता है। मैंने Drupal को एक उपनिर्देशिका में रखा और इसके पुनर्लेखन कार्य, निर्देशिका अनुक्रमणिका कार्य और PATH_INFO कार्य करता है।

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} ^/((.*\.php)(/.*)?)$
RewriteCond %2 -f
RewriteRule . fcgi://127.0.0.1:9000/%1 [L,P]
RewriteOptions Inherit

मैंने ऐसा कुछ दोबारा लिखने के बिना करने की कोशिश की है ("अगर" और ऐसे), लेकिन मुझे काम करने के लिए कुछ भी नहीं मिला।

संपादित करें: ध्यान दें कि यदि आप इसे साझा होस्टिंग प्रदाता के रूप में लागू करना चाहते हैं, तो यह एक सुरक्षा मुद्दा हो सकता है। यह उपयोगकर्ताओं को मनमाने ढंग से fcgi प्रॉक्सी में PHP स्क्रिप्ट को पारित करने की अनुमति देगा। यदि आपके पास प्रत्येक उपयोगकर्ता के लिए अलग पूल है, जो विशेषाधिकार हमलों को बढ़ाने के लिए अनुमति देगा।


2

फिर भी एक और समाधान (Apache> = 2.4.10 की आवश्यकता है) - vhost के अंदर:

# define worker
<Proxy "unix:/var/run/php5-fpm-wp.bbox.nuxwin.com.sock|fcgi://domain.tld" retry=0>
    ProxySet connectiontimeout=5 timeout=7200
</Proxy>

<If "%{REQUEST_FILENAME} =~ /\.php$/ && -f %{REQUEST_FILENAME}">
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    SetHandler proxy:fcgi://domain.tld
</If>

तो यहां, PHP के लिए fcgi हैंडलर केवल तभी सेट किया जाएगा जब फ़ाइल मौजूद है और यदि उसका नाम PHP फ़ाइल एक्सटेंशन के साथ मेल खाता है।

BTW: उन लोगों के लिए जिनके पास ProxyErrorOverride को चालू करने के लिए विचार होगा , ध्यान रखें कि यह वास्तव में एक बुरा विचार है। इस निर्देश का उपयोग बिना किसी मुद्दे के कारण नहीं है। उदाहरण के लिए, 503 जैसे HTTP कोड भेजने वाले किसी भी PHP एप्लिकेशन को अप्रत्याशित परिणाम मिलेगा। डिफ़ॉल्ट त्रुटि हैंडलर किसी भी मामले में शामिल होगा और एपीआई प्रदान करने वाले PHP अनुप्रयोगों के लिए, यह वास्तव में एक बुरा व्यवहार है।


दुर्भाग्य से अभी भी "AH01071: त्रुटि मिली 'प्राथमिक स्क्रिप्ट अज्ञात \ n'" इस समाधान का उपयोग कर त्रुटि हुई।
k

1

इसे हल करने का सबसे अच्छा तरीका mod_proxy और mod_rewrite और php-fpm के लिए डिबगिंग लॉग ऑन करना है। 2.4 अपाचे में अब आप केवल विशिष्ट मॉड्यूल के लिए डीबगिंग लॉग ऑन कर सकते हैं। http://httpd.apache.org/docs/current/mod/core.html#loglevel प्रति-मॉड्यूल और प्रति-निर्देशिका कॉन्फ़िगरेशन Apache HTTP सर्वर 2.3.6 और बाद में उपलब्ध है

हो सकता है कि आपको निर्देशिकाओं पर दोहरी मार पड़ रही हो?

यहाँ मैं क्या उपयोग करता हूँ और यह ठीक काम करता है:

<LocationMatch ^(.*\.php)$>
  ProxyPass fcgi://127.0.0.1:9000/home/DOMAINUSER/public_html$1
</LocationMatch>

1

इस मुद्दे से निपटने में एक बात जो मेरे सामने आई, वह यह है कि यदि आप इसके संयोजन का उपयोग करते हैं:

chroot = /path/to/site
chdir = /

अपने fpm पूल विन्यास में, निर्देशन के लिए पूर्ण पथ पास न करें ProxyPass

ProxyPass fcgi://127.0.0.1:9020/$1

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


1

मुझे यकीन नहीं है कि अगर समस्या संबंधित है, लेकिन मुझे यहां आंशिक रूप से काम करने वाला समाधान मिला है:

https://stackoverflow.com/questions/44054617/mod-rewrite-in-2-4-25-triggering-fcgi-primary-script-unknown-error-in-php-fpm

लगता है कि इस ट्रिक को एक जोड़ा जा रहा है? उपयोग कर रहे हैं।

RewriteRule ^(.*)$ index.php?/$1 [L,NS]

के बजाय:

RewriteRule ^(.*)$ index.php/$1 [L,NS]

समस्या का स्रोत अपाचे 2.4.25 के mod_rewrite में परिवर्तन प्रतीत होता है। मैंने "लूप" का निरीक्षण करने के लिए अपाचे ट्रेस 1 लॉग स्तर का उपयोग किया है जो कि index.php / $ 1 के बाद php-fpm को $ 1 पास करता है। $ 1 "AH01071: त्रुटि 'प्राथमिक स्क्रिप्ट अज्ञात \ n'" त्रुटि उत्पन्न करता है।

आशा है कि यह छोटा सा tidbit किसी को अपनी समस्याओं को हल करने में मदद करेगा।



0

मैं भी त्रुटि के बाद php-fpm + apache 2.4.6 के लिए drupal उदाहरण के लिए है

लेकिन मैं mpm ईवेंट मॉड का उपयोग कर रहा हूं

बस डालें

DirectoryIndex index.php मेरे लिये कार्य करता है

तब मेरी Vhost सेटिंग नीचे की तरह दिखती है

<VirtualHost *:8080>
  ServerAdmin webmaster@localhost
  ServerName sever.com
  DocumentRoot /var/www/html/webroot
    ErrorLog logs/web-error_log
    CustomLog logs/web-access_log common
<IfModule mpm_event_module>
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/webroot/$1
</IfModule>
  <Directory /var/www/html/webroot>
     Options FollowSymlinks
     DirectoryIndex index.php
     AllowOverride All
     Require all granted
  </Directory>
</VirtualHost>

धन्यवाद

ड्रुपल की डिफ़ॉल्ट .htaccess फ़ाइल को संशोधित करने की कोई आवश्यकता नहीं है


[बुध अप्रैल २५ ०१: ४१: ३१.५२६ Apr8१ २०१ [] [प्रॉक्सी_फेकगी: त्रुटि] [पीआईडी ​​२०१२: टिड १४०१ t११५५21२१६०] ()०००)) निर्दिष्ट समय सीमा समाप्त हो गई है: [ग्राहक १२.0.०.१.१:६०३०8] एएच ०१०75५: त्रुटि भेजने का अनुरोध:, रेफर: www / व्यवस्थापक / रिपोर्ट
सील करना

0

मैं अपने सर्वर पर समान समस्याओं का सामना करता हूं (सेंटोस 7.3.16 डॉकटर)। Php-fpm लॉग को ट्रैक करने के बाद, मुझे एक sys lib याद आया। WARNING: [pool www] child 15081 said into stderr: "php-fpm: pool www: symbol lookup error: /lib64/libnsssysinit.so: undefined symbol: PR_GetEnvSecure" फिर, मैं nspr को पुनर्स्थापित करता हूं, यह काम करता है। यदि आप किसी भी तरीके की कोशिश करने के बाद समाधान नहीं ढूंढ सकते हैं, तो आप यह कोशिश कर सकते हैं। yum -y install/reinstall nspr


0

यह वर्डप्रेस 5.1.1 के साथ काम करता है और PHP 7.3, FastCGI, प्रॉक्सी, साथ ही MariaDB / MySQL के साथ नया है। मेरे सर्वर पर दो बार जाँच की गई। एक जादू की तरह काम करता है।

सबसे पहले CentOS / फेडोरा / रेड हैट पर

sudo yum remove php*
sudo yum --enablerepo=extras install epel-release
sudo yum install php-fpm php-mysql php-gd php-imap php-mbstring 
sudo grep -E '(proxy.so|fcgi)' /etc/httpd/conf.modules.d/00-proxy.conf
sudo mv /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php.conf_bak

इस फ़ाइल को संपादित करें:

sudo nano /etc/php-fpm.d/www.conf

इसे चिपकाएँ:

[www]

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses on a
;                            specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000
listen = /run/php-fcgi.sock

sudo ll /run/php-fcgi.sock

Srw-rw-rw- देना चाहिए।

या डेबियन / उबंटू पर कैसे सेट अप करें

ट्यूटोरियल:

स्रोत: https://emi.is/?page=articles&article=php-7-installation-and-configuration-for-apache-2.4-use-php-fpm-(debian,-repository)


sudo apt purge 'php*' or sudo apt-get purge 'php*'
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt install php7.3 php7.3-fpm php-mysql php-mbstring php-gd php-imap libapache2-mod-security2 modsecurity-crs
systemctl status php7.3-fpm
systemctl stop php7.3-fpm.service

sudo a2dismod php7.0 php7.1 php7.2 mpm_event mpm_worker
sudo a2enmod mpm_prefork
sudo a2enmod php7.3
sudo systemctl restart apache2 (httpd in CentOS)

समस्या यह है कि Ondrej रेपो से php 7.3 केवल mpm_prefork मोड के साथ काम करता है। उसके पास git repo है, इसलिए आप उसे नेट में खोज सकते हैं और उससे पूछ सकते हैं, क्या वह mpm_worker और mpm_event के लिए php 7.3 बना देगा। डेबियन परिवार के विकृतियों के लिए बाकी विन्यास नीचे है:


sudo apt --assume-yes install php7.3-fpm
sudo systemctl stop php7.3-fpm.service
sudo rm /var/log/php7.0-fpm.log
sudo mkdir /var/log/php7.3-fpm/
sudo touch /var/log/php7.3-fpm/error.log
sudo mkdir /var/log/php7.3/
sudo touch /var/log/php7.3/error.log
sudo mkdir /var/tmp/php7.3/
sudo > /etc/php/7.3/fpm/php.ini
sudo > /etc/php/7.3/fpm/php-fpm.conf
sudo rm /etc/php/7.3/fpm/pool.d/www.conf
sudo touch /etc/php/7.3/fpm/pool.d/example.com.conf
sudo useradd --comment "PHP" --shell "/usr/sbin/nologin" --system --user-group php

sudo nano /etc/php/7.3/fpm/php.ini

पेस्ट


[PHP]
date.timezone = Europe/Prague
display_errors = Off
error_log = /var/log/php7.3/error.log
error_reporting = 32767
log_errors = On
register_argc_argv = Off
session.gc_probability = 0
short_open_tag = Off
upload_tmp_dir = /var/tmp/php7.3/

sudo nano /etc/php/7.3/fpm/php-fpm.conf

पेस्ट


[global]
error_log = /var/log/php7.3-fpm/error.log
include = /etc/php/7.3/fpm/pool.d/*.conf

sudo nano /etc/php/7.3/fpm/pool.d/example.com.conf

पेस्ट


[example.com]
group = php
listen = 127.0.0.1:9000
pm = ondemand
pm.max_children = 5
pm.max_requests = 200
pm.process_idle_timeout = 10s
user = php

sudo nano /etc/logrotate.d/php7.3-fpm

इसे txt फ़ाइल में कॉपी करें:

/var/log/php7.3-fpm.log {
    rotate 12
    weekly
    missingok
    notifempty
    compress
    delaycompress
    postrotate
            /usr/lib/php/php7.3-fpm-reopenlogs
    endscript
}

इसे हटा दें और फिर इसे ऊपर के बजाय चिपकाएँ:

/var/log/php7.3/*.log /var/log/php7.3-fpm/*.log
{
copytruncate
maxage 365
missingok
monthly
notifempty
rotate 12
}

निर्देश जोड़ें

sudo nano /etc/apache2/sites-available/example.com.conf


<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/html/example.com/public_html
    DirectoryIndex index.php index.htm index.html index.xht index.xhtml
    LogLevel info warn
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <FilesMatch "^\.ht">
    Require all denied
    </FilesMatch>

    <files readme.html>
    order allow,deny
    deny from all
    </files>

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =example.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/example.com/public_html

    <Directory /var/www/html/example.com/public_html>
        Options Indexes FollowSymLinks Includes IncludesNOEXEC SymLinksIfOwnerMatch
        AllowOverride None
    </Directory>
</VirtualHost>

फिर साइट सक्षम करें:

sudo a2ensite /etc/apache2/sites-available/example.com.conf

अगला एडिट एसएसएल साइट (इस मामले में लेट्स एनक्रिप्ट से सर्टिफिकेट स्थापित किया गया है और पहले एसएसएल सर्टिफिकेशन कॉन्फ़िगरेशन की शुरुआत में कॉन्फ़िगर किया गया है)।

sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf

<IfModule mod_ssl.c>
    #headers for security man in the middle attack find how to enable this mod in Google
    LoadModule headers_module modules/mod_headers.so
    <VirtualHost *:443>
        Header always set Strict-Transport-Security "max-age=15768000"
        SSLEngine On
        ServerName example.com
        ServerAdmin admin@example.com
        DocumentRoot /var/www/html/example.com/public_html
        <Directory /var/www/html/example.com/public_html>
        Options Indexes FollowSymLinks Includes IncludesNOEXEC SymLinksIfOwnerMatch
        AllowOverride All
        Require all granted
        DirectoryIndex index.php
        RewriteEngine On
         <FilesMatch ^/(.*\.php(/.*)?)$>
           SetHandler "fcgi://example.com:9000/var/www/html/example.com/public_html"
          </FilesMatch>
        </Directory>
    # Log file locations
    #LogLevel info ssl:warn
    LogLevel debug
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # modern configuration
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    #SSLCipherSuite HIGH:!aNULL:!MD5
    SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM$
    SSLHonorCipherOrder on
    SSLCompression off
    SSLSessionTickets off

    <FilesMatch "^\.ht">
    Require all denied
    </FilesMatch>

    <files readme.html>
       order allow,deny
       deny from all
    </files>

</VirtualHost>
    #Stapling OCSP for Let's Encrypt certs.
    SSLUseStapling          on
    SSLStaplingResponderTimeout     5
    SSLStaplingReturnResponderErrors        off
    SSLStaplingCache        shmcb:/var/run/ocsp(128000)
</IfModule>

sudo a2enmod proxy proxy_fcgi setenvif
sudo systemctl reload apache2.service
sudo chown --recursive root:adm /etc/php/
sudo chmod --recursive 0770 /etc/php/
sudo chown --recursive php:adm /var/log/php7.3/
sudo chown --recursive php:adm /var/log/php7.3-fpm/
sudo chmod --recursive 0770 /var/log/php7.3/
sudo chmod --recursive 0770 /var/log/php7.3-fpm/
sudo chown --recursive php:php /var/tmp/php7.3/
sudo chmod --recursive 0770 /var/tmp/php7.3/
sudo a2enconf php7.3-fpm
sudo systemctl enable php7.3-fpm.service
sudo systemctl start php7.3-fpm.service

डेबियन / उबंटू पर फ़ायरवॉल में पोर्ट 9000 जोड़ने के लिए याद रखें

sudo ufw allow 9000/tcp
sudo ufw status

CentoOS / फेडोरा / रेड हैट पर

sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
sudo firewall-cmd --state 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.