Zpět na domů

mod_rewrite pro Nginx: .htaccess v CMS

Modul nginx-mod-rewrite emuluje .htaccess Apache v Nginx pro CMS. Podporuje pravidla mod_rewrite, fallback do index.php a cachování. Benchmarky ukazují výkon blízký nativnímu Nginx. Příklady sestavení a konfigurace pro RHEL/Debian.

Nginx + .htaccess: modul mod_rewrite pro CMS
Advertisement 728x90

Modul mod_rewrite pro Nginx: podpora .htaccess v CMS

Nginx nepodporuje .htaccess z Apache, což způsobuje potíže při migraci webů na populární CMS jako WordPress, Drupal nebo Grav. Tyto systémy spoléhají na mod_rewrite pro SEO-URL, ochranu adresářů a zpracování chyb. Bez .htaccess CMS buď vrací 404, nebo vyžadují Nginx + Apache, což přidává režii.

Byl vyvinut modul nginx-mod-rewrite, který emuluje mod_rewrite. Parsuje .htaccess za běhu, aplikuje pravidla rewrite, včetně interních přesměrování a fallbacku na index.php. Modul funguje na úrovních server, location a .htaccess, minimalizuje čtení souboru díky ukládání do mezipaměti v rámci požadavku.

Přístupy k řešení v ovládacích panelech

Ovládací panely jako HestiaCP řeší problém dvěma způsoby:

Google AdInline article slot
  • try_files $uri $uri/ index.php?$args — pokrývá 50–80 % případů, ale ne všechna pravidla mod_rewrite.
  • Šablony ngx_http_rewrite_module — plný ekvivalent .htaccess pro konkrétní CMS, ale pevně vážou konfiguraci k platformě.

Modul nginx-mod-rewrite odstraňuje omezení: podporuje RewriteMap (minimálně), RewriteOptions, nevyžaduje šablony a umožňuje upravovat .htaccess bez administrátorských práv na serveru.

Sestavení a instalace modulu

Sestavení je možné na hostiteli nebo v Dockeru. Pro Almalinux 9:

  • Nainstalujte Docker.
  • Naklonujte repozitář.
  • Spusťte bash package_preparer.sh prepare "almalinux:9".

Výsledkem jsou RPM balíčky v 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

Podobně pro Debian — DEB balíčky.

Konfigurace serveru

Příklad server-bloku pro web s 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 aktivuje parsování .htaccess. Statické soubory jsou vyloučeny z rewrite zpracování pro výkon.

Google AdInline article slot

Benchmarky výkonu

Testy na Drupal (wrk, 30 sekund):

| Scénář | Nginx + php-fpm | Nginx + mod_rewrite | Nginx + Apache + php-fpm |

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

| / (fallback index.php) | 129,74 pož/s | 125,94 pož/s | 121,31 pož/s |

| /robots.txt (statický) | 7384,25 pož/s | 4591,31 pož/s | 2007,70 pož/s |

| /user/login (rewrite) | 126,48 pož/s | 128,58 pož/s | 117,78 pož/s |

Modul je blízký čistému Nginxu v rychlosti, překonává kombinaci s Apache. Statika se zpomaluje kvůli parsování .htaccess, ale optimalizuje se výjimkami v location.

Co je důležité

  • Modul plně emuluje mod_rewrite, včetně interních přesměrování a ukládání .htaccess do mezipaměti.
  • Podpora CMS bez šablon: WordPress, Drupal, Grav fungují s původními .htaccess.
  • Výkon: 90–100 % oproti čistému Nginxu, bez režie Apache.
  • Sestavení v RPM/DEB pro RHEL/Debian, podpora Dockeru.
  • Omezení: minimální RewriteMap, zjednodušené RewriteOptions (dostačující pro CMS).

— Editorial Team

Advertisement 728x90

Číst dál