GNU/Linux >> Tutoriales Linux >  >> Cent OS

Ejecute WordPress+W3TotalCache con la pila LEMP (Nginx, PHP-FPM+APC y MySQL) en CentOS 6 VPS para obtener el máximo rendimiento

Nginx es un servidor web HTTP de alto rendimiento gratuito, de código abierto que, a diferencia de otros servidores web, no se basa en el manejo de subprocesos de las solicitudes, sino que utiliza un evento mucho más escalable (asincrónico ) arquitectura.

Esto utiliza una cantidad de memoria muy pequeña y predecible bajo una carga pesada. Nginx en combinación con el simple y muy robusto FastCGI Process Manager para PHP (PHP-FPM ) y el servidor de base de datos más popular del mundo MySQL puede brindarle mucha potencia y rendimiento sin dejar de utilizar una pequeña huella de memoria.

El siguiente artículo trata sobre cómo instalar y configurar LEMP Stack en un CentOS 6 VPS y aloja WordPress ultrarrápido aplicaciones web potenciadas.

El artículo se divide en las siguientes secciones:

  • Configuración inicial
  • Instalar y configurar Nginx
  • Instalar y configurar MySQL
  • Instalar y configurar PHP-FPM
  • Instalar y configurar WordPress
  • Configure el almacenamiento en caché para obtener el mejor rendimiento
Antes de continuar con la instalación, inicie una sesión de pantalla ejecutando:
## screen -U -S lemp-stack

Una vez que esté en la sesión de pantalla, asegúrese de que su CentOS 6 VPS esté completamente actualizado ejecutando:

## yum update

si tiene Apache instalado en su VPS, deténgalo y elimínelo ejecutando:

## /etc/init.d/httpd stop
## yum remove httpd
PASO 1) Instalar y configurar Nginx

habilite el repositorio de epel ejecutando:

encuentre su arquitectura VPS ejecutando uname -m

– VPS de 32 bits:

## wget -P /tmp http://mirror.pnl.gov/epel/6/i386/epel-release-6-8.noarch.rpm
## rpm -Uvh /tmp/epel-release-6-8.noarch.rpm
## rm -f /tmp/epel-release-6-8.noarch.rpm

– VPS de 64 bits:

## wget -P /tmp http://mirror.itc.virginia.edu/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
## rpm -Uvh /tmp/epel-release-6-8.noarch.rpm
## rm -f /tmp/epel-release-6-8.noarch.rpm

verificar que todo esté actualizado

## yum update

Instalar Nginx a través de yum ejecutando:

## yum install nginx

Navegue al directorio de configuración de Nginx en /etc/nginx/ y edite nginx.conf con tu editor favorito:

