jueves, 14 de junio de 2012

Instalación Nginx + PHP-FPM

En esta entrada vamos a ver la instalación de un servidor web Nginx y de PHP-FPM (FastCGI Process Manager).

La instalación que se hace en este ejemplo es bajo un sistema Linux CentOS 6 x86_64.

Descargas de software necesario.

NGINX: Yo usé esta descarga, pero se puede usar cualquier otra disponible en la web: http://www.nginx.org
[root@TEST]# wget http://nginx.org/download/nginx-1.0.13.tar.gz

PCRE: Se pueden encontrar mas descargas de pcre en http://www.pcre.org
[root@TEST]# wget http://sourceforge.net/projects/pcre/files/latest/download?source=files

ZLIB: Se pueden encontrar mas descargas en http://www.zlib.net
[root@TEST]# wget http://zlib.net/zlib-1.2.6.tar.gz


Instalación.

Paquetes necesarios.

[root@TEST]# yum install openssl openssl-devel

Descomprimimos el software descargado previamente:

[root@TEST]# tar zxvf nginx-1.0.13.tar.gz
[root@TEST]# tar zxvf pcre-8.30.tar.gz
[root@TEST]# tar zxvf zlib-1.2.6.tar.gz

Instalación Nginx desde código fuente.

A continuación una breve explicación de cada parámetro:

--prefix : Lugar donde queremos que haga la instalación del software.
--with-http_ssl_module : Añade soporte para el protocolo HTTPS es requerido la instalación previa del openssl.
--with-pcre : Apunta las fuentes descargadas de pcre para permitir el uso de expresiones regulares en la directiva "location" y para el http_rewrite_module.
--with-zlib : Apunta las fuentes descargadas de zlib, necesario para el http_gzip_module.
--with-http_stub_status_module : Habilita al servidor de Nginx facilitar estados de conexión a los clientes. Para monitorizar el rendimiento.
Mas info en la url: http://nginx.org/en/docs/install.html

[root@TEST]# cd nginx-1.0.13
[root@TEST]# mkdir -p /opt/www
[root@TEST]# ./configure --prefix=/opt/www/nginx-1.0.13 --with-http_ssl_module --with-pcre=../pcre-8.30 --with-zlib=../zlib-1.2.6 --with-http_stub_status_module
[root@TEST]# make
[root@TEST]# make install

Instalación de PHP-FPM.

Descomprimimos el software descargado previamente:

Podemos descargar cualquier otra versión disponible en http://www.php.net
[root@TEST]# wget http://es.php.net/get/php-5.4.0.tar.gz/from/es2.php.net/mirror
[root@TEST]# tar zcvf php-5.4.0.tar.gz

Instalación de software necesario.

[root@TEST]# yum install libxml2 libxml2-devel
[root@TEST]# yum install libcurl libcurl-devel
[root@TEST]# yum install libjpeg-devel
[root@TEST]# yum install libpng-devel

[root@TEST]# wget http://pkgs.repoforge.org/libmcrypt/libmcrypt-2.5.7-1.2.el6.rf.x86_64.rpm
[root@TEST]# wget http://pkgs.repoforge.org/libmcrypt/libmcrypt-devel-2.5.7-1.2.el6.rf.x86_64.rpm
[root@TEST]# rpm -ivh libmcrypt-2.5.7-1.2.el6.rf.x86_64.rpm
[root@TEST]# rpm -ivh libmcrypt-devel-2.5.7-1.2.el6.rf.x86_64.rpm

Instalación del PHP.

[root@TEST]# cd php-5.4.0
[root@TEST php-5.4.0]# ./configure --enable-fastcgi --enable-fpm --with-mcrypt --enable-mbstring --with-curl --with-sockets --with-gd --with-zlib --with-iconv --with-dom --with-jpeg --with-openssl --with-libdir=lib64

Nota: Si nuestro sistema es de 32 bits, omitiremos el parámetro "--with-libdir=lib64"

[root@TEST]# make
[root@TEST]# make install

Archivos de configuración.

Antes de arrancar los servicios es necesario dejar preparados algunos archivos de configuración necesarios para el correcto funcionamiento de los servicios.

[root@TEST php-5.4.0]# cp php.ini-development /etc/php.ini
[root@TEST ~]# vi /usr/local/etc/php-fpm.conf
;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

