Como configurar un servidor con nginx, naxsi, pagespeed, wordpress, php7 y mysql

En este articulo voy a mostrarte como configurar el mejor servidor web para tu VPS, con estos pasos tendrás un servidor rápido y seguro. Vamos instalar y configurar nginx, pagespeed, naxsi, mysql y wordpress sobre ubuntu. En en este articulo voy a enseñarte a realizar la misma configuración que uso para correr mis sitios web en mi VPS.

Por si no sabes que es cada una de estas opciones, voy a contarte un poco para que sirven:

  • nginx: es un servidor web, como apache, pero es mucho más eficiente, actualmente corro un blog con más de 4,000 visitas diarias, en un servidor con 512MB en ram, por solo 5$ al mes con digital ocean.
  • pagespeed: Es una herramienta de google que reduce el tiempo que tarda una página en cargar (en mostrarse en tu computadora), en general esto hace a los usuarios más felices y también te ayuda a salir mejor posicionado en las búsquedas de google, ya que ellos premian a las paginas que cargan rápido.
  • naxsi: Es un firewall web, y te protege de algunas vulnerabilidades que pueda tener wordpress, algún plugin o cualquier aplicación web en tu servidor. (Mantiene a los hacker/craker fuera de tu servidor)
  • MySQL o MariaDB: Es un servidor de bases de datos, gratis y muy bueno.
  • WordPress: El mejor gestor de contenido, especialmente para blogs.

Ahora manos a la obra, lo primero que necesitamos es un servidor ubuntu instalado, en este tutorial voy a utilizar ubuntu 17.04

NOTA: Para ejecutar los comandos vas a necesitar acceso a la consola del servidor, para ello puedes utilizar el programa Putty si estas usando Windows. Puedes copiar cada bloque de comandos y ejecutarlos en un solo paso, copiando y pegando en la consola.

Instalando nginx, pagespeed y naxsi desde su código fuente.

Vamos a instalar nginx junto a pagespeed y naxsi desde sus fuentes, esto hará que trabajen más rápido.

Nota: Vamos a necesitar acceso root, para no tener que digitar sudo antes de cada comando, digitamos
su -i y luego nuestra clave (en caso de no estar logeados como root).

Primero debemos de instalar algunas librerías que nos permitirán compilar los códigos fuente de los programas.

apt-get install -y libpcre3 libpcre3-dev libssl-dev build-essential unzip

Ahora vamos a ir a la carpeta /tmp y descargar el código fuente de nginx, naxsi y pagespeed.

cd /tmp

wget http://nginx.org/download/nginx-1.9.9.tar.gz
wget https://codeload.github.com/nbs-system/naxsi/tar.gz/0.55.3
wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.2-beta.zip

Ahora vamos a descomprimir los archivos de codigo fuente

tar xvzf nginx-1.9.9.tar.gz
tar xvzf 0.55.3
unzip v1.12.34.2-beta.zip

Luego preparamos Google pagespeed para ser compilado

NPS_VERSION=1.12.34.2
cd ngx_pagespeed-${NPS_VERSION}-beta/
psol_url=https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz
[ -e scripts/format_binary_url.sh ] && psol_url=$(scripts/format_binary_url.sh PSOL_BINARY_URL)
wget ${psol_url}
tar -xzvf $(basename ${psol_url}) # extracts to psol/

El siguiente paso es configurar nginx para ser compilado

cd ..
cd nginx-1.9.9/
./configure --conf-path=/etc/nginx/nginx.conf --add-module=../naxsi-0.55.3/naxsi_src/ \
 --add-module=../ngx_pagespeed-1.12.34.2-beta \
 --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body \
 --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log \
 --http-proxy-temp-path=/var/lib/nginx/proxy --lock-path=/var/lock/nginx.lock \
 --pid-path=/var/run/nginx.pid --with-http_ssl_module \
 --without-mail_pop3_module --without-mail_smtp_module \
 --without-mail_imap_module --without-http_uwsgi_module \
 --without-http_scgi_module --with-ipv6 --prefix=/usr

Si no hay algún error, ahora vamos a generar el programa e instalarlo.

make
make install

Ahora para comprobar si la instalación funcionó, ejecutamos este comando

nginx -v