## cd /etc/nginx/
## vim nginx.conf
user              nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

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

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  30;
    server_tokens off;

    gzip on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;

    # enabled sites
    include /etc/nginx/sites-enabled/*;

}

crear sites-enabled y sites-available dentro del /etc/nginx directorio:

## mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled

configure la directiva de host virtual Nginx predeterminada agregando lo siguiente en /etc/nginx/sites-available/default.conf

server {
    listen       80 default_server;
    server_name  _;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

habilite la directiva de host virtual de Nginx predeterminada creando un enlace simbólico a la configuración de host virtual predeterminada en /etc/nginx/sites-enabled/

## cd /etc/nginx/sites-enabled
## ln -s /etc/nginx/sites-available/default.conf

pruebe la configuración de Nginx, agréguela al inicio de su sistema y finalmente enciéndala:

## nginx -t
## /etc/init.d/nginx restart
## chkconfig nginx on
PASO 2) Instalar y configurar MySQL

instale el servidor de base de datos MySQL, inícielo y agréguelo al inicio de su sistema ejecutando los siguientes comandos:

## yum install mysql mysql-server
## service mysqld restart
## chkconfig mysqld on

a continuación, ejecute el siguiente comando para configurar MySQL

## mysql_secure_installation
Enter current password for root (enter for none):
Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

asegúrese de que su MySQL no esté expuesto para escuchar en la IP pública de su servidor agregando lo siguiente a /etc/my.cnf

## vim /etc/my.cnf

[mysqld]
bind-address = 127.0.0.1
...

reinicie el servidor de la base de datos para que los cambios surtan efecto:

## /etc/init.d/mysqld restart
PASO 3) Instalar y configurar PHP-FPM

instalar PHP-FPM y algunas extensiones útiles de PHP ejecutando el siguiente comando:

## yum install php-fpm php-mysql php-gd php-mcrypt

editar /etc/php.ini y cambie/elimine los comentarios de lo siguiente:

cgi.fix_pathinfo=0
date.timezone = America/New_York
memory_limit = 64M
expose_php = Off

luego, edite /etc/php-fpm.conf con tu editor favorito y descomenta lo siguiente:

emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10

con todo eso en su lugar, configure un grupo de PHP-FPM en /etc/php-fpm.d/www.conf :

## mv /etc/php-fpm.d/www.conf /root/
## vim /etc/php-fpm.d/www.conf
[wordpress]
;listen = 127.0.0.1:9001
listen = /var/run/php-wordpress.socket
user = nginx
group = nginx
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/blogcms.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 400
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_admin_value[error_log] = /var/log/php-fpm/wordpress-error.log
php_admin_flag[log_errors] = on

reinicie PHP-FPM y agréguelo al inicio de su sistema:

## /etc/init.d/php-fpm restart
## chkconfig php-fpm on

en este punto deberías tener Nginx , MySQL y PHP-FPM funcionando en su servidor. Continúe con la creación de una directiva vhost para su WordPress aplicación:

## vim /etc/nginx/sites-available/my-wordpress.tld.conf
server {
        listen 80;
        server_name my-wordpress.tld;
        rewrite ^(.*) http://www.my-wordpress.tld$1 permanent;
}

server {
        listen 80;
        server_name www.my-wordpress.tld;

        client_max_body_size 5m;
        client_body_timeout 60;

        access_log /var/log/nginx/my-wordpress.tld-access;
        error_log /var/log/nginx/my-wordpress.tld-error error;

        root /var/www/html/my-wordpress.tld/;
        index  index.html index.php;

        ### root directory ###
        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        ### security ###
        error_page 403 =404;
        location ~ /\. { access_log off; log_not_found off; deny all; }
        location ~ ~$ { access_log off; log_not_found off; deny all; }
        location ~* wp-admin/includes { deny all; }
        location ~* wp-includes/theme-compat/ { deny all; }
        location ~* wp-includes/js/tinymce/langs/.*\.php { deny all; }
        location /wp-includes/ { internal; }
        #location ~* wp-config.php { deny all; }
        location ~* ^/wp-content/uploads/.*.(html|htm|shtml|php)$ {
                types { }
                default_type text/plain;
        }

        #  location ~* wp-admin {
        #      allow <YOUR_IP>;
        #      allow 127.0.0.1;
        #      deny all;
        #  }

        ### disable logging ###
        location = /robots.txt { access_log off; log_not_found off; }
        location = /favicon.ico { access_log off; log_not_found off; }

        ### caches ###
        location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires max; }
        location ~* \.(woff|svg)$ { access_log off; log_not_found off; expires 30d; }
        location ~* \.(js)$ { access_log off; log_not_found off; expires 7d; }

        ### php block ###
        location ~ \.php?$ {
                try_files $uri =404;
                include fastcgi_params;
                #fastcgi_pass 127.0.0.1:9001;
                fastcgi_pass unix:/var/run/php-wordpress.socket;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_intercept_errors on;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                #Prevent version info leakage
                fastcgi_hide_header X-Powered-By;
        }
}

habilite la directiva de host virtual y reinicie nginx ejecutando los siguientes comandos:

## cd /etc/nginx/sites-enabled
## ln -s /etc/nginx/sites-available/my-wordpress.tld.conf
## nginx -t
## /etc/init.d/nginx restart

pruebe PHP-FPM creando PHP info.php script en la raíz del documento vhost en /var/www/html/my-wordpress.tld/ :

## mkdir -p /var/www/html/my-wordpress.tld/
## cd /var/www/html/my-wordpress.tld/
##  echo -e "<?php\n\tphpinfo();\n" > info.php

acceda a http://my-wordpress.tld/info.php para probar tu PHP-FPM

PASO 4) Configurar WordPress

El siguiente paso es instalar WordPress dentro de la raíz del documento vhost en /var/www/html/my-wordpress.tld/ . Antes de instalar WordPress, primero creemos una base de datos MySQL ejecutando:

## mysql -u root -p
mysql> create database wordpressDB;
mysql> grant all on wordpressDB.* to wpUser@localhost identified by 'YOUR_PASS';
mysql> quit
## cd /var/www/html/my-wordpress.tld/
## wget http://wordpress.org/latest.zip
## unzip latest.zip
## mv wordpress/* .
## rm -rf latest.zip wordpress/

a continuación, copie la configuración de muestra de WordPress y configure la información de su base de datos MySQL:

## cp wp-config-sample.php wp-config.php
## vim wp-config.php
define('DB_NAME', 'wordpressDB');
define('DB_USER', 'wpUser');
define('DB_PASSWORD', 'YOUR_PASS');
## chown nginx: -R /var/www/html/my-wordpress.tld/

abre http://my-wordpress.tld y completa tu instalación de WordPress

PASO 5) Configurar el almacenamiento en caché para obtener el mejor rendimiento

Instale PHP-APC (caché de PHP alternativo) ejecutando:

## yum install php-pecl-apc

una vez que APC esté instalado, agregue lo siguiente a /etc/php.d/apc.ini

## cat > /etc/php.d/apc.ini
extension = apc.so
apc.enabled=1
apc.shm_segments=1
apc.shm_size=128M
apc.num_files_hint=1024
apc.user_entries_hint=4096
apc.ttl=7200
apc.use_request_time=1
apc.user_ttl=7200
apc.gc_ttl=3600
apc.cache_by_default=1
apc.filters
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.file_update_protection=2
apc.enable_cli=0
apc.max_file_size=1M
apc.stat=1
apc.stat_ctime=0
apc.canonicalize=0
apc.write_lock=1
apc.report_autofilter=0
apc.rfc1867=0
apc.rfc1867_prefix =upload_
apc.rfc1867_name=APC_UPLOAD_PROGRESS
apc.rfc1867_freq=0
apc.rfc1867_ttl=3600
apc.include_once_override=0
apc.lazy_classes=0
apc.lazy_functions=0
apc.coredump_unmap=0
apc.file_md5=0
apc.preload_path

y reinicie PHP-FPM para que los cambios surtan efecto.

## /etc/init.d/php-fpm restart

comprobar si APC se carga ejecutando:

## php -m | grep -w apc

o abriendo el info.php script en la raíz de su documento.

Lo siguiente que debe hacer es iniciar sesión en su administración de WordPress e instalar el complemento W3 Total Cache . Para que W3 Total Cache Plugin funcione, primero debe habilitar Pretty URLs en

Settings->Permalinks->Custom Structure :

http://my-wordpress.tld/%postname%/

y luego proceda con la instalación de W3 Total Cache . Una vez instalado, vaya a

Performance->General Settings

y habilitar/deshabilitar las siguientes opciones:

Page cache: enabled
Page cache method: Disk: Enhaced

Minify: disabled

Database Cache: enabled
Database Cache Method: Opcode: Alternative PHP Cache (APC)

Object Cache: enbabled
Object Cache Method: Opcode: Alternative PHP Cache (APC)

Browser Cache: disabled

CDN: this is up to you.

Haz clic en Save all settings para enviar los cambios.

Agregue lo siguiente en /var/www/html/my-wordpress.tld/nginx.conf

## cat > /var/www/html/my-wordpress.tld/nginx.conf
# BEGIN W3TC Page Cache cache
location ~ /wp-content/cache/page_enhanced.*html$ {
    add_header Vary Cookie;
}
# END W3TC Page Cache cache
# BEGIN W3TC Page Cache core
set $w3tc_rewrite 1;
if ($request_method = POST) {
    set $w3tc_rewrite 0;
}
if ($query_string != "") {
    set $w3tc_rewrite 0;
}
if ($request_uri !~ \/$) {
    set $w3tc_rewrite 0;
}
if ($http_cookie ~* "(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle)") {
    set $w3tc_rewrite 0;
}
if (!-f "$document_root/wp-content/cache/page_enhanced/$http_host/$request_uri/_index.html") {
  set $w3tc_rewrite 0;
}
if ($w3tc_rewrite = 1) {
    rewrite .* "/wp-content/cache/page_enhanced/$http_host/$request_uri/_index.html" last;
}
# END W3TC Page Cache core

asegúrese de que la propiedad de la raíz del documento esté bien:

## chown nginx: -R /var/www/html/my-wordpress.tld/

El siguiente paso es decirle a Nginx que use este archivo de configuración. Edite /etc/nginx/sites-enabled/my-wordpress.tld.conf y agregue/elimine el comentario de lo siguiente:

include /var/www/html/my-wordpress.tld/nginx.conf;
...
location ~* wp-config.php { deny all; }

pruebe el archivo de configuración de Nginx y reinícielo para que los cambios surtan efecto ejecutando:

## nginx -t
## /etc/init.d/nginx restart

También puede editar su archivo de configuración de WordPress /var/www/html/my-wordpress.tld/wp-config.php y defina lo siguiente para que WordPress no tenga que consultar la base de datos para la URL del sitio:

define('WP_HOME', 'http://my-wordpress.tld');
define('WP_SITEURL', 'http://my-wordpress.tld');

Por supuesto, si usted es uno de nuestros clientes de Linux VPS Hosting, no tiene que hacer nada de esto, simplemente pregúntele a nuestros administradores, siéntese y relájese. Nuestros administradores configurarán esto para usted de inmediato.

PD. Si te gustó esta publicación, compártela con tus amigos en las redes sociales usando los botones de la izquierda o simplemente deja una respuesta a continuación. Gracias.


Cent OS
  1. Ejecute Joomla con Nginx en un Centos VPS

  2. Cómo instalar Varnish y phpMyAdmin en un VPS CentOS 7 con Nginx, MariaDB y PHP-FPM

  3. Instale FluxBB en un CentOS 7 VPS con Nginx y PHP-FPM

  4. Instale eZ Publish Community Project en un CentOS 7 VPS con Nginx y PHP-FPM

  5. Cómo instalar WordPress con LEMP Stack en CentOS 8

Instale Mattermost con PostgreSQL y Nginx en CentOS 7

Cómo instalar Redmine 3 con Nginx en CentOS 7

Cómo instalar Nginx con PHP y MySQL (LEMP Stack) en Ubuntu 18.04

Cómo instalar Nginx con PHP y MySQL (LEMP Stack) en Ubuntu 20.04 LTS

Cómo instalar Nginx con PHP y MySQL (LEMP Stack) en CentOS 7.6

Instalación de Nginx con soporte PHP5 (y PHP-FPM) y MySQL en CentOS 6.4