;include=etc/fpm.d/*.conf

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
;pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = alert
;emergency_restart_threshold = 0
;emergency_restart_interval = 0
;process_control_timeout = 0
;daemonize = yes
;rlimit_files = 1024
;rlimit_core = 0

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ; 
;;;;;;;;;;;;;;;;;;;;

[www]
;prefix = /path/to/pools/$pool
listen = 127.0.0.1:9000
;listen.backlog = -1
;listen.allowed_clients = 127.0.0.1
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0666
user = nobody
group = nobody
pm = dynamic
pm.max_children =  20
pm.start_servers = 5
pm.min_spare_servers = 4
pm.max_spare_servers =  10
;pm.max_requests = 500
;pm.status_path = /status
;ping.path = /ping
;ping.response = pong
;access.log = log/$pool.access.log
;access.format = %R - %u %t "%m %r%Q%q" %s %f %{mili}d %{kilo}M %C%%
;request_terminate_timeout = 0
;request_slowlog_timeout = 0
;slowlog = log/$pool.log.slow
;rlimit_files = 1024
;rlimit_core = 0
;chroot = 
;chdir = /var/www
;catch_workers_output = yes
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
;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] = 48M
rlimit_files = 32768

rlimit_core = unlimited

[root@TEST]# cat /opt/www/nginx-1.0.13/conf/nginx.conf

#user  nobody;
worker_processes  4;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

 ## Size Limits
    #client_body_buffer_size     128K;
    client_header_buffer_size   128K;
    #client_max_body_size          24M;
    large_client_header_buffers 1 1k;
    server_names_hash_bucket_size 128;
    ## Timeouts
    client_body_timeout   60;
    client_header_timeout 60;
    expires               24h;
    keepalive_timeout     60;
    send_timeout          60;

    ## General Options
    ignore_invalid_headers   on;
    keepalive_requests      100;
    limit_zone gulag $binary_remote_addr 5m;
    recursive_error_pages    on;
    sendfile        on;
    server_name_in_redirect off;
    server_tokens           off;

    ## TCP options
    tcp_nodelay on;
    tcp_nopush  on;

    ## Compression
    gzip              on;
    gzip_comp_level   6;
    gzip_http_version 1.0;
    gzip_min_length   0;
    gzip_types        text/plain text/css image/x-icon application/x-perl application/x-httpd-cgi;
    gzip_vary         on;

 ## Log Format
    log_format  main  '$remote_addr $host $remote_user [$time_local] "$request"
    $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_time';

 ## Proxy options
    #proxy_buffering           on;
    #proxy_cache_min_uses       3;
    #proxy_cache_path          /opt/www/nginx-1.0.13/proxy_temp/ levels=1:2 keys_zone=cache:10m inactive=10m max_size=1000M;
    #proxy_cache_valid         any 10m;
    #proxy_ignore_client_abort off;
    #proxy_intercept_errors    on;
    #proxy_next_upstream       error timeout invalid_header;
    #proxy_redirect            off;
    #proxy_set_header          X-Forwarded-For $remote_addr;
    #proxy_connect_timeout     60;
    #proxy_send_timeout        60;
    #proxy_read_timeout        60;

    #server {
    #    listen       80;
    #    server_name  localhost;
#
#        location / {
#            root   html;
#            index  index.html index.htm;
#        }
#
#        #error_page  404              /404.html;
#
#        # redirect server error pages to the static page /50x.html
#        #
#        error_page   500 502 503 504  /50x.html;
#        location = /50x.html {
#            root   html;
#        }
#
#        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
#        #
#        #location ~ \.php$ {
#        #    proxy_pass   http://127.0.0.1;
#        #}
#
#        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#        #
#        #location ~ \.php$ {
#        #    root           html;
#        #    fastcgi_pass   127.0.0.1:9000;
#        #    fastcgi_index  index.php;
#        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#        #    include        fastcgi_params;
#        #}
#
#        # deny access to .htaccess files, if Apache's document root
#        # concurs with nginx's one
#        #
#        #location ~ /\.ht {
#        #    deny  all;
#        #}
#        location /nginx_status {
#        stub_status on;
#        allow 10.0.0.0/8;
#        deny all;
#        }
#
#    }


include /opt/www/nginx-1.0.13/vhosts/*.conf;

}

Arranque de los servicios.

Nginx.

Para arrancar el servidor Nginx:

[root@TEST]# /opt/www/nginx-1.0.13/sbin/nginx

Para parar el servidor Nginx:

[root@TEST]# /opt/www/nginx-1.0.13/sbin/nginx -s stop

Para recargar la configuración:

[root@TEST]# /opt/www/nginx-1.0.13/sbin/nginx -s reload

PHP-FPM.

[root@TEST]# php-fpm --php-ini /etc/php.ini

1 comentario:

  1. hola puedo instalar estos paquete arriba del apache y php normal? si instalo estos se me pierden los datos de las webs alojadas?

    ResponderEliminar