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와 같은 제어판은 두 가지 방식으로 이 문제를 해결합니다:
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 패키지입니다:
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 파싱을 활성화합니다. 성능을 위해 정적 파일은 재작성 처리에서 제외됩니다.
성능 벤치마크
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
아직 댓글이 없습니다.