Configurar nginx para WordPress Multisite

Dar con la configuración perfecta de nginx (y que funcione) para un WordPress Multisite es complicado y siempre aparecen casos extremos que son difíciles de resolver. En mi caso, después de varias horas investigando y haciendo muchas pruebas, he llegado a una configuración perfecta de nginx para WordPress Multisite.

Uno de los problemas que tiene nginx es que a la hora de añadir configuraciones siempre dependes de las que estén ya presentes en el fichero. Y es por ello que empezaremos con la configuración básica de nginx para WordPress para evitar tener errores.

Configuración base para WordPress

Una configuración básica de nginx para una instalación de WordPress sería la siguiente:

server {

	# Rutas
	root /var/www/;
	index index.php;
	server_name www.example.com;
	access_log /home/user/logs/access.log;
	error_log /home/user/logs/error.log error;
	
 	# Configuración específica para WordPress (permalinks)
	location / {
		try_files $uri $uri/ /index.php?q=$uri&$args;
	}

 	# Error 404 gestionado por nginx
	error_page 404 /404.html;
 
 	# Errores 5XX gestionados por nginx
	error_page 500 502 503 504 /50x.html;
	location = /50x.html {
		root /usr/share/nginx/html;
	}
 
 	# Configuración específica de php para la versión 7.2
	location ~ \.php$ {
		try_files $uri =404;
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		fastcgi_pass unix:/run/php/php7.2-fpm.sock;
		fastcgi_index index.php;
		include fastcgi_params;
	} 

}

Como veréis, simplemente hay que añadir la línea de try_files para que funcionen los enlaces permanentes. Recordemos que si el servidor web fuera Apache, tendríamos que añadir las famosas reglas en el .htaccess para que funcionen.

Configuración para WordPress Multisite

Aquí es cuando la cosa se complica. Si dejamos la configuración de más arriba y transformamos nuestro WordPress en Multisite, veremos que a la hora de crear nuevo sitios no podremos acceder a ellos y tampoco podremos acceder al panel de administración. Y seguramente fallarán las llamadas a los ficheros estáticos, como los CSS, JS o las imágenes de uploads. Esto es porque hay que añadir unas reglas específicas de nginx para WordPress Multisite. Esto va a depender si el Multisite está instalado en la raíz del servidor (por ejemplo, en example.com) o en una carpeta (example.com/landings).

WordPress Multisite en la raíz de un dominio

En el caso que tengamos la instalación en la raíz, como por ejemplo example.com, hay que incluir la siguiente configuración dentro del bloque server de la configuración de más arriba:

if ( $uri ~ "files" ) {
	rewrite ^/(?:.*/)?files/(.+) /wp-includes/ms-files.php?file=$1;
}

if (!-e $request_filename) {
	rewrite  ^/[_0-9a-zA-Z-]+(/wp-(content|admin|includes).*) $1 break;
	rewrite  ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 break;
}

Con esta configuración, que al final son unas redirecciones para ficheros php y los ficheros estáticos, tendremos la instalación funcionando sin problemas. Notad que no hay que añadir ninguna regla para que funcionen los enlaces permanentes ya que ya están añadidas en la configuración base.

WordPress Multisite en subcarpeta

Otro de los casos que nos podemos encontrar es que la instalación este alojada en una subcarpeta dentro del servidor, como example.com/landings. En este caso, tendríamos en la carpeta «landings» una instalación de WordPress Multisite para ir creando landings tipo: example.com/landings/promo, example.com/landing/offer, etc.

Las reglas de nginx a añadir en el bloque base serían las siguientes:

if ( $uri ~ "files" ) {
	rewrite ^/landings/(?:.*/)?files/(.+) /landings/wp-includes/ms-files.php?file=$1;
}

if (!-e $request_filename) {
	rewrite  ^/landings/[_0-9a-zA-Z-]+(/wp-(content|admin|includes).*) /landings$1 break;
	rewrite  ^/landings/[_0-9a-zA-Z-]+(/.*\.php)$ /landings$1 break;
}
location /landings {
	try_files $uri $uri/ /landings/index.php$is_args$args;
}

En este caso, las dos primeras reglas son muy parecidas a las de Multisite en la raíz de dominio pero añadiendo la subcarpeta en la que está instalado. A parte, añadiremos la última regla para que los enlaces permanentes funcionen sin problemas.

Recomendamos esta web de artículos para tortugas.

Configurar nginx para WordPress Multisite
5 (100%) 4 vote[s]

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.