Y la salida del comando deberá ser algo como esta:

Verificar si nginx esta instalado

Instalar MySQL o MariaDB

Ahora que tenemos nuestro servidor con nginx (servidor web), lo siguiente es instalar un servidor de base de datos. La opción más común es MySQL (o MariaDB)

apt-get install -y mysql-server

Al ejecutar el comando anterior, se va a descargar e instalar mysql y en un momento nos pedirá ingresar una clave, luego presionamos la tecla Tab (para movernos al botón Ok) y presionamos la tecla Enter

Ingresar una clave al instalar mysql

Luego nos pedirá confirmar la clave anterior, entonces la ingresamos y presionamos nuevamente la tecla Tab y tecla Enter.

Repetir la clave al instalar mysql

Ahora vamos a ejecutar un asistente para configurar ciertas opciones relacionadas con la seguridad, cuando nos pida un password debemos ingresar el que colocamos en el paso anterior. Debemos leer las instrucciones que se presenten y aceptar o no las sugerencias.

mysql_secure_installation

Crear bases de datos y otorgar accesos

Primero debemos iniciar sesión en el servidor de base de datos, esto lo hacemos con este comando

mysql -u root -p

y luego digitamos la clave de root (que colocamos en unos pasos anteriores)

Ahora vamos a crear una base de datos con este comando:

CREATE DATABASE mi_base;

Donde mi_base, es el nombre de la base de datos que vamos a crear. Ahora vamos a crear un usuario y a darle acceso a la base de datos.

CREATE USER [email protected];
SET PASSWORD FOR [email protected]= PASSWORD("Clave");
GRANT ALL PRIVILEGES ON mi_base.* TO [email protected] IDENTIFIED BY 'Clave';
FLUSH PRIVILEGES;

En el código anterior se debe cambiar todas las coincidencias de la palabra usuario, por el nombre de usuario que va a crearse, también la palabra Clave por la clave o password que va a usarse, mi_base es el nombre de la base de datos a la que va a darse acceso.

Ahora hemos creado la base de datos, un usuario y le hemos dado acceso a la base de datos, ahora esta todo listo con nuestra base de datos, para cerrar esta sesión y regresar a la consola de ubuntu digitamos este comando:

exit;

Configurar nignx para ejecutar código PHP

Ya tenemos instalado nginx y puede procesar paginas con código de HTML, pero lo más usual es ejecutar código dinámico como PHP, para instalar PHP vamos a correr estos comandos:

apt-get install -y php-fpm php-mysql php-curl php-gd php-mbstring php-mcrypt php-xml php-xmlrpc

NOTA: Ahora vamos a configurar los programas, esto se hace editando archivos de texto en el servidor, en linux el editor de texto predeterminado es VI, si nunca has usado este programa, puedes leer una guía haciendo clic aquí.

Ahora vamos a configurar nginx, creando un archivo con este comando.

vi /etc/nginx/nginx.conf

El contenido del archivo debe ser el siguiente:

Nota: Si una archivo ya tiene información, podemos borrar todo con este comando de vi :1,$d

user  www-data;
worker_processes  1;

events {
   worker_connections  1024;
}

