홈으로 돌아가기

Nginx용 mod_rewrite: CMS 내 .htaccess

nginx-mod-rewrite 모듈은 CMS를 위해 Nginx에서 Apache .htaccess를 에뮬레이트합니다. mod_rewrite 규칙, index.php 폴백 및 캐싱 지원. 벤치마크 결과 네이티브 Nginx에 가까운 성능. RHEL/Debian용 빌드 및 설정 예제.

Nginx + .htaccess: CMS용 mod_rewrite 모듈
Advertisement 728x90

Nginx mod_rewrite 모듈: CMS를 위한 .htaccess 지원

Nginx는 Apache의 .htaccess를 지원하지 않아 WordPress, Drupal, Grav와 같은 인기 CMS 플랫폼으로 웹사이트를 이전할 때 어려움이 생깁니다. 이러한 시스템은 SEO 친화적인 URL, 디렉터리 보호, 오류 처리를 위해 mod_rewrite에 의존합니다. .htaccess 없이는 CMS가 404 오류를 반환하거나 Nginx + Apache 설정이 필요해 오버헤드가 추가됩니다.

mod_rewrite를 에뮬레이트하기 위해 nginx-mod-rewrite라는 모듈이 개발되었습니다. 이 모듈은 .htaccess를 실시간으로 파싱하여 내부 리다이렉트와 index.php로의 폴백을 포함한 재작성 규칙을 적용합니다. 서버, 위치, .htaccess 수준에서 작동하며 요청 풀 캐싱을 통해 파일 읽기를 최소화합니다.

제어판에서의 해결 방법

HestiaCP와 같은 제어판은 두 가지 방식으로 이 문제를 해결합니다:

Google AdInline article slot
  • try_files $uri $uri/ index.php?$args — 50–80%의 경우를 커버하지만 모든 mod_rewrite 규칙은 아닙니다.
  • ngx_http_rewrite_module 템플릿 — 특정 CMS를 위한 완전한 .htaccess 대체품이지만 설정을 플랫폼에 강하게 결합시킵니다.

nginx-mod-rewrite 모듈은 이러한 제한을 제거합니다: RewriteMap(최소한으로), RewriteOptions를 지원하며 템플릿이 필요 없고 서버 관리자 권한 없이 .htaccess를 편집할 수 있습니다.

모듈 빌드 및 설치

호스트 또는 Docker에서 빌드가 가능합니다. Almalinux 9의 경우:

  • Docker를 설치합니다.
  • 저장소를 클론합니다.
  • bash package_preparer.sh prepare "almalinux:9"를 실행합니다.

결과는 tmpbuild/에 RPM 패키지입니다:

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

Debian의 경우도 유사하게 — DEB 패키지입니다.

서버 구성

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은 .htaccess 파싱을 활성화합니다. 성능을 위해 정적 파일은 재작성 처리에서 제외됩니다.

Google AdInline article slot

성능 벤치마크

Drupal에서의 테스트(wrk, 30초):

| 시나리오 | Nginx + php-fpm | Nginx + mod_rewrite | Nginx + Apache + php-fpm |

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

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

| /robots.txt (정적) | 7384.25 req/s | 4591.31 req/s | 2007.70 req/s |

| /user/login (재작성) | 126.48 req/s | 128.58 req/s | 117.78 req/s |

모듈은 순수 Nginx 속도에 가깝고 Apache 조합보다 성능이 뛰어납니다. 정적 콘텐츠는 .htaccess 파싱으로 인해 느려지지만 위치 제외로 최적화됩니다.

핵심 포인트

  • 모듈은 내부 리다이렉트와 .htaccess 캐싱을 포함해 mod_rewrite를 완전히 에뮬레이트합니다.
  • 템플릿 없이 CMS 지원: WordPress, Drupal, Grav가 기본 .htaccess로 작동합니다.
  • 성능: 순수 Nginx의 90–100%, Apache 오버헤드 없음.
  • RHEL/Debian용 RPM/DEB로 빌드되며 Docker 지원.
  • 제한 사항: 최소한의 RewriteMap, 단순화된 RewriteOptions(CMS에 충분).

— Editorial Team

Advertisement 728x90

다음 읽기