Innovative Open source WEB technologies for everyone

Το ιστολόγιο της IOWEB Technologies

Με νέα μας και λύσεις προβλημάτων που συναντήσαμε

Φιλοξενία Magento σε Plesk Onyx με χρήση Nginx

Με το Plesk Onyx έχουμε πλέον την δυνατότητα να απενεργοποιήσουμε εντελώς τον Apache και να χρησιμοποιήσουμε τον Nginx με PHP-FPM για να εξυπηρετεί όλα τα αιτήματα προς τον server.

Προαπαιτούμενα:

  1. Ένα VPS ή ένας dedicated server με Plesk στον οποίο έχουμε πρόσβαση με δικαιώματα root.
  2. Βασική κατανόηση της χρήσης του SSH
  3. Γνώση χειρισμού ενός cli editor (Nano ή Vi)

Χρήσιμα:

  1. Καλή κατανόηση των εντολών ρύθμισης του Nginx για τα φιλοξενούμενα συστήματα

HOWTO:

Καταρχήν θα πρέπει να γυρίσουμε το domain σε PHP-FPM served by Nginx. Αυτό μπορούμε να το κάνουμε πηγαίνοντας στο  Domain Settings -> PHP Settings και επιλέγοντας FPM application served by nginx

PHP Settings

Εικόνα 1: Πηγαίνουμε στο domain Settings

PHP FPM Settings plesk

Εικόνα 2: Επιλέγουμε FPM application served by nginx

Στο επόμενο στάδιο πηγαίνουμε στο πεδίο Apache & nginx Settings και απενεργοποιούμε το  Proxy Mode. Αυτό θα αναγκάσει τον nginx να εξυπηρετεί όλα τα αιτήματα (requests).

NGINX settings plesk

Εικόνα 3: Επιλογή Apache & nginx Settings

Switch off Proxy mode

Εικόνα 4: Απενεργοποίηση Proxy mode

Με το που θα ενεργοποιηθούν αυτές οι αλλαγές θα παρατηρήσετε ότι η ιστοσελίδα έχει σταματήσει να λειτουργεί. Θα λάβετε κάποιο μήνυμα σφάλματος όπως 504 Gateway error ή μπορεί να δείτε ότι φορτώνει η αρχική σελίδα αλλά έχουν πάψει να λειτουργούν τα Clean / SEF urls, τα οποία παρουσιάζουν σφάλμα 404. Το τι ακριβώς θα συναντήσετε εξαρτάται από την υποέκδοση του Plesk που χρησιμοποιείτε μιας και τα πρότυπα VHOSTS έχουν αλλαχθεί αρκετές φορές.

Το πρόβλημα προκύπτει από το ότι απαιτούνται επιπλέον εντολές nginx οι οποίες στην περίπτωση του Apache βρίσκονται στο αρχείο .htaccess το οποίο όμως ο nginx δεν μπορεί να διαβάσει.

Στην περίπτωση του Magento θα συναντήσετε αρκετά άρθρα που προτείνουν μια απλή ρύθμιση όπως η παρακάτω:

location / {
        index index.html index.php; ## Allow a static html file to be shown first
        try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler
        expires 30d; ## Assume all files are cachable
    }
 
    ## These locations would be hidden by .htaccess normally
    location ^~ /app/                { deny all; }
    location ^~ /includes/           { deny all; }
    location ^~ /lib/                { deny all; }
    location ^~ /media/downloadable/ { deny all; }
    location ^~ /pkginfo/            { deny all; }
    location ^~ /report/config.xml   { deny all; }
    location ^~ /var/                { deny all; }
 
    location /var/export/ { ## Allow admins only to view export folder
        auth_basic           "Restricted"; ## Message shown in login window
        auth_basic_user_file htpasswd; ## See /etc/nginx/htpassword
        autoindex            on;
    }
 
    location  /. { ## Disable .htaccess and other hidden files
        return 404;
    }
 
    location @handler { ## Magento uses a common front handler
        rewrite / /index.php;
    }
 
    location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
        rewrite ^(.*.php)/ $1 last;
    }
 
    location ~ .php$ { ## Execute PHP scripts
        if (!-e $request_filename) { rewrite / /index.php last; } ## Catch 404s that try_files miss
 
        expires        off; ## Do not cache dynamic content
        fastcgi_pass   127.0.0.1:9000;
        #fastcgi_param  HTTPS $fastcgi_https;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  MAGE_RUN_CODE default; ## Store code is defined in administration > Configuration > Manage Stores
        fastcgi_param  MAGE_RUN_TYPE store;
        include        fastcgi_params; ## See /etc/nginx/fastcgi_params
    }

ADDITIONAL NGINX DIRECTIVES

Αν το δοκιμάσετε θα πέσετε σε ένα γνωστό bug του Plesk, το οποίο προκαλεί το σφάλμα:

΅“duplicate location /”

Προσωρινά, και μέχρι να φτιαχτεί από την ομάδα ανάπτυξης του Plesk μπορείτε να εφαρμόσετε το παρακάτω workaround.

Ευτυχώς το PLESK μας επιτρέπει να παρακάμψουμε τα υπάρχοντα πρότυπα ρυθμίσεων vhost δημιουργώντας ένα αρχείο στο:

/usr/local/psa/admin/conf/templates/custom/domain/nginxDomainVirtualHost.php

Το οποίο αντιγράφουμε από:

/usr/local/psa/admin/conf/templates/default/domain/nginxDomainVirtualHost.php

Και στο οποίο αφαιρούμε ή καλύτερα τοποθετούμε σε σχόλιο τον προβληματικό κωδικά που βρίσκεται περίπου στην γραμμή 142 :

#location ~ /$ {
       <?php //echo $VAR->domain->physicalHosting->proxySettings['directoryIndex'] ?>
#}

Έπειτα μπορούμε να ενεργοποιήσουμε τις απαιτούμενες για το Magento εντολές:

location / {
    index index.html index.php; ## Allow a static html file to be shown first
    try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler
    expires 30d; ## Assume all files are cachable
}

## These locations would be hidden by .htaccess normally
location ^~ /app/                { deny all; }
location ^~ /includes/           { deny all; }
location ^~ /lib/                { deny all; }
location ^~ /media/downloadable/ { deny all; }
location ^~ /pkginfo/            { deny all; }
location ^~ /report/config.xml   { deny all; }
location ^~ /var/                { deny all; }

location /var/export/ { ## Allow admins only to view export folder
auth_basic           "Restricted"; ## Message shown in login window
auth_basic_user_file htpasswd; ## See /etc/nginx/htpassword
autoindex            on;
}

location  /. { ## Disable .htaccess and other hidden files
return 404;
}

location @handler { ## Magento uses a common front handler
rewrite / /index.php;
}

location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
rewrite ^(.*.php)/ $1 last;
}

*Προσέξτε ότι η απενεργοποίηση αυτής της εντολής είναι πολύ πιθανόν να δημιουργήσει προβλήματα σε άλλα συστήματα που βασίζονται σε αυτήν και θα πρέπει να προστεθούν οι αντίστοιχες εντολές για τις υπόλοιπες ιστοσελίδες που φιλοξενείτε.

Τα παραπάνω δοκιμάστηκαν και λειτουργούσαν την 03/01/2017 χρησιμοποιώντας PLESK Onyx Version 17.0.17 Update #12, Magento 1.9.x σε server με Debian Jessie

Βαθμολογήστε αυτό το άρθρο
(0 ψήφοι)

Σχετικά Άρθρα

ΒΡΕΙΤΕ ΜΑΣ

Επταπυργίου 149, Συκιές
ΤΚ: 56626
Θεσσαλονίκη

Τηλ: 2314012823


ΩΡΕΣ ΛΕΙΤΟΥΡΓΙΑΣ

Δευτέρα-Παρασκευή: 9:00 – 17:00

Search