Volver al inicio

mod_rewrite para Nginx: .htaccess en CMS

El módulo nginx-mod-rewrite emula .htaccess de Apache en Nginx para CMS. Soporta reglas mod_rewrite, fallback a index.php y caching. Los benchmarks muestran rendimiento cercano al de Nginx nativo. Ejemplos de compilación y configuración para RHEL/Debian.

Nginx + .htaccess: módulo mod_rewrite para CMS
Advertisement 728x90

Módulo Nginx mod_rewrite: Soporte de .htaccess para CMS

Nginx no soporta .htaccess de Apache, lo que genera desafíos al migrar sitios web a plataformas CMS populares como WordPress, Drupal o Grav. Estos sistemas dependen de mod_rewrite para URLs amigables para SEO, protección de directorios y manejo de errores. Sin .htaccess, los CMS devuelven errores 404 o requieren configuraciones Nginx + Apache, añadiendo sobrecarga.

Se ha desarrollado un módulo llamado nginx-mod-rewrite para emular mod_rewrite. Analiza .htaccess al vuelo, aplicando reglas de reescritura, incluyendo redirecciones internas y fallback a index.php. El módulo opera a nivel de servidor, ubicación y .htaccess, minimizando lecturas de archivos mediante caché en el pool de solicitudes.

Enfoques de solución en paneles de control

Paneles de control como HestiaCP abordan el problema de dos formas:

Google AdInline article slot
  • try_files $uri $uri/ index.php?$args — cubre 50–80% de los casos pero no todas las reglas de mod_rewrite.
  • Plantillas ngx_http_rewrite_module — un equivalente completo de .htaccess para CMS específicos, pero vinculan estrechamente la configuración a la plataforma.

El módulo nginx-mod-rewrite elimina estas limitaciones: soporta RewriteMap (mínimamente), RewriteOptions, no requiere plantillas y permite editar .htaccess sin privilegios de administrador del servidor.

Construcción e instalación del módulo

La construcción es posible en el host o en Docker. Para Almalinux 9:

  • Instala Docker.
  • Clona el repositorio.
  • Ejecuta bash package_preparer.sh prepare "almalinux:9".

El resultado son paquetes RPM en tmpbuild/:

Google AdInline article slot
tmpbuild/nginx-mod-rewrite-0.1-1.el9.src.rpm
tmpbuild/nginx-mod-rewrite-0.1-1.el9.x86_64.rpm
tmpbuild/nginx-mod-rewrite-debuginfo-0.1-1.el9.x86_64.rpm
tmpbuild/nginx-mod-rewrite-debugsource-0.1-1.el9.x86_64.rpm

Similar para Debian — paquetes DEB.

Configuración del servidor

Ejemplo de bloque de servidor para un sitio CMS:

server {
	listen      127.0.0.1:80;
	server_name test.my.brp www.test.my.brp;
	root        /home/test/web/test.my.brp/public_html;
	index       index.php index.html index.htm;

	HtaccessEnable on;

	location ~ /\.(?!well-known\/) {
		deny all;
		return 404;
	}

	location ~* ^.+\.(jpeg|jpg|png|webp|gif|bmp|ico|svg|css|js|txt)$ {
		expires max;
		fastcgi_hide_header "Set-Cookie";
	}

	location / {
		RewriteEngine On;

		location ~ [^/]\.php(/|$) {
			try_files $uri =404;

			include /etc/nginx/fastcgi_params;

			fastcgi_index index.php;
			fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

			fastcgi_pass unix:/run/php74-fpm.sock;
		}
	}
}

HtaccessEnable on activa el análisis de .htaccess. Los archivos estáticos se excluyen del procesamiento de reescritura para rendimiento.

Google AdInline article slot

Pruebas de rendimiento

Pruebas en Drupal (wrk, 30 segundos):

| Escenario | Nginx + php-fpm | Nginx + mod_rewrite | Nginx + Apache + php-fpm |

|---------------------------|-----------------|--------------------|---------------------------|

| / (fallback index.php) | 129.74 req/s | 125.94 req/s | 121.31 req/s |

| /robots.txt (estático) | 7384.25 req/s | 4591.31 req/s | 2007.70 req/s |

| /user/login (reescritura) | 126.48 req/s | 128.58 req/s | 117.78 req/s |

El módulo es cercano en velocidad a Nginx puro y supera la combinación con Apache. El contenido estático se ralentiza debido al análisis de .htaccess pero se optimiza con exclusiones de ubicación.

Puntos clave

  • El módulo emula completamente mod_rewrite, incluyendo redirecciones internas y caché de .htaccess.
  • Soporte CMS sin plantillas: WordPress, Drupal, Grav funcionan con .htaccess nativo.
  • Rendimiento: 90–100% de Nginx puro, sin sobrecarga de Apache.
  • Se construye en RPM/DEB para RHEL/Debian, con soporte Docker.
  • Limitaciones: RewriteMap mínimo, RewriteOptions simplificado (suficiente para CMS).

— Editorial Team

Advertisement 728x90

Leer después