posted by qubix on January 30, 2013

Λοιπόν ήρθε η ώρα να εγκαταστήσω έναν nginx. Το μηχανάκι στο οποίο θα κάνω το πείραμα έχει ήδη επάνω ένα lamp installation οπότε για αρχή θα απεγκαταστήσω τον apache


apt-get --purge remove apache2*

Ωραία τώρα που ξεφορτωθήκαμε τον apache, πάμε να βάλουμε τον nginx


apt-get install nginx php5-fpm
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  nginx-common nginx-full
The following NEW packages will be installed:
  nginx nginx-common nginx-full php5-fpm
0 upgraded, 4 newly installed, 0 to remove and 17 not upgraded.
Need to get 3,209 kB of archives.
After this operation, 9,382 kB of additional disk space will be used.
Do you want to continue [Y/n]? y

Μετά πάμε να ρυθμίσουμε λίγο το php5-fpm. Τι είναι όμως αυτό το fpm? Κάνοντας ένα apt-cache show php5-fpm παίρνουμε το αποτέλεσμα: Description-en: server-side, HTML-embedded scripting language (FPM-CGI binary) This package provides the Fast Process Manager interpreter that runs as a daemon and receives Fast/CGI requests. Μάλιστα, τώρα που μάθαμε τι είναι αυτό που θα ρυθμίσουμε και που εγκαταστήσαμε, πάμε στο


nano /etc/php5/fpm/php-fpm.conf

Σκοπός μας είναι να αλλάξουμε μερικές μεταβλητές τις οποίες δυστυχώς δεν βρίσκουμε στο παραπάνω αρχείο και πρέπει να πάμε στο conf του pool [www] του php5-fpm. Τα pools είναι ένας τρόπος να παραμετροποιούμε διαφορετικά sites ή groups από sites στα οποία θα συμπεριφέρεται διαφορετικά ο php5-fpm daemon.


nano /etc/php5/fpm/pool.d/www.conf

Στο αρχείο αυτό βάζουμε τα παρακάτω: pm.max_children = 25 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 10 pm.max_requests = 500 request_terminate_timeout = 35s και κάνουμε ένα restart τον daemon:


/etc/init.d/php5-fpm restart

Τα παραπάνω values είναι ενδεικτικά για 1g RAM και εσείς ανάλογα με το μηχάνημά σας μπορείτε να τα τροποποιήσετε αναλόγως.
Σειρά τώρα έχει ο nginx, θέλουμε απλά να του βάλουμε τα παρακάτω: client_max_body_size 20M; client_body_buffer_size 128k; Το αρχείο είναι το /etc/nginx/nginx.conf. Αν τα παραπάνω δεν τα βρίσκουμε, τα βάζουμε μέσα στο http block, στο οποίο υπάρχουν διάφορα ενδιαφέροντα όπως gzip support, που είναι τα logs κλπ κλπ.
Τώρα πάμε να δούμε λίγο το default profile στο sites-enabled:


nano /etc/nginx/sites-enabled/default

To πρώτο που έκανα είναι να αλλάξω το root path από /usr/share/nginx σε /var/www .Επίσης έκανα comment τη γραμμή listen [::]:80 default_server; που είναι για ipv6.
Τώρα πάμε να του πούμε πως θέλουμε τα php scripts να τα περνάει στο php5-fpm. To section αυτό είναι κάτω από το: # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
Και το κάνουμε κάπως έτσι:


 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
 # With php5-cgi alone:
 # fastcgi_pass 127.0.0.1:9000;
 # With php5-fpm:
 fastcgi_pass unix:/var/run/php5-fpm.sock;
 fastcgi_index index.php;
 include fastcgi_params;

Όπως βλέπουμε το κομμάτι με το από CGI παραμένει commented, αφού εμείς έχουμε fcgi με το php5-fpm. Καλό είναι να βάλουμε τα .htaccess files να μην είναι προσβάσιμα οπότε:


 # deny access to .htaccess files, if Apache's document root
 # concurs with nginx's one
 location ~ /\.ht {
    deny all;
 }

Μετά από όλα αυτά, πάμε να κάνουμε reload τον nginx:


/etc/nginx/nginx reload

Σε περίπτωση σφάλματος, κοιτάμε στο /var/log/nginx/error.log. Για παράδειγμα εγώ είχα ενεργοποιήσει το ssl, το οποίο χτυπούσε και δεν μπορούσε να ξεκινήσει ο nginx.

Τεστάρουμε τώρα την εγκατάστασή μας πηγαίνοντας στο http://localhost

hyperworks