http {
	include /etc/nginx/rules/naxsi_core.rules;
	include /etc/nginx/mime.types;

	fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=mycache:100m inactive=60m;
	fastcgi_cache_key "$scheme$request_method$host$request_uri";

	gzip on;
	gzip_min_length 1000;
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

	server_tokens off;
	include /etc/nginx/sites-enabled/*;
}

También debemos de copiar este archivo:

mkdir /etc/nginx/rules
vi /etc/nginx/rules/naxsi_core.rules

Con este contenido:

##################################
## INTERNAL RULES IDS:1-999     ##
##################################
#@MainRule "msg:weird request, unable to parse" id:1;
#@MainRule "msg:request too big, stored on disk and not parsed" id:2;
#@MainRule "msg:invalid hex encoding, null bytes" id:10;
#@MainRule "msg:unknown content-type" id:11;
#@MainRule "msg:invalid formatted url" id:12;
#@MainRule "msg:invalid POST format" id:13;
#@MainRule "msg:invalid POST boundary" id:14;
#@MainRule "msg:invalid JSON" id:15;
#@MainRule "msg:empty POST" id:16;
#@MainRule "msg:libinjection_sql" id:17;
#@MainRule "msg:libinjection_xss" id:18;

##################################
## SQL Injections IDs:1000-1099 ##
##################################
MainRule "rx:select|union|update|delete|insert|table|from|ascii|hex|unhex|drop" "msg:sql keywords" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:4" id:1000;
MainRule "str:\"" "msg:double quote" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8,$XSS:8" id:1001;
MainRule "str:0x" "msg:0x, possible hex encoding" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:2" id:1002;
## Hardcore rules
MainRule "str:/*" "msg:mysql comment (/*)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8" id:1003;
MainRule "str:*/" "msg:mysql comment (*/)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8" id:1004;
MainRule "str:|" "msg:mysql keyword (|)"  "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8" id:1005;
MainRule "str:&&" "msg:mysql keyword (&&)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8" id:1006;
## end of hardcore rules
MainRule "str:--" "msg:mysql comment (--)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:4" id:1007;
MainRule "str:;" "msg:semicolon" "mz:BODY|URL|ARGS" "s:$SQL:4,$XSS:8" id:1008;
MainRule "str:=" "msg:equal sign in var, probable sql/xss" "mz:ARGS|BODY" "s:$SQL:2" id:1009;
MainRule "str:(" "msg:open parenthesis, probable sql/xss" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$SQL:4,$XSS:8" id:1010;
MainRule "str:)" "msg:close parenthesis, probable sql/xss" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$SQL:4,$XSS:8" id:1011;
MainRule "str:'" "msg:simple quote" "mz:ARGS|BODY|URL|$HEADERS_VAR:Cookie" "s:$SQL:4,$XSS:8" id:1013;
MainRule "str:," "msg:comma" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:4" id:1015;
MainRule "str:#" "msg:mysql comment (#)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:4" id:1016;
MainRule "str:@@" "msg:double arobase (@@)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:4" id:1017;

###############################
## OBVIOUS RFI IDs:1100-1199 ##
###############################
MainRule "str:http://" "msg:http:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1100;
MainRule "str:https://" "msg:https:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1101;
MainRule "str:ftp://" "msg:ftp:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1102;
MainRule "str:php://" "msg:php:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1103;
MainRule "str:sftp://" "msg:sftp:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1104;
MainRule "str:zlib://" "msg:zlib:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1105;
MainRule "str:data://" "msg:data:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1106;
MainRule "str:glob://" "msg:glob:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1107;
MainRule "str:phar://" "msg:phar:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1108;
MainRule "str:file://" "msg:file:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1109;
MainRule "str:gopher://" "msg:gopher:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$RFI:8" id:1110;

#######################################
## Directory traversal IDs:1200-1299 ##
#######################################
MainRule "str:.." "msg:double dot" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$TRAVERSAL:4" id:1200;
MainRule "str:/etc/passwd" "msg:obvious probe" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$TRAVERSAL:4" id:1202;
MainRule "str:c:\\" "msg:obvious windows path" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$TRAVERSAL:4" id:1203;
MainRule "str:cmd.exe" "msg:obvious probe" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$TRAVERSAL:4" id:1204;
MainRule "str:\\" "msg:backslash" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$TRAVERSAL:4" id:1205;
#MainRule "str:/" "msg:slash in args" "mz:ARGS|BODY|$HEADERS_VAR:Cookie" "s:$TRAVERSAL:2" id:1206;

########################################
## Cross Site Scripting IDs:1300-1399 ##
########################################
MainRule "str:<" "msg:html open tag" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$XSS:8" id:1302;
MainRule "str:>" "msg:html close tag" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$XSS:8" id:1303;
MainRule "str:[" "msg:open square backet ([), possible js" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$XSS:4" id:1310;
MainRule "str:]" "msg:close square bracket (]), possible js" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$XSS:4" id:1311;
MainRule "str:~" "msg:tilde (~) character" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$XSS:4" id:1312;
MainRule "str:`"  "msg:grave accent (`)" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$XSS:8" id:1314;
MainRule "rx:%[2|3]."  "msg:double encoding" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$XSS:8" id:1315;

####################################
## Evading tricks IDs: 1400-1500 ##
####################################
MainRule "str:&#" "msg:utf7/8 encoding" "mz:ARGS|BODY|URL|$HEADERS_VAR:Cookie" "s:$EVADE:4" id:1400;
MainRule "str:%U" "msg:M$ encoding" "mz:ARGS|BODY|URL|$HEADERS_VAR:Cookie" "s:$EVADE:4" id:1401;

#############################
## File uploads: 1500-1600 ##
#############################
MainRule "rx:\.ph|\.asp|\.ht" "msg:asp/php file upload" "mz:FILE_EXT" "s:$UPLOAD:8" id:1500;

Ahora este archivo

vi /etc/nginx/rules/naxsi.rules

Con este contenido:

# Sample rules file for default vhost.
#LearningMode;
SecRulesEnabled;
#SecRulesDisabled;
DeniedUrl "/50x.html";

## check rules
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;

y también este otro archivo

vi /etc/nginx/mime.types

Con este contenido:

types {
    text/html                             html htm shtml;
    text/css                              css;
    text/xml                              xml;
    image/gif                             gif;
    image/jpeg                            jpeg jpg;
    application/javascript                js;
    application/atom+xml                  atom;
    application/rss+xml                   rss;

    text/mathml                           mml;
    text/plain                            txt;
    text/vnd.sun.j2me.app-descriptor      jad;
    text/vnd.wap.wml                      wml;
    text/x-component                      htc;

    image/png                             png;
    image/tiff                            tif tiff;
    image/vnd.wap.wbmp                    wbmp;
    image/x-icon                          ico;
    image/x-jng                           jng;
    image/x-ms-bmp                        bmp;
    image/svg+xml                         svg svgz;
    image/webp                            webp;

    application/font-woff                 woff;
    application/java-archive              jar war ear;
    application/json                      json;
    application/mac-binhex40              hqx;
    application/msword                    doc;
    application/pdf                       pdf;
    application/postscript                ps eps ai;
    application/rtf                       rtf;
    application/vnd.apple.mpegurl         m3u8;
    application/vnd.ms-excel              xls;
    application/vnd.ms-fontobject         eot;
    application/vnd.ms-powerpoint         ppt;
    application/vnd.wap.wmlc              wmlc;
    application/vnd.google-earth.kml+xml  kml;
    application/vnd.google-earth.kmz      kmz;
    application/x-7z-compressed           7z;
    application/x-cocoa                   cco;
    application/x-java-archive-diff       jardiff;
    application/x-java-jnlp-file          jnlp;
    application/x-makeself                run;
    application/x-perl                    pl pm;
    application/x-pilot                   prc pdb;
    application/x-rar-compressed          rar;
    application/x-redhat-package-manager  rpm;
    application/x-sea                     sea;
    application/x-shockwave-flash         swf;
    application/x-stuffit                 sit;
    application/x-tcl                     tcl tk;
    application/x-x509-ca-cert            der pem crt;
    application/x-xpinstall               xpi;
    application/xhtml+xml                 xhtml;
    application/xspf+xml                  xspf;
    application/zip                       zip;

    application/octet-stream              bin exe dll;
    application/octet-stream              deb;
    application/octet-stream              dmg;
    application/octet-stream              iso img;
    application/octet-stream              msi msp msm;

    application/vnd.openxmlformats-officedocument.wordprocessingml.document    docx;
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet          xlsx;
    application/vnd.openxmlformats-officedocument.presentationml.presentation  pptx;

    audio/midi                            mid midi kar;
    audio/mpeg                            mp3;
    audio/ogg                             ogg;
    audio/x-m4a                           m4a;
    audio/x-realaudio                     ra;

    video/3gpp                            3gpp 3gp;
    video/mp2t                            ts;
    video/mp4                             mp4;
    video/mpeg                            mpeg mpg;
    video/quicktime                       mov;
    video/webm                            webm;
    video/x-flv                           flv;
    video/x-m4v                           m4v;
    video/x-mng                           mng;
    video/x-ms-asf                        asx asf;
    video/x-ms-wmv                        wmv;
    video/x-msvideo                       avi;
}

Ahora vamos a configurar el host virtual para nginx, para ello creamos este archivo

mkdir /etc/nginx/sites-enabled
vi /etc/nginx/sites-enabled/default.conf

Con este contenido, teniendo cuidado de cambiar la linea 192.168.56.132 por la ip de tu servidor o el nombre de dominio.

server {
    listen 80;
    server_name 192.168.56.132;
    root /var/www/html;
    index  index.html index.php;

    client_max_body_size 5m;
    client_body_timeout 60;
	
    ###################### 
    # Configurar pagespeed
    ######################
    pagespeed On;
    pagespeed FileCachePath "/var/cache/ngx_pagespeed/";
	pagespeed EnableFilters rewrite_css;
	pagespeed EnableFilters fallback_rewrite_css_urls;
	pagespeed EnableFilters combine_css;

	location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
	  add_header "" "";
	}
	location ~ "^/ngx_pagespeed_static/" { }
	location ~ "^/ngx_pagespeed_beacon$" { }
	location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
	location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
	location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }

	###################### 
    # Cache
	######################
    set $no_cache 0;
    if ($request_method = POST) {
        set $no_cache 1;
    }
    if ($query_string != "") {
        set $no_cache 1;
    }
    if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
        set $no_cache 1;
    }
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
        set $no_cache 1;
    }

	##################################### 
    # Configurar Naxsi y pagina index
	#####################################
    location /
    {
		include /etc/nginx/rules/naxsi.rules;
		add_header X-Frame-Options "SAMEORIGIN" always;
		add_header X-Content-Type-Options "nosniff" always;
		try_files $uri $uri/ /index.php?$args;
    }


	location ~ \.php?$ {
		try_files $uri =404;
		include fastcgi_params;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_intercept_errors on;
		fastcgi_split_path_info ^(.+\.php)(.*)$;
		fastcgi_hide_header X-Powered-By;
		fastcgi_pass unix:/run/php/php7.0-fpm.sock;
		fastcgi_ignore_client_abort off;
		fastcgi_connect_timeout 60;
		fastcgi_send_timeout 90;
		fastcgi_read_timeout 90;
		fastcgi_buffer_size 128k;
		fastcgi_buffers 4 256k;
		fastcgi_busy_buffers_size 256k;
		fastcgi_temp_file_write_size 256k;
		fastcgi_cache_bypass $no_cache;
		fastcgi_no_cache $no_cache;
		fastcgi_cache   mycache;
		fastcgi_cache_valid   200 302  1h;
		fastcgi_cache_valid   301 1h;
		fastcgi_cache_valid   any 1h;
		fastcgi_cache_min_uses  2;
		add_header X-Fastcgi-Cache $upstream_cache_status;

    }
	
	#################################################
	#Opciones de seguridad y otros cache
	#################################################

	# No ejecutar php en carpeta upload
	location ~* /(?:uploads|files)/.*.php$ {
			deny all;
	}

	# Impedir acceso a scripts
	location ~* .(pl|cgi|py|sh|lua)$ {
	return 444;
	}

	# Ocultar acceso a comentarios y otros archivos de wp
	location ~ /(wp-config.php|wp-comments-post.php|readme.html|license.txt) {
		deny all;
	}

	location ~* \.(ico|pdf|flv)$
	{
		expires 1y;
	}

	location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$
	{
		expires 30d;
	}

}

Vamos a crear unos directorios para nginx

mkdir /var/lib/nginx
mkdir -p /var/www/html

Ahora si todo esta bien vamos a iniciar nginx o reiniciarlo con uno de estos comandos, si no lo hemos iniciado aun, lo hacemos con este comando

nginx

o si ya ha sido iniciado, debemos reiniciarlo

nginx -s reload

Instalar WordPress

Muy bien, ahora vamos a instalar wordpress en nuestro servidor, primero vamos a descargar el instalador en la carpeta que hemos preparado.

cd /var/www/html
wget https://wordpress.org/latest.tar.gz
tar --strip-components=1 -zxvf latest.tar.gz
rm latest.tar.gz
chown -R www-data:www-data /var/www/*

Ahora en un navegador colocamos la dirección ip o el dominio de nuestro servidor y seguimos los pasos del asistente para instalar wordpress

Instalar wordpress en un vps

Cuando termines de seguir los pasos de el asistente de instalación de wordpress ya habrás terminado de configurar tu servidor, ahora lo que sigue es crear algo de contenido en wordpress!.



Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *