Introducción a Nginx y PHP FPM

28
Optimización de servidor web Con Nginx y PHP-FPM Yannick Warnier @ywarnier

Transcript of Introducción a Nginx y PHP FPM

Page 1: Introducción a Nginx y PHP FPM

Optimización de servidor web

ConNginx y PHP-FPM

Yannick Warnier@ywarnier

Page 2: Introducción a Nginx y PHP FPM
Page 3: Introducción a Nginx y PHP FPM

http://t3n.de/news/wp-content/uploads/2016/03/nginx-hoster-benchmark-nginx-vs-apache.jpg

Page 4: Introducción a Nginx y PHP FPM

PHP-FPM● FastCGI Process Manager

● Implementación alternativa de PHP FastCGI

● Con funcionalidades adicionales utiles para sitios de todos tamaños, en particular sitios muy activos

● Integrado en PHP desde PHP 5.4 en Nov 2011

Page 5: Introducción a Nginx y PHP FPM
Page 6: Introducción a Nginx y PHP FPM

PHP-FPM● Gestión de procesos avanzada

● Posibilidad workers con uid/ambientes distintos

● ...y php.ini distintos

● Soporte de upload acelerado

● Slow log

● ...

Page 7: Introducción a Nginx y PHP FPM

PHP-FPM + Nginx

Page 8: Introducción a Nginx y PHP FPM

Apache + modPHP

Apache

HDD / SSD

DB

Mod-PHP

Page 9: Introducción a Nginx y PHP FPM

Apache + modPHP

Apache

HDD / SSD

DB

Mod-PHP

Page 10: Introducción a Nginx y PHP FPM

Apache + modPHP

Apache

HDD / SSD

DB

Mod-PHP

Page 11: Introducción a Nginx y PHP FPM

Apache + modPHP

Apache

HDD / SSD

DB

Mod-PHP

Page 12: Introducción a Nginx y PHP FPM

Nginx + PHP-FPM

Nginx

HDD / SSD

DBPHP-FPM

PHP-FPM

PHP-FPM

Page 13: Introducción a Nginx y PHP FPM

Nginx + PHP-FPM

Nginx

HDD / SSD

DBPHP-FPM

PHP-FPM

PHP-FPM

Page 14: Introducción a Nginx y PHP FPM

Nginx + PHP-FPM

Nginx

Asíncrono

HDD / SSD

DBPHP-FPM

PHP-FPM

PHP-FPM

Page 15: Introducción a Nginx y PHP FPM

Nginx + PHP-FPM

Nginx

Asíncrono

HDD / SSD

DBPHP-FPM

PHP-FPM

PHP-FPM

Page 16: Introducción a Nginx y PHP FPM

Nginx + PHP-FPM

Nginx

Asíncrono

HDD / SSD

DBPHP-FPM

PHP-FPM

PHP-FPM

Page 17: Introducción a Nginx y PHP FPM

Instalar PHP-FPM

Page 18: Introducción a Nginx y PHP FPM

Configurar PHP-FPMuser@server:~$ sudo vim /etc/php/7.1/fpm/conf.d/       php­fpm.conf  php.ini       pool.d/   user@server:~$ sudo vim /etc/php/7.1/fpm/php.ini

[PHP]

;;;;;;;;;;;;;;;;;;;; About php.ini   ;;;;;;;;;;;;;;;;;;;;; PHP's initialization file, generally called php.ini, is responsible for; configuring many of the aspects of PHP's behavior.

; PHP attempts to find and load this configuration from a number of locations.; The following is a summary of its search order:

Page 19: Introducción a Nginx y PHP FPM

Configurar PHP-FPMuser@server:~$ sudo vim /etc/php/7.1/fpm/pool.d/www.conf

; Start a new pool named 'www'.; the variable $pool can be used in any directive and will be replaced by the; pool name ('www' here)[www]

; …

user = www­datagroup = www­data

; …

listen = /run/php/php7.1­fpm.socklisten.owner = www­datalisten.group = www­data

; …

pm = dynamicpm.max_children = 5pm.start_servers = 2pm.min_spare_servers = 1pm.max_spare_servers = 3pm.process_idle_timeout = 10s;

Page 20: Introducción a Nginx y PHP FPM

Configurar PHP-FPMuser@server:~$ sudo vim /etc/php/7.1/fpm/pool.d/www.conf

pm = dynamicpm.max_children = 5pm.start_servers = 2pm.min_spare_servers = 1pm.max_spare_servers = 3pm.process_idle_timeout = 10s;pm.max_requests = 500access.log = log/$pool.access.log

slowlog = log/$pool.log.slowrequest_slowlog_timeout = 0

Page 21: Introducción a Nginx y PHP FPM

Configurar PHP-FPMuser@server:~$ sudo vim /etc/php/7.1/fpm/pool.d/www.conf

;php_admin_value[sendmail_path] = /usr/sbin/sendmail ­t ­i ­f [email protected];php_flag[display_errors] = off;php_admin_value[error_log] = /var/log/fpm­php.www.log;php_admin_flag[log_errors] = on;php_admin_value[memory_limit] = 32M

En resumen: todo por defecto!

Page 22: Introducción a Nginx y PHP FPM

Configurar Nginx- sudo apt-get install nginx-full- sudo vim /etc/nginx/nginx.conf

user www­data;worker_processes auto;pid /run/nginx.pid;

events {    worker_connections 768;    # multi_accept on;}

Page 23: Introducción a Nginx y PHP FPM

Configurar Nginx- sudo apt-get install nginx-full- sudo vim /etc/nginx/nginx.conf

http {

    ##    # Basic Settings    ##

    sendfile on;    tcp_nopush on;    tcp_nodelay on;    keepalive_timeout 65;    types_hash_max_size 2048;    # server_tokens off;

Page 24: Introducción a Nginx y PHP FPM

Configurar Nginx- sudo apt-get install nginx-full- sudo vim /etc/nginx/sites-available/default

server {    listen 80 default_server;    listen [::]:80 default_server;

    index index.html index.htm index.nginx­debian.html;

    server_name _;

    location / {        try_files $uri $uri/ =404;    }

Page 25: Introducción a Nginx y PHP FPM

Configurar Nginx- sudo apt-get install nginx-full- sudo vim /etc/nginx/sites-available/default

server {    # ...    # pass the PHP scripts to FastCGI server    # listening on 127.0.0.1:9000    #    location ~ \.php$ {       include snippets/fastcgi­php.conf;       # With php7.1­fpm:       fastcgi_pass unix:/run/php/php7.1­fpm.sock;    }

Page 26: Introducción a Nginx y PHP FPM

Configurar Nginx- sudo service php-fpm restart- sudo service apache2 stop (si tiene Apache)- sudo service nginx restart

Page 27: Introducción a Nginx y PHP FPM

Ventajas- Asíncrono (libevent)- Balanceador de carga (directiva “upstream”)- Reverse Proxy (caché)- Soporte SSL completo- Soporte moderación

- limit_conn / limit_conn_zone- limit_rate- limit_req / limit_req_zone- max_conns (upstream)- queue

- Compresión

Page 28: Introducción a Nginx y PHP FPM

@ywarnierBeezNest